@transcend-io/cli 10.27.4 → 10.27.5

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 (355) hide show
  1. package/dist/{app-9G6prJ34.mjs → app-dIu3pdTM.mjs} +21 -21
  2. package/dist/{app-9G6prJ34.mjs.map → app-dIu3pdTM.mjs.map} +1 -1
  3. package/dist/{approvePrivacyRequests-QMPJYI3X.mjs → approvePrivacyRequests-B842tXn4.mjs} +2 -2
  4. package/dist/{approvePrivacyRequests-QMPJYI3X.mjs.map → approvePrivacyRequests-B842tXn4.mjs.map} +1 -1
  5. package/dist/bin/bash-complete.mjs +1 -1
  6. package/dist/bin/cli.mjs +1 -1
  7. package/dist/bin/cli.mjs.map +1 -1
  8. package/dist/bin/deprecated-command.mjs +3 -3
  9. package/dist/bin/deprecated-command.mjs.map +1 -1
  10. package/dist/{buildExamples-BkyOPD_E.mjs → buildExamples-CRrUU89C.mjs} +2 -2
  11. package/dist/{buildExamples-BkyOPD_E.mjs.map → buildExamples-CRrUU89C.mjs.map} +1 -1
  12. package/dist/{buildXdiSyncEndpoint-5HFin8GM.mjs → buildXdiSyncEndpoint-B9seJTxP.mjs} +2 -2
  13. package/dist/{buildXdiSyncEndpoint-5HFin8GM.mjs.map → buildXdiSyncEndpoint-B9seJTxP.mjs.map} +1 -1
  14. package/dist/{bulkRestartRequests-CYTUjpuK.mjs → bulkRestartRequests-CE7cDUMd.mjs} +2 -2
  15. package/dist/{bulkRestartRequests-CYTUjpuK.mjs.map → bulkRestartRequests-CE7cDUMd.mjs.map} +1 -1
  16. package/dist/{bulkRetryEnrichers-xpffnBsW.mjs → bulkRetryEnrichers-BcSANZPC.mjs} +2 -2
  17. package/dist/{bulkRetryEnrichers-xpffnBsW.mjs.map → bulkRetryEnrichers-BcSANZPC.mjs.map} +1 -1
  18. package/dist/{cancelPrivacyRequests-B-QuIjkC.mjs → cancelPrivacyRequests-BKibbagv.mjs} +2 -2
  19. package/dist/{cancelPrivacyRequests-B-QuIjkC.mjs.map → cancelPrivacyRequests-BKibbagv.mjs.map} +1 -1
  20. package/dist/{codecs-DJFlZLGT.mjs → codecs-zRkskjaJ.mjs} +1 -1
  21. package/dist/{codecs-DJFlZLGT.mjs.map → codecs-zRkskjaJ.mjs.map} +1 -1
  22. package/dist/collectCsvFilesOrExit-Dg5U3Qx_.mjs +2 -0
  23. package/dist/collectCsvFilesOrExit-Dg5U3Qx_.mjs.map +1 -0
  24. package/dist/collectParquetFilesOrExit-BlG2RRSC.mjs +2 -0
  25. package/dist/collectParquetFilesOrExit-BlG2RRSC.mjs.map +1 -0
  26. package/dist/{command-_zwStiyM.mjs → command-DKNKpgUB.mjs} +2 -2
  27. package/dist/{command-_zwStiyM.mjs.map → command-DKNKpgUB.mjs.map} +1 -1
  28. package/dist/commands/admin/chunk-csv/worker.mjs +1 -1
  29. package/dist/commands/admin/parquet-to-csv/worker.mjs +1 -1
  30. package/dist/consentManagersToBusinessEntities-Rv-ajWya.mjs +2 -0
  31. package/dist/consentManagersToBusinessEntities-Rv-ajWya.mjs.map +1 -0
  32. package/dist/{constants-BgCEW975.mjs → constants-B6wESCW2.mjs} +2 -2
  33. package/dist/{constants-BgCEW975.mjs.map → constants-B6wESCW2.mjs.map} +1 -1
  34. package/dist/{constants-C9xZJ9YW.mjs → constants-BuoISmXP.mjs} +1 -1
  35. package/dist/{constants-C9xZJ9YW.mjs.map → constants-BuoISmXP.mjs.map} +1 -1
  36. package/dist/{constants-DyD22MtN.mjs → constants-CdgK1myP.mjs} +2 -2
  37. package/dist/{constants-DyD22MtN.mjs.map → constants-CdgK1myP.mjs.map} +1 -1
  38. package/dist/context-4GAUnhTE.mjs +2 -0
  39. package/dist/context-4GAUnhTE.mjs.map +1 -0
  40. package/dist/createPoolingCommandUi-vTsGgYZT.mjs +14 -0
  41. package/dist/createPoolingCommandUi-vTsGgYZT.mjs.map +1 -0
  42. package/dist/done-input-validation-BFgMCQWH.mjs +2 -0
  43. package/dist/done-input-validation-BFgMCQWH.mjs.map +1 -0
  44. package/dist/{downloadPrivacyRequestFiles-W5pXxfeu.mjs → downloadPrivacyRequestFiles-Dn3VexN2.mjs} +2 -2
  45. package/dist/{downloadPrivacyRequestFiles-W5pXxfeu.mjs.map → downloadPrivacyRequestFiles-Dn3VexN2.mjs.map} +1 -1
  46. package/dist/{extractClientError-X9wJVqGq.mjs → extractClientError-DeS63kje.mjs} +1 -1
  47. package/dist/{extractClientError-X9wJVqGq.mjs.map → extractClientError-DeS63kje.mjs.map} +1 -1
  48. package/dist/{fetchAllRequests-DP24WqrP.mjs → fetchAllRequests-DUQGTJjx.mjs} +2 -2
  49. package/dist/{fetchAllRequests-DP24WqrP.mjs.map → fetchAllRequests-DUQGTJjx.mjs.map} +1 -1
  50. package/dist/{fuzzyMatchColumns-C1STZ_T1.mjs → fuzzyMatchColumns-BDD4a2W0.mjs} +2 -2
  51. package/dist/{fuzzyMatchColumns-C1STZ_T1.mjs.map → fuzzyMatchColumns-BDD4a2W0.mjs.map} +1 -1
  52. package/dist/{generateCrossAccountApiKeys-BTuoFxxy.mjs → generateCrossAccountApiKeys-QhnLqtUN.mjs} +2 -2
  53. package/dist/{generateCrossAccountApiKeys-BTuoFxxy.mjs.map → generateCrossAccountApiKeys-QhnLqtUN.mjs.map} +1 -1
  54. package/dist/impl-3IyENr9T.mjs +2 -0
  55. package/dist/impl-3IyENr9T.mjs.map +1 -0
  56. package/dist/impl-4rLX5Wah2.mjs +2 -0
  57. package/dist/impl-4rLX5Wah2.mjs.map +1 -0
  58. package/dist/impl-9TDsbGfF2.mjs +2 -0
  59. package/dist/impl-9TDsbGfF2.mjs.map +1 -0
  60. package/dist/impl-BPjGRqOL2.mjs +3 -0
  61. package/dist/{impl-CNzXdBVG2.mjs.map → impl-BPjGRqOL2.mjs.map} +1 -1
  62. package/dist/impl-BPn_YPIq2.mjs +2 -0
  63. package/dist/{impl-q66XVeBW2.mjs.map → impl-BPn_YPIq2.mjs.map} +1 -1
  64. package/dist/impl-BQTw6jpw.mjs +2 -0
  65. package/dist/impl-BQTw6jpw.mjs.map +1 -0
  66. package/dist/impl-Ba8naMzu.mjs +2 -0
  67. package/dist/impl-Ba8naMzu.mjs.map +1 -0
  68. package/dist/impl-BbWzTCSd2.mjs +2 -0
  69. package/dist/{impl-8wGX5Vf32.mjs.map → impl-BbWzTCSd2.mjs.map} +1 -1
  70. package/dist/impl-BddyFp_q.mjs +3 -0
  71. package/dist/impl-BddyFp_q.mjs.map +1 -0
  72. package/dist/impl-BgxjEv88.mjs +3 -0
  73. package/dist/impl-BgxjEv88.mjs.map +1 -0
  74. package/dist/impl-BiBNqcob.mjs +2 -0
  75. package/dist/impl-BiBNqcob.mjs.map +1 -0
  76. package/dist/{impl-CIncREux.mjs → impl-BkyqCY72.mjs} +2 -2
  77. package/dist/impl-BkyqCY72.mjs.map +1 -0
  78. package/dist/{impl-Ca064LmU.mjs → impl-BlFBTc6f.mjs} +3 -3
  79. package/dist/{impl-Ca064LmU.mjs.map → impl-BlFBTc6f.mjs.map} +1 -1
  80. package/dist/impl-BoCD0t4j.mjs +3 -0
  81. package/dist/impl-BoCD0t4j.mjs.map +1 -0
  82. package/dist/impl-BqiclSRZ.mjs +2 -0
  83. package/dist/impl-BqiclSRZ.mjs.map +1 -0
  84. package/dist/impl-BsEYMBx2.mjs +7 -0
  85. package/dist/{impl-DvSnW_IA.mjs.map → impl-BsEYMBx2.mjs.map} +1 -1
  86. package/dist/impl-CBC5K-IH.mjs +2 -0
  87. package/dist/impl-CBC5K-IH.mjs.map +1 -0
  88. package/dist/impl-CH40t5qf.mjs +2 -0
  89. package/dist/impl-CH40t5qf.mjs.map +1 -0
  90. package/dist/impl-CLVMZXJo.mjs +2 -0
  91. package/dist/impl-CLVMZXJo.mjs.map +1 -0
  92. package/dist/{impl-C2Irk48l.mjs → impl-CMYYX3Kz.mjs} +2 -2
  93. package/dist/{impl-C2Irk48l.mjs.map → impl-CMYYX3Kz.mjs.map} +1 -1
  94. package/dist/impl-CVChVd63.mjs +2 -0
  95. package/dist/impl-CVChVd63.mjs.map +1 -0
  96. package/dist/impl-CXdy0YMX.mjs +2 -0
  97. package/dist/impl-CXdy0YMX.mjs.map +1 -0
  98. package/dist/impl-CZ-KvZE02.mjs +2 -0
  99. package/dist/{impl-DoJDjUsd2.mjs.map → impl-CZ-KvZE02.mjs.map} +1 -1
  100. package/dist/impl-CbijbA-M2.mjs +2 -0
  101. package/dist/{impl-DOoJoSO22.mjs.map → impl-CbijbA-M2.mjs.map} +1 -1
  102. package/dist/impl-CccuY3Za.mjs +12 -0
  103. package/dist/impl-CccuY3Za.mjs.map +1 -0
  104. package/dist/impl-CclEOdC32.mjs +2 -0
  105. package/dist/{impl-BtiWdLEm2.mjs.map → impl-CclEOdC32.mjs.map} +1 -1
  106. package/dist/impl-Cq5wI-kP.mjs +2 -0
  107. package/dist/impl-Cq5wI-kP.mjs.map +1 -0
  108. package/dist/impl-CrY1za0t.mjs +2 -0
  109. package/dist/impl-CrY1za0t.mjs.map +1 -0
  110. package/dist/impl-CusKk_JR2.mjs +2 -0
  111. package/dist/{impl-jVkU5ZQe2.mjs.map → impl-CusKk_JR2.mjs.map} +1 -1
  112. package/dist/impl-CzbVqbm0.mjs +5 -0
  113. package/dist/impl-CzbVqbm0.mjs.map +1 -0
  114. package/dist/impl-D33Zr0vh2.mjs +2 -0
  115. package/dist/impl-D33Zr0vh2.mjs.map +1 -0
  116. package/dist/impl-DG9RwTkA2.mjs +2 -0
  117. package/dist/{impl-BygKSE0s2.mjs.map → impl-DG9RwTkA2.mjs.map} +1 -1
  118. package/dist/impl-DQG3PiAW2.mjs +2 -0
  119. package/dist/{impl-DMMWwLyN2.mjs.map → impl-DQG3PiAW2.mjs.map} +1 -1
  120. package/dist/impl-DRimS_G8.mjs +2 -0
  121. package/dist/impl-DRimS_G8.mjs.map +1 -0
  122. package/dist/impl-DWBQKUuq.mjs +2 -0
  123. package/dist/{impl-BtLxw8E7.mjs.map → impl-DWBQKUuq.mjs.map} +1 -1
  124. package/dist/impl-DbF7uw7f2.mjs +2 -0
  125. package/dist/{impl-BRm1_RUu2.mjs.map → impl-DbF7uw7f2.mjs.map} +1 -1
  126. package/dist/impl-DbPLuDc22.mjs +2 -0
  127. package/dist/impl-DbPLuDc22.mjs.map +1 -0
  128. package/dist/impl-DiyWNLJq.mjs +2 -0
  129. package/dist/impl-DiyWNLJq.mjs.map +1 -0
  130. package/dist/impl-DlaWf-oS2.mjs +2 -0
  131. package/dist/impl-DlaWf-oS2.mjs.map +1 -0
  132. package/dist/impl-Dpes0u_6.mjs +2 -0
  133. package/dist/{impl-CFB9lqIN.mjs.map → impl-Dpes0u_6.mjs.map} +1 -1
  134. package/dist/impl-DxXWaXFU.mjs +2 -0
  135. package/dist/impl-DxXWaXFU.mjs.map +1 -0
  136. package/dist/impl-DzJG5HaX.mjs +2 -0
  137. package/dist/impl-DzJG5HaX.mjs.map +1 -0
  138. package/dist/impl-GYM4LDKp2.mjs +2 -0
  139. package/dist/{impl-CDQ82oJL2.mjs.map → impl-GYM4LDKp2.mjs.map} +1 -1
  140. package/dist/{impl-DSE-RmED.mjs → impl-GnxjtYL7.mjs} +2 -2
  141. package/dist/impl-GnxjtYL7.mjs.map +1 -0
  142. package/dist/impl-PYtpY5hs2.mjs +2 -0
  143. package/dist/impl-PYtpY5hs2.mjs.map +1 -0
  144. package/dist/impl-QeWNZCg4.mjs +3 -0
  145. package/dist/impl-QeWNZCg4.mjs.map +1 -0
  146. package/dist/impl-V_ffkzbd2.mjs +2 -0
  147. package/dist/{impl-B6butj0_2.mjs.map → impl-V_ffkzbd2.mjs.map} +1 -1
  148. package/dist/impl-_rrZ0KXo.mjs +3 -0
  149. package/dist/impl-_rrZ0KXo.mjs.map +1 -0
  150. package/dist/impl-_tY0CJdZ.mjs +5 -0
  151. package/dist/impl-_tY0CJdZ.mjs.map +1 -0
  152. package/dist/impl-nJ7LzilX2.mjs +2 -0
  153. package/dist/impl-nJ7LzilX2.mjs.map +1 -0
  154. package/dist/impl-p0AyZWFL.mjs +2 -0
  155. package/dist/impl-p0AyZWFL.mjs.map +1 -0
  156. package/dist/impl-s5h7dIlv2.mjs +2 -0
  157. package/dist/{impl-D8FcLfAL2.mjs.map → impl-s5h7dIlv2.mjs.map} +1 -1
  158. package/dist/impl-uKjAibIR.mjs +2 -0
  159. package/dist/impl-uKjAibIR.mjs.map +1 -0
  160. package/dist/impl-wf0PvJms.mjs +2 -0
  161. package/dist/impl-wf0PvJms.mjs.map +1 -0
  162. package/dist/impl-xRwX5ZLK.mjs +2 -0
  163. package/dist/impl-xRwX5ZLK.mjs.map +1 -0
  164. package/dist/index.d.mts +76 -12
  165. package/dist/index.d.mts.map +1 -1
  166. package/dist/index.mjs +3 -3
  167. package/dist/index.mjs.map +1 -1
  168. package/dist/initializeCliRuntime-B7zDhMok.mjs +2 -0
  169. package/dist/initializeCliRuntime-B7zDhMok.mjs.map +1 -0
  170. package/dist/{inquirer-B0OF_nRe.mjs → inquirer-DNa31Mkx.mjs} +2 -2
  171. package/dist/{inquirer-B0OF_nRe.mjs.map → inquirer-DNa31Mkx.mjs.map} +1 -1
  172. package/dist/listFiles-DrxRhlZ2.mjs +2 -0
  173. package/dist/listFiles-DrxRhlZ2.mjs.map +1 -0
  174. package/dist/logger-CB_h_zbj.mjs +2 -0
  175. package/dist/logger-CB_h_zbj.mjs.map +1 -0
  176. package/dist/mapConsentCsvRowsToInputs-DA7BRD7M.mjs +2 -0
  177. package/dist/mapConsentCsvRowsToInputs-DA7BRD7M.mjs.map +1 -0
  178. package/dist/{markRequestDataSiloIdsCompleted-CcJGKOn4.mjs → markRequestDataSiloIdsCompleted-CK7PNwTz.mjs} +2 -2
  179. package/dist/{markRequestDataSiloIdsCompleted-CcJGKOn4.mjs.map → markRequestDataSiloIdsCompleted-CK7PNwTz.mjs.map} +1 -1
  180. package/dist/{markSilentPrivacyRequests-CVxwueuH.mjs → markSilentPrivacyRequests-Cb-J9ckA.mjs} +2 -2
  181. package/dist/{markSilentPrivacyRequests-CVxwueuH.mjs.map → markSilentPrivacyRequests-Cb-J9ckA.mjs.map} +1 -1
  182. package/dist/{mergeTranscendInputs-DjPe49yR.mjs → mergeTranscendInputs-CkpitZbH.mjs} +2 -2
  183. package/dist/{mergeTranscendInputs-DjPe49yR.mjs.map → mergeTranscendInputs-CkpitZbH.mjs.map} +1 -1
  184. package/dist/{notifyPrivacyRequestsAdditionalTime-D1gLyndO.mjs → notifyPrivacyRequestsAdditionalTime-it1FA62W.mjs} +2 -2
  185. package/dist/{notifyPrivacyRequestsAdditionalTime-D1gLyndO.mjs.map → notifyPrivacyRequestsAdditionalTime-it1FA62W.mjs.map} +1 -1
  186. package/dist/{parquetToCsvOneFile-0O4iLz0t.mjs → parquetToCsvOneFile-Dtz90qfJ.mjs} +2 -2
  187. package/dist/{parquetToCsvOneFile-0O4iLz0t.mjs.map → parquetToCsvOneFile-Dtz90qfJ.mjs.map} +1 -1
  188. package/dist/{parseAttributesFromString-CYcxsS3n.mjs → parseAttributesFromString-BxJcnKmn.mjs} +2 -2
  189. package/dist/{parseAttributesFromString-CYcxsS3n.mjs.map → parseAttributesFromString-BxJcnKmn.mjs.map} +1 -1
  190. package/dist/{parseVariablesFromString-B4TUkJRF.mjs → parseVariablesFromString-cu5gPC3M.mjs} +1 -1
  191. package/dist/{parseVariablesFromString-B4TUkJRF.mjs.map → parseVariablesFromString-cu5gPC3M.mjs.map} +1 -1
  192. package/dist/{pullAllDatapoints-DJno8LkB.mjs → pullAllDatapoints-XqreMBT5.mjs} +2 -2
  193. package/dist/{pullAllDatapoints-DJno8LkB.mjs.map → pullAllDatapoints-XqreMBT5.mjs.map} +1 -1
  194. package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-BCblZfOb.mjs → pullChunkedCustomSiloOutstandingIdentifiers-DuPDOm6f.mjs} +2 -2
  195. package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-BCblZfOb.mjs.map → pullChunkedCustomSiloOutstandingIdentifiers-DuPDOm6f.mjs.map} +1 -1
  196. package/dist/{pullConsentManagerMetrics-C41UhU8u.mjs → pullConsentManagerMetrics-Dk5IejaY.mjs} +2 -2
  197. package/dist/{pullConsentManagerMetrics-C41UhU8u.mjs.map → pullConsentManagerMetrics-Dk5IejaY.mjs.map} +1 -1
  198. package/dist/{pullManualEnrichmentIdentifiersToCsv-BYjAq9G5.mjs → pullManualEnrichmentIdentifiersToCsv-CAD1navz.mjs} +2 -2
  199. package/dist/{pullManualEnrichmentIdentifiersToCsv-BYjAq9G5.mjs.map → pullManualEnrichmentIdentifiersToCsv-CAD1navz.mjs.map} +1 -1
  200. package/dist/{pullTranscendConfiguration-DbRVLKq5.mjs → pullTranscendConfiguration-NcFjHE8k.mjs} +2 -2
  201. package/dist/{pullTranscendConfiguration-DbRVLKq5.mjs.map → pullTranscendConfiguration-NcFjHE8k.mjs.map} +1 -1
  202. package/dist/{pullUnstructuredSubDataPointRecommendations-B9xIDPf2.mjs → pullUnstructuredSubDataPointRecommendations-Cf4irXl4.mjs} +2 -2
  203. package/dist/{pullUnstructuredSubDataPointRecommendations-B9xIDPf2.mjs.map → pullUnstructuredSubDataPointRecommendations-Cf4irXl4.mjs.map} +1 -1
  204. package/dist/pushCronIdentifiersFromCsv-BGaJycWo.mjs +2 -0
  205. package/dist/{pushCronIdentifiersFromCsv-DIZF-QXC.mjs.map → pushCronIdentifiersFromCsv-BGaJycWo.mjs.map} +1 -1
  206. package/dist/pushManualEnrichmentIdentifiersFromCsv-B9okRkhL.mjs +2 -0
  207. package/dist/{pushManualEnrichmentIdentifiersFromCsv-Ch5-jHbY.mjs.map → pushManualEnrichmentIdentifiersFromCsv-B9okRkhL.mjs.map} +1 -1
  208. package/dist/readCsv-CmRYYFJc.mjs +2 -0
  209. package/dist/readCsv-CmRYYFJc.mjs.map +1 -0
  210. package/dist/{readTranscendYaml-bL1qFPqv.mjs → readTranscendYaml-DtJz9mor.mjs} +3 -3
  211. package/dist/readTranscendYaml-DtJz9mor.mjs.map +1 -0
  212. package/dist/{removeUnverifiedRequestIdentifiers-CHupDNvu.mjs → removeUnverifiedRequestIdentifiers-DJhxiy_D.mjs} +2 -2
  213. package/dist/{removeUnverifiedRequestIdentifiers-CHupDNvu.mjs.map → removeUnverifiedRequestIdentifiers-DJhxiy_D.mjs.map} +1 -1
  214. package/dist/{request-BIplTb3L.mjs → request-CCCU2SdV.mjs} +1 -1
  215. package/dist/{request-BIplTb3L.mjs.map → request-CCCU2SdV.mjs.map} +1 -1
  216. package/dist/{retryRequestDataSilos-DlAldSyR.mjs → retryRequestDataSilos-6JfyZclD.mjs} +2 -2
  217. package/dist/{retryRequestDataSilos-DlAldSyR.mjs.map → retryRequestDataSilos-6JfyZclD.mjs.map} +1 -1
  218. package/dist/runOpa-Q2r3qPsi.mjs +2 -0
  219. package/dist/runOpa-Q2r3qPsi.mjs.map +1 -0
  220. package/dist/{skipPreflightJobs-C4trcphf.mjs → skipPreflightJobs-xpbtJ3dK.mjs} +2 -2
  221. package/dist/{skipPreflightJobs-C4trcphf.mjs.map → skipPreflightJobs-xpbtJ3dK.mjs.map} +1 -1
  222. package/dist/{skipRequestDataSilos-D6babS9E.mjs → skipRequestDataSilos-B7RA6I3Z.mjs} +2 -2
  223. package/dist/{skipRequestDataSilos-D6babS9E.mjs.map → skipRequestDataSilos-B7RA6I3Z.mjs.map} +1 -1
  224. package/dist/{streamPrivacyRequestsToCsv-CMzC_73c.mjs → streamPrivacyRequestsToCsv-DT31SP6w.mjs} +2 -2
  225. package/dist/{streamPrivacyRequestsToCsv-CMzC_73c.mjs.map → streamPrivacyRequestsToCsv-DT31SP6w.mjs.map} +1 -1
  226. package/dist/{syncCodePackages-Dhm5jI6B.mjs → syncCodePackages-ozt9aBXf.mjs} +2 -2
  227. package/dist/{syncCodePackages-Dhm5jI6B.mjs.map → syncCodePackages-ozt9aBXf.mjs.map} +1 -1
  228. package/dist/{updateConsentManagerVersionToLatest-CFYnN3Gk.mjs → updateConsentManagerVersionToLatest-CCzWEBEj.mjs} +2 -2
  229. package/dist/{updateConsentManagerVersionToLatest-CFYnN3Gk.mjs.map → updateConsentManagerVersionToLatest-CCzWEBEj.mjs.map} +1 -1
  230. package/dist/{uploadConsents-C5sG51Dk.mjs → uploadConsents-CDqFNWX_.mjs} +2 -2
  231. package/dist/{uploadConsents-C5sG51Dk.mjs.map → uploadConsents-CDqFNWX_.mjs.map} +1 -1
  232. package/dist/{uploadPrivacyRequestsFromCsv-BnzI39-b.mjs → uploadPrivacyRequestsFromCsv-CVpBFaYB.mjs} +2 -2
  233. package/dist/{uploadPrivacyRequestsFromCsv-BnzI39-b.mjs.map → uploadPrivacyRequestsFromCsv-CVpBFaYB.mjs.map} +1 -1
  234. package/dist/validateTranscendAuth-3guZJPKH.mjs +2 -0
  235. package/dist/validateTranscendAuth-3guZJPKH.mjs.map +1 -0
  236. package/dist/{writeCsv-DMw5OmWp.mjs → writeCsv-rhlEBjYp.mjs} +1 -1
  237. package/dist/{writeCsv-DMw5OmWp.mjs.map → writeCsv-rhlEBjYp.mjs.map} +1 -1
  238. package/package.json +2 -2
  239. package/dist/collectCsvFilesOrExit-BPo8Mjy7.mjs +0 -2
  240. package/dist/collectCsvFilesOrExit-BPo8Mjy7.mjs.map +0 -1
  241. package/dist/collectParquetFilesOrExit-DVS9_OSv.mjs +0 -2
  242. package/dist/collectParquetFilesOrExit-DVS9_OSv.mjs.map +0 -1
  243. package/dist/consentManagersToBusinessEntities-rf8_xu71.mjs +0 -5
  244. package/dist/consentManagersToBusinessEntities-rf8_xu71.mjs.map +0 -1
  245. package/dist/context-Br0NHHOk.mjs +0 -2
  246. package/dist/context-Br0NHHOk.mjs.map +0 -1
  247. package/dist/createExtraKeyHandler-DSN5zA2f.mjs +0 -14
  248. package/dist/createExtraKeyHandler-DSN5zA2f.mjs.map +0 -1
  249. package/dist/done-input-validation-DL31vk7g.mjs +0 -2
  250. package/dist/done-input-validation-DL31vk7g.mjs.map +0 -1
  251. package/dist/impl-4BsLrbMs.mjs +0 -2
  252. package/dist/impl-4BsLrbMs.mjs.map +0 -1
  253. package/dist/impl-7pxeoDZg.mjs +0 -5
  254. package/dist/impl-7pxeoDZg.mjs.map +0 -1
  255. package/dist/impl-8VwlDfF2.mjs +0 -2
  256. package/dist/impl-8VwlDfF2.mjs.map +0 -1
  257. package/dist/impl-8wGX5Vf32.mjs +0 -2
  258. package/dist/impl-93xjb93p.mjs +0 -2
  259. package/dist/impl-93xjb93p.mjs.map +0 -1
  260. package/dist/impl-B2eZGemA.mjs +0 -2
  261. package/dist/impl-B2eZGemA.mjs.map +0 -1
  262. package/dist/impl-B6butj0_2.mjs +0 -2
  263. package/dist/impl-BRm1_RUu2.mjs +0 -2
  264. package/dist/impl-BauzMfVC2.mjs +0 -2
  265. package/dist/impl-BauzMfVC2.mjs.map +0 -1
  266. package/dist/impl-BmQR1Pae.mjs +0 -3
  267. package/dist/impl-BmQR1Pae.mjs.map +0 -1
  268. package/dist/impl-BnzPrDmM.mjs +0 -2
  269. package/dist/impl-BnzPrDmM.mjs.map +0 -1
  270. package/dist/impl-BohgbWOH.mjs +0 -2
  271. package/dist/impl-BohgbWOH.mjs.map +0 -1
  272. package/dist/impl-BqTimIMI.mjs +0 -2
  273. package/dist/impl-BqTimIMI.mjs.map +0 -1
  274. package/dist/impl-BtLxw8E7.mjs +0 -2
  275. package/dist/impl-BtiWdLEm2.mjs +0 -2
  276. package/dist/impl-Bur_bNXN.mjs +0 -2
  277. package/dist/impl-Bur_bNXN.mjs.map +0 -1
  278. package/dist/impl-BwuWn3TM.mjs +0 -2
  279. package/dist/impl-BwuWn3TM.mjs.map +0 -1
  280. package/dist/impl-BxQE7dL92.mjs +0 -2
  281. package/dist/impl-BxQE7dL92.mjs.map +0 -1
  282. package/dist/impl-BygKSE0s2.mjs +0 -2
  283. package/dist/impl-C3f_H_77.mjs +0 -3
  284. package/dist/impl-C3f_H_77.mjs.map +0 -1
  285. package/dist/impl-CDQ82oJL2.mjs +0 -2
  286. package/dist/impl-CFB9lqIN.mjs +0 -2
  287. package/dist/impl-CIncREux.mjs.map +0 -1
  288. package/dist/impl-CMpVsG1a.mjs +0 -2
  289. package/dist/impl-CMpVsG1a.mjs.map +0 -1
  290. package/dist/impl-CNzXdBVG2.mjs +0 -3
  291. package/dist/impl-CZG9gzzR.mjs +0 -3
  292. package/dist/impl-CZG9gzzR.mjs.map +0 -1
  293. package/dist/impl-CaiSz_JT2.mjs +0 -2
  294. package/dist/impl-CaiSz_JT2.mjs.map +0 -1
  295. package/dist/impl-ChP6AAtL.mjs +0 -3
  296. package/dist/impl-ChP6AAtL.mjs.map +0 -1
  297. package/dist/impl-Chska4J8.mjs +0 -3
  298. package/dist/impl-Chska4J8.mjs.map +0 -1
  299. package/dist/impl-CkoQHhc8.mjs +0 -12
  300. package/dist/impl-CkoQHhc8.mjs.map +0 -1
  301. package/dist/impl-Cl3hf0Pd.mjs +0 -2
  302. package/dist/impl-Cl3hf0Pd.mjs.map +0 -1
  303. package/dist/impl-Cm5zP_mL2.mjs +0 -2
  304. package/dist/impl-Cm5zP_mL2.mjs.map +0 -1
  305. package/dist/impl-CnrK11Gr2.mjs +0 -2
  306. package/dist/impl-CnrK11Gr2.mjs.map +0 -1
  307. package/dist/impl-D0-ioxpZ.mjs +0 -2
  308. package/dist/impl-D0-ioxpZ.mjs.map +0 -1
  309. package/dist/impl-D8FcLfAL2.mjs +0 -2
  310. package/dist/impl-DBK5c6d0.mjs +0 -2
  311. package/dist/impl-DBK5c6d0.mjs.map +0 -1
  312. package/dist/impl-DBny72kx2.mjs +0 -2
  313. package/dist/impl-DBny72kx2.mjs.map +0 -1
  314. package/dist/impl-DLWhxaMi.mjs +0 -2
  315. package/dist/impl-DLWhxaMi.mjs.map +0 -1
  316. package/dist/impl-DMMWwLyN2.mjs +0 -2
  317. package/dist/impl-DOoJoSO22.mjs +0 -2
  318. package/dist/impl-DSE-RmED.mjs.map +0 -1
  319. package/dist/impl-DTaYnwjN.mjs +0 -2
  320. package/dist/impl-DTaYnwjN.mjs.map +0 -1
  321. package/dist/impl-DUn2j-1O.mjs +0 -2
  322. package/dist/impl-DUn2j-1O.mjs.map +0 -1
  323. package/dist/impl-DVjCdEx9.mjs +0 -2
  324. package/dist/impl-DVjCdEx9.mjs.map +0 -1
  325. package/dist/impl-DmODS2cY.mjs +0 -2
  326. package/dist/impl-DmODS2cY.mjs.map +0 -1
  327. package/dist/impl-DoJDjUsd2.mjs +0 -2
  328. package/dist/impl-DvSnW_IA.mjs +0 -7
  329. package/dist/impl-HNBTIl1R.mjs +0 -2
  330. package/dist/impl-HNBTIl1R.mjs.map +0 -1
  331. package/dist/impl-W7FHn0mS.mjs +0 -2
  332. package/dist/impl-W7FHn0mS.mjs.map +0 -1
  333. package/dist/impl-Xrph1kvG2.mjs +0 -2
  334. package/dist/impl-Xrph1kvG2.mjs.map +0 -1
  335. package/dist/impl-jVkU5ZQe2.mjs +0 -2
  336. package/dist/impl-q66XVeBW2.mjs +0 -2
  337. package/dist/impl-xIb20rTt.mjs +0 -2
  338. package/dist/impl-xIb20rTt.mjs.map +0 -1
  339. package/dist/listFiles-C5kubvdN.mjs +0 -2
  340. package/dist/listFiles-C5kubvdN.mjs.map +0 -1
  341. package/dist/logger-Ckep4QXn.mjs +0 -2
  342. package/dist/logger-Ckep4QXn.mjs.map +0 -1
  343. package/dist/pushCronIdentifiersFromCsv-DIZF-QXC.mjs +0 -2
  344. package/dist/pushManualEnrichmentIdentifiersFromCsv-Ch5-jHbY.mjs +0 -2
  345. package/dist/readCsv--FfP8n-H.mjs +0 -2
  346. package/dist/readCsv--FfP8n-H.mjs.map +0 -1
  347. package/dist/readTranscendYaml-bL1qFPqv.mjs.map +0 -1
  348. package/dist/runOpa-D511z37u.mjs +0 -2
  349. package/dist/runOpa-D511z37u.mjs.map +0 -1
  350. package/dist/uploadCookiesFromCsv-BgrbBl1Y.mjs +0 -2
  351. package/dist/uploadCookiesFromCsv-BgrbBl1Y.mjs.map +0 -1
  352. package/dist/uploadDataFlowsFromCsv-CJMs2KA1.mjs +0 -2
  353. package/dist/uploadDataFlowsFromCsv-CJMs2KA1.mjs.map +0 -1
  354. package/dist/validateTranscendAuth-CAO5ktnu.mjs +0 -2
  355. package/dist/validateTranscendAuth-CAO5ktnu.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl-HNBTIl1R.mjs","names":["buildXdiSyncEndpointHelper"],"sources":["../src/commands/consent/build-xdi-sync-endpoint/impl.ts"],"sourcesContent":["import { writeFileSync } from 'node:fs';\n\nimport colors from 'colors';\n\nimport type { LocalContext } from '../../../context.js';\nimport { validateTranscendAuth } from '../../../lib/api-keys/index.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { buildXdiSyncEndpoint as buildXdiSyncEndpointHelper } from '../../../lib/consent-manager/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface BuildXdiSyncEndpointCommandFlags {\n auth: string;\n xdiLocation: string;\n file: string;\n removeIpAddresses: boolean;\n domainBlockList: string[];\n xdiAllowedCommands: string;\n transcendUrl: string;\n}\n\nexport async function buildXdiSyncEndpoint(\n this: LocalContext,\n {\n auth,\n xdiLocation,\n file,\n removeIpAddresses,\n domainBlockList,\n xdiAllowedCommands,\n transcendUrl,\n }: BuildXdiSyncEndpointCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n // Parse authentication as API key or path to list of API keys\n const apiKeyOrList = await validateTranscendAuth(auth);\n\n // Build the sync endpoint\n const { syncGroups, html } = await buildXdiSyncEndpointHelper(apiKeyOrList, {\n xdiLocation,\n transcendUrl,\n removeIpAddresses,\n domainBlockList: domainBlockList.length > 0 ? domainBlockList : undefined,\n xdiAllowedCommands,\n });\n\n // Log success\n logger.info(\n colors.green(\n `Successfully constructed sync endpoint for sync groups: ${JSON.stringify(\n syncGroups,\n null,\n 2,\n )}`,\n ),\n );\n\n // Write to disk\n writeFileSync(file, html);\n logger.info(colors.green(`Wrote configuration to file \"${file}\"!`));\n}\n"],"mappings":"kRAoBA,eAAsB,EAEpB,CACE,OACA,cACA,OACA,oBACA,kBACA,qBACA,gBAEa,CACf,EAAoB,KAAK,QAAQ,KAAK,CAMtC,GAAM,CAAE,aAAY,QAAS,MAAMA,EAA2B,MAHnC,EAAsB,EAAK,CAGsB,CAC1E,cACA,eACA,oBACA,gBAAiB,EAAgB,OAAS,EAAI,EAAkB,IAAA,GAChE,qBACD,CAAC,CAGF,EAAO,KACL,EAAO,MACL,2DAA2D,KAAK,UAC9D,EACA,KACA,EACD,GACF,CACF,CAGD,EAAc,EAAM,EAAK,CACzB,EAAO,KAAK,EAAO,MAAM,gCAAgC,EAAK,IAAI,CAAC"}
@@ -1,2 +0,0 @@
1
- import{t as e}from"./logger-Ckep4QXn.mjs";import{t}from"./updateConsentManagerVersionToLatest-CFYnN3Gk.mjs";import{t as n}from"./validateTranscendAuth-CAO5ktnu.mjs";import{t as r}from"./done-input-validation-DL31vk7g.mjs";import{ConsentBundleType as i}from"@transcend-io/privacy-types";import a from"colors";import{mapSeries as o}from"@transcend-io/utils";async function s({auth:s,bundleTypes:c=[i.Production,i.Test],deploy:l,transcendUrl:u}){r(this.process.exit);let d=await n(s);typeof d==`string`?(await t({deploy:l,transcendUrl:u,auth:d,bundleTypes:c}),e.info(a.green(`Successfully updated Consent Manager!`))):(await o(d,async n=>{e.info(a.magenta(`Updating Consent Manager for organization "${n.organizationName}"...`)),await t({deploy:l,transcendUrl:u,auth:n.apiKey,bundleTypes:c}),e.info(a.green(`Successfully updated Consent Manager for organization "${n.organizationName}"!`))}),e.info(a.green(`Successfully updated Consent Managers!`)))}export{s as updateConsentManager};
2
- //# sourceMappingURL=impl-W7FHn0mS.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl-W7FHn0mS.mjs","names":[],"sources":["../src/commands/consent/update-consent-manager/impl.ts"],"sourcesContent":["import { ConsentBundleType } from '@transcend-io/privacy-types';\nimport { mapSeries } from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport type { LocalContext } from '../../../context.js';\nimport { validateTranscendAuth } from '../../../lib/api-keys/index.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { updateConsentManagerVersionToLatest } from '../../../lib/consent-manager/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface UpdateConsentManagerCommandFlags {\n auth: string;\n bundleTypes: ConsentBundleType[];\n deploy: boolean;\n transcendUrl: string;\n}\n\nexport async function updateConsentManager(\n this: LocalContext,\n {\n auth,\n bundleTypes = [ConsentBundleType.Production, ConsentBundleType.Test],\n deploy,\n transcendUrl,\n }: UpdateConsentManagerCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n // Parse authentication as API key or path to list of API keys\n const apiKeyOrList = await validateTranscendAuth(auth);\n\n // Handle single update\n if (typeof apiKeyOrList === 'string') {\n // Update consent manager\n await updateConsentManagerVersionToLatest({\n deploy,\n transcendUrl,\n auth: apiKeyOrList,\n bundleTypes,\n });\n logger.info(colors.green('Successfully updated Consent Manager!'));\n } else {\n await mapSeries(apiKeyOrList, async (apiKey) => {\n logger.info(\n colors.magenta(`Updating Consent Manager for organization \"${apiKey.organizationName}\"...`),\n );\n\n await updateConsentManagerVersionToLatest({\n deploy,\n transcendUrl,\n auth: apiKey.apiKey,\n bundleTypes,\n });\n\n logger.info(\n colors.green(\n `Successfully updated Consent Manager for organization \"${apiKey.organizationName}\"!`,\n ),\n );\n });\n logger.info(colors.green('Successfully updated Consent Managers!'));\n }\n}\n"],"mappings":"oWAiBA,eAAsB,EAEpB,CACE,OACA,cAAc,CAAC,EAAkB,WAAY,EAAkB,KAAK,CACpE,SACA,gBAEa,CACf,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAe,MAAM,EAAsB,EAAK,CAGlD,OAAO,GAAiB,UAE1B,MAAM,EAAoC,CACxC,SACA,eACA,KAAM,EACN,cACD,CAAC,CACF,EAAO,KAAK,EAAO,MAAM,wCAAwC,CAAC,GAElE,MAAM,EAAU,EAAc,KAAO,IAAW,CAC9C,EAAO,KACL,EAAO,QAAQ,8CAA8C,EAAO,iBAAiB,MAAM,CAC5F,CAED,MAAM,EAAoC,CACxC,SACA,eACA,KAAM,EAAO,OACb,cACD,CAAC,CAEF,EAAO,KACL,EAAO,MACL,0DAA0D,EAAO,iBAAiB,IACnF,CACF,EACD,CACF,EAAO,KAAK,EAAO,MAAM,yCAAyC,CAAC"}
@@ -1,2 +0,0 @@
1
- import{t as e}from"./logger-Ckep4QXn.mjs";import{t}from"./pullChunkedCustomSiloOutstandingIdentifiers-BCblZfOb.mjs";import{i as n,s as r}from"./writeCsv-DMw5OmWp.mjs";import{t as i}from"./done-input-validation-DL31vk7g.mjs";import{chunk as a,uniq as o}from"lodash-es";import s from"colors";import{buildTranscendGraphQLClient as c,fetchRequestFilesForRequest as l}from"@transcend-io/sdk";import{map as u}from"@transcend-io/utils";async function d({file:d,fileTarget:f,transcendUrl:p,auth:m,sombraAuth:h,cronDataSiloId:g,targetDataSiloId:_,actions:v,skipRequestCount:y,pageLimit:b,chunkSize:x}){y&&e.info(s.yellow(`Skipping request count as requested. This may help speed up the call.`)),(Number.isNaN(x)||x<=0||x%b!==0)&&(e.error(s.red(`Invalid chunk size: "${x}". Must be a positive integer that is a multiple of ${b}.`)),this.process.exit(1)),i(this.process.exit);let S=c(p,m),{baseName:C,extension:w}=n(d),{baseName:T,extension:E}=n(f),D=0,O=0,k=0;await t({dataSiloId:g,auth:m,sombraAuth:h,actions:v,apiPageSize:b,savePageSize:x,onSave:async t=>{D+=t.length;let n=await u(a(o(t.map(e=>e.requestId)),b),async t=>(e.info(s.magenta(`Fetching target identifiers for ${t.length} requests`)),(await l(S,{logger:e,pageSize:b*2,filterBy:{requestIds:t,dataSiloIds:[_]}})).map(({fileName:e,remoteId:t})=>{if(!t)throw Error(`Failed to find remoteId for ${e}`);return{RecordId:t,Object:e.replace(`.json`,``).split(`/`).pop()?.replace(` Information`,``),Comment:`Customer data deletion request submitted via transcend.io`}})),{concurrency:1});O+=n.flat().length;let i=o(t.map(e=>Object.keys(e)).flat()),c=`${C}-${k}${w}`,p=`${T}-${k}${E}`;await r(c,t,i),e.info(s.green(`Successfully wrote ${t.length} identifiers to file "${d}"`));let m=n.flat();await r(p,m,o(m.map(e=>Object.keys(e)).flat())),e.info(s.green(`Successfully wrote ${m.length} identifiers to file "${f}"`)),e.info(s.blue(`Processed chunk of ${a.length} identifiers, found ${m.length} target identifiers`)),k+=1},transcendUrl:p,skipRequestCount:y}),e.info(s.green(`Successfully wrote ${D} identifiers to file "${d}"`)),e.info(s.green(`Successfully wrote ${O} identifiers to file "${f}"`))}export{d as pullProfiles};
2
- //# sourceMappingURL=impl-Xrph1kvG2.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl-Xrph1kvG2.mjs","names":[],"sources":["../src/commands/request/cron/pull-profiles/impl.ts"],"sourcesContent":["import type { RequestAction } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, fetchRequestFilesForRequest } from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport colors from 'colors';\nimport { uniq, chunk } from 'lodash-es';\n\nimport type { LocalContext } from '../../../../context.js';\nimport { doneInputValidation } from '../../../../lib/cli/done-input-validation.js';\nimport {\n pullChunkedCustomSiloOutstandingIdentifiers,\n type CsvFormattedIdentifier,\n} from '../../../../lib/cron/index.js';\nimport { parseFilePath, writeLargeCsv } from '../../../../lib/helpers/index.js';\nimport { logger } from '../../../../logger.js';\n\nexport interface PullProfilesCommandFlags {\n file: string;\n fileTarget: string;\n transcendUrl: string;\n auth: string;\n sombraAuth?: string;\n cronDataSiloId: string;\n targetDataSiloId: string;\n actions: RequestAction[];\n skipRequestCount: boolean;\n pageLimit: number;\n chunkSize: number;\n}\n\nexport async function pullProfiles(\n this: LocalContext,\n {\n file,\n fileTarget,\n transcendUrl,\n auth,\n sombraAuth,\n cronDataSiloId,\n targetDataSiloId,\n actions,\n skipRequestCount,\n pageLimit,\n chunkSize,\n }: PullProfilesCommandFlags,\n): Promise<void> {\n if (skipRequestCount) {\n logger.info(\n colors.yellow('Skipping request count as requested. This may help speed up the call.'),\n );\n }\n\n if (Number.isNaN(chunkSize) || chunkSize <= 0 || chunkSize % pageLimit !== 0) {\n logger.error(\n colors.red(\n `Invalid chunk size: \"${chunkSize}\". Must be a positive integer that is a multiple of ${pageLimit}.`,\n ),\n );\n this.process.exit(1);\n }\n\n doneInputValidation(this.process.exit);\n\n // Create GraphQL client to connect to Transcend backend\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n const { baseName, extension } = parseFilePath(file);\n const { baseName: baseNameTarget, extension: extensionTarget } = parseFilePath(fileTarget);\n\n let allIdentifiersCount = 0;\n let allTargetIdentifiersCount = 0;\n let fileCount = 0;\n // Create onSave callback to handle chunked processing\n const onSave = async (chunkToSave: CsvFormattedIdentifier[]): Promise<void> => {\n // Add to all identifiers\n allIdentifiersCount += chunkToSave.length;\n\n // Get unique request IDs from this chunk\n const requestIds = chunkToSave.map((d) => d.requestId as string);\n const uniqueRequestIds = uniq(requestIds);\n\n // Pull down target identifiers for this chunk\n const chunkedRequestIds = chunk(uniqueRequestIds, pageLimit);\n const results = await map(\n chunkedRequestIds,\n async (requestIds) => {\n logger.info(\n colors.magenta(`Fetching target identifiers for ${requestIds.length} requests`),\n );\n const results = await fetchRequestFilesForRequest(client, {\n logger,\n pageSize: pageLimit * 2,\n filterBy: {\n requestIds,\n dataSiloIds: [targetDataSiloId],\n },\n });\n return results.map(({ fileName, remoteId }) => {\n if (!remoteId) {\n throw new Error(`Failed to find remoteId for ${fileName}`);\n }\n return {\n RecordId: remoteId,\n Object: fileName.replace('.json', '').split('/').pop()?.replace(' Information', ''),\n Comment: 'Customer data deletion request submitted via transcend.io',\n };\n });\n },\n // We are grabbing all the request files for the 'pageLimit' # of requests at a time\n {\n concurrency: 1,\n },\n );\n\n allTargetIdentifiersCount += results.flat().length;\n\n // Write the identifiers and target identifiers to CSV\n const headers = uniq(chunkToSave.map((d) => Object.keys(d)).flat());\n const numberedFileName = `${baseName}-${fileCount}${extension}`;\n const numberedFileNameTarget = `${baseNameTarget}-${fileCount}${extensionTarget}`;\n await writeLargeCsv(numberedFileName, chunkToSave, headers);\n logger.info(\n colors.green(`Successfully wrote ${chunkToSave.length} identifiers to file \"${file}\"`),\n );\n\n const targetIdentifiers = results.flat();\n const headers2 = uniq(targetIdentifiers.map((d) => Object.keys(d)).flat());\n await writeLargeCsv(numberedFileNameTarget, targetIdentifiers, headers2);\n logger.info(\n colors.green(\n `Successfully wrote ${targetIdentifiers.length} identifiers to file \"${fileTarget}\"`,\n ),\n );\n\n logger.info(\n colors.blue(\n `Processed chunk of ${chunk.length} identifiers, found ${targetIdentifiers.length} target identifiers`,\n ),\n );\n fileCount += 1;\n };\n\n // Pull down outstanding identifiers using the new chunked function\n await pullChunkedCustomSiloOutstandingIdentifiers({\n dataSiloId: cronDataSiloId,\n auth,\n sombraAuth,\n actions,\n apiPageSize: pageLimit,\n savePageSize: chunkSize,\n onSave,\n transcendUrl,\n skipRequestCount,\n });\n\n logger.info(\n colors.green(`Successfully wrote ${allIdentifiersCount} identifiers to file \"${file}\"`),\n );\n logger.info(\n colors.green(\n `Successfully wrote ${allTargetIdentifiersCount} identifiers to file \"${fileTarget}\"`,\n ),\n );\n}\n"],"mappings":"6aA6BA,eAAsB,EAEpB,CACE,OACA,aACA,eACA,OACA,aACA,iBACA,mBACA,UACA,mBACA,YACA,aAEa,CACX,GACF,EAAO,KACL,EAAO,OAAO,wEAAwE,CACvF,EAGC,OAAO,MAAM,EAAU,EAAI,GAAa,GAAK,EAAY,IAAc,KACzE,EAAO,MACL,EAAO,IACL,wBAAwB,EAAU,sDAAsD,EAAU,GACnG,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAGtB,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAS,EAA4B,EAAc,EAAK,CACxD,CAAE,WAAU,aAAc,EAAc,EAAK,CAC7C,CAAE,SAAU,EAAgB,UAAW,GAAoB,EAAc,EAAW,CAEtF,EAAsB,EACtB,EAA4B,EAC5B,EAAY,EAwEhB,MAAM,EAA4C,CAChD,WAAY,EACZ,OACA,aACA,UACA,YAAa,EACb,aAAc,EACd,YA7EoB,IAAyD,CAE7E,GAAuB,EAAY,OAQnC,IAAM,EAAU,MAAM,EADI,EAHD,EADN,EAAY,IAAK,GAAM,EAAE,UACJ,CAGQ,CAAE,EAE/B,CACjB,KAAO,KACL,EAAO,KACL,EAAO,QAAQ,mCAAmC,EAAW,OAAO,WAAW,CAChF,EASM,MARe,EAA4B,EAAQ,CACxD,SACA,SAAU,EAAY,EACtB,SAAU,CACR,aACA,YAAa,CAAC,EAAiB,CAChC,CACF,CAAC,EACa,KAAK,CAAE,WAAU,cAAe,CAC7C,GAAI,CAAC,EACH,MAAU,MAAM,+BAA+B,IAAW,CAE5D,MAAO,CACL,SAAU,EACV,OAAQ,EAAS,QAAQ,QAAS,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,eAAgB,GAAG,CACnF,QAAS,4DACV,EACD,EAGJ,CACE,YAAa,EACd,CACF,CAED,GAA6B,EAAQ,MAAM,CAAC,OAG5C,IAAM,EAAU,EAAK,EAAY,IAAK,GAAM,OAAO,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAC7D,EAAmB,GAAG,EAAS,GAAG,IAAY,IAC9C,EAAyB,GAAG,EAAe,GAAG,IAAY,IAChE,MAAM,EAAc,EAAkB,EAAa,EAAQ,CAC3D,EAAO,KACL,EAAO,MAAM,sBAAsB,EAAY,OAAO,wBAAwB,EAAK,GAAG,CACvF,CAED,IAAM,EAAoB,EAAQ,MAAM,CAExC,MAAM,EAAc,EAAwB,EAD3B,EAAK,EAAkB,IAAK,GAAM,OAAO,KAAK,EAAE,CAAC,CAAC,MAAM,CACF,CAAC,CACxE,EAAO,KACL,EAAO,MACL,sBAAsB,EAAkB,OAAO,wBAAwB,EAAW,GACnF,CACF,CAED,EAAO,KACL,EAAO,KACL,sBAAsB,EAAM,OAAO,sBAAsB,EAAkB,OAAO,qBACnF,CACF,CACD,GAAa,GAYb,eACA,mBACD,CAAC,CAEF,EAAO,KACL,EAAO,MAAM,sBAAsB,EAAoB,wBAAwB,EAAK,GAAG,CACxF,CACD,EAAO,KACL,EAAO,MACL,sBAAsB,EAA0B,wBAAwB,EAAW,GACpF,CACF"}
@@ -1,2 +0,0 @@
1
- import{t as e}from"./pullManualEnrichmentIdentifiersToCsv-BYjAq9G5.mjs";import{t}from"./done-input-validation-DL31vk7g.mjs";async function n({auth:n,transcendUrl:r,file:i,concurrency:a,actions:o,sombraAuth:s}){t(this.process.exit),await e({file:i,transcendUrl:r,concurrency:a,requestActions:o,auth:n,sombraAuth:s})}export{n as pullIdentifiers};
2
- //# sourceMappingURL=impl-jVkU5ZQe2.mjs.map
@@ -1,2 +0,0 @@
1
- import{t as e}from"./pushCronIdentifiersFromCsv-DIZF-QXC.mjs";import{t}from"./done-input-validation-DL31vk7g.mjs";async function n({file:n,transcendUrl:r,auth:i,sombraAuth:a,dataSiloId:o}){t(this.process.exit),await e({file:n,transcendUrl:r,auth:i,sombraAuth:a,dataSiloId:o})}export{n as markIdentifiersCompleted};
2
- //# sourceMappingURL=impl-q66XVeBW2.mjs.map
@@ -1,2 +0,0 @@
1
- import{t as e}from"./logger-Ckep4QXn.mjs";import{a as t,r as n}from"./readTranscendYaml-bL1qFPqv.mjs";import{t as r}from"./consentManagersToBusinessEntities-rf8_xu71.mjs";import{t as i}from"./listFiles-C5kubvdN.mjs";import{t as a}from"./done-input-validation-DL31vk7g.mjs";import{existsSync as o,lstatSync as s}from"node:fs";import{join as c}from"node:path";import l from"colors";function u({consentManagerYmlFolder:u,output:d}){a(this.process.exit),(!o(u)||!s(u).isDirectory())&&(e.error(l.red(`Folder does not exist: "${u}"`)),this.process.exit(1));let f=r(i(u).map(e=>{let{"consent-manager":t}=n(c(u,e));return{name:e,input:t}}));t(d,{"business-entities":f}),e.info(l.green(`Successfully wrote ${f.length} business entities to file "${d}"`))}export{u as consentManagersToBusinessEntities};
2
- //# sourceMappingURL=impl-xIb20rTt.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impl-xIb20rTt.mjs","names":["consentManagersToBusinessEntitiesHelper"],"sources":["../src/commands/inventory/consent-managers-to-business-entities/impl.ts"],"sourcesContent":["import { existsSync, lstatSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport colors from 'colors';\n\nimport type { LocalContext } from '../../../context.js';\nimport { listFiles } from '../../../lib/api-keys/index.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { consentManagersToBusinessEntities as consentManagersToBusinessEntitiesHelper } from '../../../lib/consent-manager/index.js';\nimport { readTranscendYaml, writeTranscendYaml } from '../../../lib/readTranscendYaml.js';\nimport { logger } from '../../../logger.js';\n\nexport interface ConsentManagersToBusinessEntitiesCommandFlags {\n consentManagerYmlFolder: string;\n output: string;\n}\n\nexport function consentManagersToBusinessEntities(\n this: LocalContext,\n { consentManagerYmlFolder, output }: ConsentManagersToBusinessEntitiesCommandFlags,\n): void {\n doneInputValidation(this.process.exit);\n\n // Ensure folder is passed\n if (!existsSync(consentManagerYmlFolder) || !lstatSync(consentManagerYmlFolder).isDirectory()) {\n logger.error(colors.red(`Folder does not exist: \"${consentManagerYmlFolder}\"`));\n this.process.exit(1);\n }\n\n // Read in each consent manager configuration\n const inputs = listFiles(consentManagerYmlFolder).map((directory) => {\n const { 'consent-manager': consentManager } = readTranscendYaml(\n join(consentManagerYmlFolder, directory),\n );\n return { name: directory, input: consentManager };\n });\n\n // Convert to business entities\n const businessEntities = consentManagersToBusinessEntitiesHelper(inputs);\n\n // write to disk\n writeTranscendYaml(output, {\n 'business-entities': businessEntities,\n });\n\n logger.info(\n colors.green(\n `Successfully wrote ${businessEntities.length} business entities to file \"${output}\"`,\n ),\n );\n}\n"],"mappings":"4XAiBA,SAAgB,EAEd,CAAE,0BAAyB,UACrB,CACN,EAAoB,KAAK,QAAQ,KAAK,EAGlC,CAAC,EAAW,EAAwB,EAAI,CAAC,EAAU,EAAwB,CAAC,aAAa,IAC3F,EAAO,MAAM,EAAO,IAAI,2BAA2B,EAAwB,GAAG,CAAC,CAC/E,KAAK,QAAQ,KAAK,EAAE,EAYtB,IAAM,EAAmBA,EARV,EAAU,EAAwB,CAAC,IAAK,GAAc,CACnE,GAAM,CAAE,kBAAmB,GAAmB,EAC5C,EAAK,EAAyB,EAAU,CACzC,CACD,MAAO,CAAE,KAAM,EAAW,MAAO,EAAgB,EAIoB,CAAC,CAGxE,EAAmB,EAAQ,CACzB,oBAAqB,EACtB,CAAC,CAEF,EAAO,KACL,EAAO,MACL,sBAAsB,EAAiB,OAAO,8BAA8B,EAAO,GACpF,CACF"}
@@ -1,2 +0,0 @@
1
- import{existsSync as e,readdirSync as t}from"node:fs";function n(n,r,i=!1){if(!e(n))return[];let a=t(n).filter(e=>r?r.filter(t=>e.endsWith(t)).length:!0).filter(e=>e.indexOf(`.`)>0);return i?a.map(e=>e.replace(/\.[^/.]+$/,``)):a}export{n as t};
2
- //# sourceMappingURL=listFiles-C5kubvdN.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listFiles-C5kubvdN.mjs","names":[],"sources":["../src/lib/api-keys/listFiles.ts"],"sourcesContent":["import { existsSync, readdirSync } from 'node:fs';\n\n/**\n * List the files in a directory\n *\n * ```typescript\n * // The directory to search\n * const directory = '/User/test/transcend/my-app/app/containers';\n * // Returns ['test.js']\n * listFiles(directory);\n * ```\n *\n * @param directory - The directory to search\n * @param validExtensions - The list of valid extensions\n * @param removeExtensions - When true, remove the extensions from the listed files\n * @returns The list of files in the directory\n */\nexport function listFiles(\n directory: string,\n validExtensions?: string[],\n removeExtensions = false,\n): string[] {\n if (!existsSync(directory)) {\n return [];\n }\n\n const files = readdirSync(directory)\n .filter((fil) =>\n validExtensions ? validExtensions.filter((ext) => fil.endsWith(ext)).length : true,\n )\n .filter((fil) => fil.indexOf('.') > 0);\n\n return removeExtensions ? files.map((fil) => fil.replace(/\\.[^/.]+$/, '')) : files;\n}\n"],"mappings":"sDAiBA,SAAgB,EACd,EACA,EACA,EAAmB,GACT,CACV,GAAI,CAAC,EAAW,EAAU,CACxB,MAAO,EAAE,CAGX,IAAM,EAAQ,EAAY,EAAU,CACjC,OAAQ,GACP,EAAkB,EAAgB,OAAQ,GAAQ,EAAI,SAAS,EAAI,CAAC,CAAC,OAAS,GAC/E,CACA,OAAQ,GAAQ,EAAI,QAAQ,IAAI,CAAG,EAAE,CAExC,OAAO,EAAmB,EAAM,IAAK,GAAQ,EAAI,QAAQ,YAAa,GAAG,CAAC,CAAG"}
@@ -1,2 +0,0 @@
1
- import e from"colors";import{bootstrap as t}from"global-agent";import{ProxyAgent as n,setGlobalDispatcher as r}from"undici";import i from"yargs-parser";const a=console,{httpProxy:o=process.env.http_proxy}=i(process.argv.slice(2));o&&(a.info(e.green(`Initializing proxy: ${o}`)),process.env.GLOBAL_AGENT_HTTP_PROXY=o,t(),r(new n(o)));export{a as t};
2
- //# sourceMappingURL=logger-Ckep4QXn.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger-Ckep4QXn.mjs","names":[],"sources":["../src/logger.ts"],"sourcesContent":["import colors from 'colors';\nimport { bootstrap } from 'global-agent';\nimport { ProxyAgent, setGlobalDispatcher } from 'undici';\nimport yargs from 'yargs-parser';\n\nexport const logger = console;\n\n// When the proxy env var of flag is specified, initiate the proxy\nconst { httpProxy = process.env.http_proxy } = yargs(process.argv.slice(2));\nif (httpProxy) {\n logger.info(colors.green(`Initializing proxy: ${httpProxy}`));\n\n // Use global-agent, which overrides `request` based requests\n process.env.GLOBAL_AGENT_HTTP_PROXY = httpProxy;\n bootstrap();\n\n // Use undici, which overrides `fetch` based requests\n setGlobalDispatcher(new ProxyAgent(httpProxy));\n}\n"],"mappings":"wJAKA,MAAa,EAAS,QAGhB,CAAE,YAAY,QAAQ,IAAI,YAAe,EAAM,QAAQ,KAAK,MAAM,EAAE,CAAC,CACvE,IACF,EAAO,KAAK,EAAO,MAAM,uBAAuB,IAAY,CAAC,CAG7D,QAAQ,IAAI,wBAA0B,EACtC,GAAW,CAGX,EAAoB,IAAI,EAAW,EAAU,CAAC"}
@@ -1,2 +0,0 @@
1
- import{a as e}from"./constants-DyD22MtN.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{t as n}from"./readCsv--FfP8n-H.mjs";import{chunk as r}from"lodash-es";import i from"colors";import*as a from"io-ts";import{createSombraGotInstance as o}from"@transcend-io/sdk";import{map as s,mapSeries as c}from"@transcend-io/utils";import l from"cli-progress";const u=a.type({nonce:a.string,identifier:a.string});async function d(e,{nonce:t,identifier:n}){try{return await e.put(`v1/data-silo`,{headers:{"x-transcend-nonce":t},json:{profiles:[{profileId:n}]}}),!0}catch(e){if(e.response?.statusCode===409)return!1;throw Error(`Received an error from server: ${e?.response?.body||e?.message}`)}}async function f({file:a,dataSiloId:f,auth:p,sombraAuth:m,concurrency:h=100,transcendUrl:g=e,sleepSeconds:_=10}){let v=await o(g,p,{logger:t,sombraApiKey:m,sombraUrl:process.env.SOMBRA_URL});t.info(i.magenta(`Reading "${a}" from disk`));let y=n(a,u);t.info(i.magenta(`Notifying Transcend for data silo "${f}" marking "${y.length}" identifiers as completed.`));let b=new Date().getTime(),x=new l.SingleBar({},l.Presets.shades_classic),S=0,C=0,w=0;x.start(y.length,0);let T=r(y,h),E=T.length;await c(T,async(e,n)=>{t.info(i.blue(`Processing chunk ${n+1}/${E} (${r.length} items)`)),await s(e,async e=>{try{await d(v,e)?S+=1:C+=1}catch(n){t.error(i.red(`Error notifying Transcend for identifier "${e.identifier}" - ${n?.message}`)),w+=1}x.update(S+C)}),_>0&&n<E-1&&(t.info(i.yellow(`Sleeping for ${_}s before next chunk...`)),await new Promise(e=>{setTimeout(e,_*1e3)}))}),x.stop();let D=new Date().getTime()-b;if(t.info(i.green(`Successfully notified Transcend for ${S} identifiers in "${D/1e3}" seconds!`)),C&&t.info(i.magenta(`There were ${C} identifiers that were not in a state to be updated.They likely have already been resolved.`)),w)throw t.error(i.red(`There were ${w} identifiers that failed to be updated. Please review the logs for more information.`)),Error(`Failed to update all identifiers`);return y.length}export{u as n,d as r,f as t};
2
- //# sourceMappingURL=pushCronIdentifiersFromCsv-DIZF-QXC.mjs.map
@@ -1,2 +0,0 @@
1
- import{a as e}from"./constants-DyD22MtN.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{t as n}from"./readCsv--FfP8n-H.mjs";import{o as r}from"./request-BIplTb3L.mjs";import{uniq as i}from"lodash-es";import a from"colors";import*as o from"io-ts";import{buildTranscendGraphQLClient as s,createSombraGotInstance as c,makeGraphQLRequest as l}from"@transcend-io/sdk";import{map as u,splitCsvToList as d}from"@transcend-io/utils";const f=`https://app.transcend.io/privacy-requests/incoming-requests/`,p=o.record(o.string,o.string);async function m(e,{id:n,...r},o,s){if(!n){let e=`Request ID must be provided to enricher request.${s?` Found error in row: ${s}`:``}`;throw t.error(a.red(e)),Error(e)}let c=n.toLowerCase(),l=Object.entries(r).reduce((e,[t,n])=>i(d(n)).length===0?e:Object.assign(e,{[t]:i(d(n)).map(e=>({value:t===`email`?e.toLowerCase():e}))}),{});try{return await e.post(`v1/enrich-identifiers`,{headers:{"x-transcend-request-id":c,"x-transcend-enricher-id":o},json:{enrichedIdentifiers:l}}).json(),t.error(a.green(`Successfully enriched request: ${f}${c}`)),!0}catch(e){if(typeof e.response.body==`string`&&e.response.body.includes(`Cannot update a resolved RequestEnricher`))return t.warn(a.magenta(`Skipped enrichment for request: ${f}${c}, request is no longer in the enriching phase.`)),!1;throw t.error(a.red(`Failed to enricher identifiers for request with id: ${f}${c} - ${e.message} - ${e.response.body}`)),e}}async function h({file:i,auth:o,sombraAuth:d,enricherId:f,markSilent:h,concurrency:g=100,transcendUrl:_=e}){let v=await c(_,o,{logger:t,sombraApiKey:d,sombraUrl:process.env.SOMBRA_URL}),y=s(_,o);t.info(a.magenta(`Reading "${i}" from disk`));let b=n(i,p);t.info(a.magenta(`Enriching "${b.length}" privacy requests.`));let x=0,S=0,C=0;if(await u(b,async(e,n)=>{try{h&&(await l(y,r,{variables:{input:{id:e.id,isSilent:!0}},logger:t}),t.info(a.magenta(`Mark request as silent mode - ${e.id}`))),await m(v,e,f,n)?x+=1:S+=1}catch{C+=1}},{concurrency:g}),t.info(a.green(`Successfully notified Transcend! \n Success count: ${x}.`)),S>0&&t.info(a.magenta(`Skipped count: ${S}.`)),C>0)throw t.info(a.red(`Error Count: ${C}.`)),Error(`Failed to enrich: ${C} requests.`);return b.length}export{p as n,m as r,h as t};
2
- //# sourceMappingURL=pushManualEnrichmentIdentifiersFromCsv-Ch5-jHbY.mjs.map
@@ -1,2 +0,0 @@
1
- import{readFileSync as e}from"node:fs";import{decodeCodec as t}from"@transcend-io/type-utils";import*as n from"io-ts";import{parse as r}from"csv-parse/sync";function i(i,a,o={columns:!0}){let s=r(e(i,`utf-8`),o);return t(n.array(a),s).map(e=>Object.entries(e).reduce((e,[t,n])=>Object.assign(e,{[t.replace(/[^a-z_.+\-A-Z -~]/g,``)]:n}),{}))}export{i as t};
2
- //# sourceMappingURL=readCsv--FfP8n-H.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readCsv--FfP8n-H.mjs","names":[],"sources":["../src/lib/requests/readCsv.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport type { Options } from 'csv-parse';\nimport { parse } from 'csv-parse/sync';\nimport * as t from 'io-ts';\n\n/**\n * Read in a CSV and validate its shape\n *\n * @param pathToFile - Path to file\n * @param codec - The codec to validate against. This is the codec for individual, non-header, rows\n * @param options - CSV parse options\n * @returns The JSON data\n */\nexport function readCsv<T extends t.Any>(\n pathToFile: string,\n codec: T,\n options: Options = { columns: true },\n): t.TypeOf<T>[] {\n // read file contents and parse\n const fileContent = parse(readFileSync(pathToFile, 'utf-8'), options);\n\n // validate codec\n const data = decodeCodec(t.array(codec), fileContent);\n\n // remove any special characters from object keys\n const parsed = data.map((datum) =>\n Object.entries(datum).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key.replace(/[^a-z_.+\\-A-Z -~]/g, '')]: value,\n }),\n {} as T,\n ),\n );\n return parsed;\n}\n"],"mappings":"6JAeA,SAAgB,EACd,EACA,EACA,EAAmB,CAAE,QAAS,GAAM,CACrB,CAEf,IAAM,EAAc,EAAM,EAAa,EAAY,QAAQ,CAAE,EAAQ,CAerE,OAZa,EAAY,EAAE,MAAM,EAAM,CAAE,EAGtB,CAAC,IAAK,GACvB,OAAO,QAAQ,EAAM,CAAC,QACnB,EAAK,CAAC,EAAK,KACV,OAAO,OAAO,EAAK,EAChB,EAAI,QAAQ,qBAAsB,GAAG,EAAG,EAC1C,CAAC,CACJ,EAAE,CACH,CAEU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"readTranscendYaml-bL1qFPqv.mjs","names":[],"sources":["../src/lib/readTranscendYaml.ts"],"sourcesContent":["import { readFileSync, writeFileSync } from 'node:fs';\n\nimport { decodeCodec, ObjByString } from '@transcend-io/type-utils';\nimport yaml from 'js-yaml';\n\nimport { TranscendInput } from '../codecs.js';\n\nexport const VARIABLE_PARAMETERS_REGEXP = /<<parameters\\.(.+?)>>/;\nexport const VARIABLE_PARAMETERS_NAME = 'parameters';\n\n/**\n * Function that replaces variables in a text file.\n * Throws error if there are variables that have not been replaced\n *\n * @param input - Input text\n * @param variables - Variables to replace\n * @param extraErrorMessage - Additional error message text\n * @returns Output text\n */\nexport function replaceVariablesInYaml(\n input: string,\n variables: ObjByString,\n extraErrorMessage = '',\n): string {\n let contents = input;\n // Replace variables\n Object.entries(variables).forEach(([name, value]) => {\n contents = contents.split(`<<${VARIABLE_PARAMETERS_NAME}.${name}>>`).join(value);\n });\n\n // Throw error if unfilled variables\n if (VARIABLE_PARAMETERS_REGEXP.test(contents)) {\n const [, name] = VARIABLE_PARAMETERS_REGEXP.exec(contents) || [];\n throw new Error(\n `Found variable that was not set: ${name}.\nMake sure you are passing all parameters through the --${VARIABLE_PARAMETERS_NAME}=${name}:value-for-param flag.\n${extraErrorMessage}`,\n );\n }\n\n return contents;\n}\n\n/**\n * Read in the contents of a yaml file and validate that the shape\n * of the yaml file matches the codec API\n *\n * @param filePath - Path to yaml file\n * @param variables - Variables to fill in\n * @returns The contents of the yaml file, type-checked\n */\nexport function readTranscendYaml(filePath: string, variables: ObjByString = {}): TranscendInput {\n // Read in contents\n const fileContents = readFileSync(filePath, 'utf-8');\n\n // Replace variables\n const replacedVariables = replaceVariablesInYaml(\n fileContents,\n variables,\n `Also check that there are no extra variables defined in your yaml: ${filePath}`,\n );\n\n // Validate shape\n return decodeCodec(TranscendInput, yaml.load(replacedVariables));\n}\n\n/**\n * Write a Transcend configuration to disk\n *\n * @param filePath - Path to yaml file\n * @param input - The input to write out\n */\nexport function writeTranscendYaml(filePath: string, input: TranscendInput): void {\n writeFileSync(filePath, yaml.dump(decodeCodec(TranscendInput, input)));\n}\n"],"mappings":"mLAOA,MAAa,EAA6B,wBAC7B,EAA2B,aAWxC,SAAgB,EACd,EACA,EACA,EAAoB,GACZ,CACR,IAAI,EAAW,EAOf,GALA,OAAO,QAAQ,EAAU,CAAC,SAAS,CAAC,EAAM,KAAW,CACnD,EAAW,EAAS,MAAM,KAAK,EAAyB,GAAG,EAAK,IAAI,CAAC,KAAK,EAAM,EAChF,CAGE,EAA2B,KAAK,EAAS,CAAE,CAC7C,GAAM,EAAG,GAAQ,EAA2B,KAAK,EAAS,EAAI,EAAE,CAChE,MAAU,MACR,oCAAoC,EAAK;yDACU,EAAyB,GAAG,EAAK;EACxF,IACG,CAGH,OAAO,EAWT,SAAgB,EAAkB,EAAkB,EAAyB,EAAE,CAAkB,CAK/F,IAAM,EAAoB,EAHL,EAAa,EAAU,QAI9B,CACZ,EACA,sEAAsE,IACvE,CAGD,OAAO,EAAY,EAAgB,EAAK,KAAK,EAAkB,CAAC,CASlE,SAAgB,EAAmB,EAAkB,EAA6B,CAChF,EAAc,EAAU,EAAK,KAAK,EAAY,EAAgB,EAAM,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- import{r as e}from"./constants-FbK2iR--.mjs";import{spawn as t,spawnSync as n}from"node:child_process";function r(){let t=n(`opa`,[`version`],{stdio:`ignore`});if(t.error||t.status!==0)throw Error(e)}function i(n,r={}){return new Promise((i,a)=>{let o=t(`opa`,n,{cwd:r.cwd,stdio:`inherit`});o.on(`error`,t=>{if(t.code===`ENOENT`){a(Error(e));return}a(t)}),o.on(`close`,e=>i(e??1))})}function a(n,r={}){return new Promise((i,a)=>{let o=t(`opa`,n,{cwd:r.cwd,stdio:[`ignore`,`pipe`,`pipe`]}),s=``,c=``;o.stdout?.on(`data`,e=>{s+=e.toString()}),o.stderr?.on(`data`,e=>{c+=e.toString()}),o.on(`error`,t=>{if(t.code===`ENOENT`){a(Error(e));return}a(t)}),o.on(`close`,e=>i({code:e??1,stdout:s,stderr:c}))})}export{i as n,r,a as t};
2
- //# sourceMappingURL=runOpa-D511z37u.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runOpa-D511z37u.mjs","names":[],"sources":["../src/commands/policy/helpers/assertOpaInstalled.ts","../src/commands/policy/helpers/runOpa.ts"],"sourcesContent":["import { spawnSync } from 'node:child_process';\n\nimport { OPA_INSTALL_HINT } from '../constants.js';\n\n/**\n * Ensures the `opa` binary is available on PATH.\n *\n * @throws Error when `opa` is not installed\n */\nexport function assertOpaInstalled(): void {\n const result = spawnSync('opa', ['version'], { stdio: 'ignore' });\n if (result.error || result.status !== 0) {\n throw new Error(OPA_INSTALL_HINT);\n }\n}\n","import { spawn } from 'node:child_process';\n\nimport { OPA_INSTALL_HINT } from '../constants.js';\n\n/** Result of an OPA CLI invocation with captured output. */\nexport interface RunOpaCaptureResult {\n /** Child process exit code */\n code: number;\n /** Captured stdout */\n stdout: string;\n /** Captured stderr */\n stderr: string;\n}\n\n/**\n * Runs an OPA CLI command and streams stdout/stderr to the current process.\n *\n * @param args - Arguments passed to the `opa` binary\n * @param options - Optional working directory\n * @returns The child process exit code\n */\nexport function runOpa(args: string[], options: { cwd?: string } = {}): Promise<number> {\n return new Promise<number>((resolve, reject) => {\n const child = spawn('opa', args, {\n cwd: options.cwd,\n stdio: 'inherit',\n });\n\n child.on('error', (err) => {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n reject(new Error(OPA_INSTALL_HINT));\n return;\n }\n reject(err);\n });\n child.on('close', (code) => resolve(code ?? 1));\n });\n}\n\n/**\n * Runs an OPA CLI command and captures stdout/stderr.\n *\n * @param args - Arguments passed to the `opa` binary\n * @param options - Optional working directory\n * @returns Exit code and captured output\n */\nexport function runOPACapture(\n args: string[],\n options: { cwd?: string } = {},\n): Promise<RunOpaCaptureResult> {\n return new Promise<RunOpaCaptureResult>((resolve, reject) => {\n const child = spawn('opa', args, {\n cwd: options.cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr?.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n\n child.on('error', (err) => {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n reject(new Error(OPA_INSTALL_HINT));\n return;\n }\n reject(err);\n });\n child.on('close', (code) => resolve({ code: code ?? 1, stdout, stderr }));\n });\n}\n"],"mappings":"uGASA,SAAgB,GAA2B,CACzC,IAAM,EAAS,EAAU,MAAO,CAAC,UAAU,CAAE,CAAE,MAAO,SAAU,CAAC,CACjE,GAAI,EAAO,OAAS,EAAO,SAAW,EACpC,MAAU,MAAM,EAAiB,CCSrC,SAAgB,EAAO,EAAgB,EAA4B,EAAE,CAAmB,CACtF,OAAO,IAAI,SAAiB,EAAS,IAAW,CAC9C,IAAM,EAAQ,EAAM,MAAO,EAAM,CAC/B,IAAK,EAAQ,IACb,MAAO,UACR,CAAC,CAEF,EAAM,GAAG,QAAU,GAAQ,CACzB,GAAK,EAA8B,OAAS,SAAU,CACpD,EAAW,MAAM,EAAiB,CAAC,CACnC,OAEF,EAAO,EAAI,EACX,CACF,EAAM,GAAG,QAAU,GAAS,EAAQ,GAAQ,EAAE,CAAC,EAC/C,CAUJ,SAAgB,EACd,EACA,EAA4B,EAAE,CACA,CAC9B,OAAO,IAAI,SAA8B,EAAS,IAAW,CAC3D,IAAM,EAAQ,EAAM,MAAO,EAAM,CAC/B,IAAK,EAAQ,IACb,MAAO,CAAC,SAAU,OAAQ,OAAO,CAClC,CAAC,CAEE,EAAS,GACT,EAAS,GAEb,EAAM,QAAQ,GAAG,OAAS,GAAkB,CAC1C,GAAU,EAAM,UAAU,EAC1B,CACF,EAAM,QAAQ,GAAG,OAAS,GAAkB,CAC1C,GAAU,EAAM,UAAU,EAC1B,CAEF,EAAM,GAAG,QAAU,GAAQ,CACzB,GAAK,EAA8B,OAAS,SAAU,CACpD,EAAW,MAAM,EAAiB,CAAC,CACnC,OAEF,EAAO,EAAI,EACX,CACF,EAAM,GAAG,QAAU,GAAS,EAAQ,CAAE,KAAM,GAAQ,EAAG,SAAQ,SAAQ,CAAC,CAAC,EACzE"}
@@ -1,2 +0,0 @@
1
- import{a as e}from"./constants-DyD22MtN.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{D as n}from"./codecs-DJFlZLGT.mjs";import{t as r}from"./readCsv--FfP8n-H.mjs";import i from"colors";import{buildTranscendGraphQLClient as a,syncCookies as o}from"@transcend-io/sdk";import{splitCsvToList as s}from"@transcend-io/utils";const c=[`ID`,`Activity`,`Encounters`,`Last Seen At`,`Has Native Do Not Sell/Share Support`,`IAB USP API Support`,`Service Description`,`Website URL`,`Categories of Recipients`];async function l({auth:l,trackerStatus:u,file:d,transcendUrl:f=e}){let p=a(f,l);t.info(i.magenta(`Reading "${d}" from disk`)),await o(p,r(d,n).map(({"Is Regex?":e,Notes:t,Service:n,Purpose:r,Status:i,Owners:a,Teams:o,Name:l,...d})=>({...typeof e==`string`?{isRegex:e.toLowerCase()===`true`}:{},name:l,description:t,trackingPurposes:s(r),status:i||u,owners:a?s(a):void 0,teams:o?s(o):void 0,attributes:Object.entries(d).filter(([e])=>!c.includes(e)).map(([e,t])=>({key:e,values:s(t)}))})),{logger:t})||(t.error(i.red(`Encountered error(s) syncing cookies from CSV, see logs above for more info. `)),process.exit(1))}export{l as t};
2
- //# sourceMappingURL=uploadCookiesFromCsv-BgrbBl1Y.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploadCookiesFromCsv-BgrbBl1Y.mjs","names":[],"sources":["../src/lib/consent-manager/uploadCookiesFromCsv.ts"],"sourcesContent":["import { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, syncCookies } from '@transcend-io/sdk';\nimport { splitCsvToList } from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport { CookieInput, CookieCsvInput } from '../../codecs.js';\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { readCsv } from '../requests/readCsv.js';\n\nconst OMIT_COLUMNS = [\n 'ID',\n 'Activity',\n 'Encounters',\n 'Last Seen At',\n 'Has Native Do Not Sell/Share Support',\n 'IAB USP API Support',\n 'Service Description',\n 'Website URL',\n 'Categories of Recipients',\n];\n\n/**\n * Upload a set of cookies from CSV\n *\n * @param options - Options\n */\nexport async function uploadCookiesFromCsv({\n auth,\n trackerStatus,\n file,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Sombra API key authentication */\n trackerStatus: ConsentTrackerStatus;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<void> {\n // Build a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Read from CSV the set of cookie inputs\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const cookieInputs = readCsv(file, CookieCsvInput);\n\n // Convert these inputs into a format that the other function can use\n const validatedCookieInputs = cookieInputs.map(\n ({\n 'Is Regex?': isRegex,\n Notes,\n // TODO: https://transcend.height.app/T-26391 - export in CSV\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Service,\n Purpose,\n Status,\n Owners,\n Teams,\n Name,\n ...rest\n }): CookieInput => ({\n ...(typeof isRegex === 'string' ? { isRegex: isRegex.toLowerCase() === 'true' } : {}),\n name: Name,\n description: Notes,\n trackingPurposes: splitCsvToList(Purpose),\n // TODO: https://transcend.height.app/T-26391\n // service: Service,\n // Apply the trackerStatus to all values in the CSV -> allows for customer to define tracker status\n // on a row by row basis if needed\n status: Status || trackerStatus,\n owners: Owners ? splitCsvToList(Owners) : undefined,\n teams: Teams ? splitCsvToList(Teams) : undefined,\n // all remaining options are attribute\n attributes: Object.entries(rest)\n // filter out native columns that are exported from the admin dashboard\n // but not custom attributes\n .filter(([key]) => !OMIT_COLUMNS.includes(key))\n .map(([key, value]) => ({\n key,\n values: splitCsvToList(value),\n })),\n }),\n );\n\n // Upload the cookies into Transcend dashboard\n const syncedCookies = await syncCookies(client, validatedCookieInputs, { logger });\n\n // Log errors\n if (!syncedCookies) {\n logger.error(\n colors.red('Encountered error(s) syncing cookies from CSV, see logs above for more info. '),\n );\n process.exit(1);\n }\n}\n"],"mappings":"mUAUA,MAAM,EAAe,CACnB,KACA,WACA,aACA,eACA,uCACA,sBACA,sBACA,cACA,2BACD,CAOD,eAAsB,EAAqB,CACzC,OACA,gBACA,OACA,eAAe,GAUC,CAEhB,IAAM,EAAS,EAA4B,EAAc,EAAK,CAG9D,EAAO,KAAK,EAAO,QAAQ,YAAY,EAAK,aAAa,CAAC,CA6CrD,MAHuB,EAAY,EAzCnB,EAAQ,EAAM,EAGO,CAAC,KACxC,CACC,YAAa,EACb,QAGA,UACA,UACA,SACA,SACA,QACA,OACA,GAAG,MACe,CAClB,GAAI,OAAO,GAAY,SAAW,CAAE,QAAS,EAAQ,aAAa,GAAK,OAAQ,CAAG,EAAE,CACpF,KAAM,EACN,YAAa,EACb,iBAAkB,EAAe,EAAQ,CAKzC,OAAQ,GAAU,EAClB,OAAQ,EAAS,EAAe,EAAO,CAAG,IAAA,GAC1C,MAAO,EAAQ,EAAe,EAAM,CAAG,IAAA,GAEvC,WAAY,OAAO,QAAQ,EAAK,CAG7B,QAAQ,CAAC,KAAS,CAAC,EAAa,SAAS,EAAI,CAAC,CAC9C,KAAK,CAAC,EAAK,MAAY,CACtB,MACA,OAAQ,EAAe,EAAM,CAC9B,EAAE,CACN,EAIkE,CAAE,CAAE,SAAQ,CAAC,GAIhF,EAAO,MACL,EAAO,IAAI,gFAAgF,CAC5F,CACD,QAAQ,KAAK,EAAE"}
@@ -1,2 +0,0 @@
1
- import{a as e}from"./constants-DyD22MtN.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{N as n}from"./codecs-DJFlZLGT.mjs";import{t as r}from"./readCsv--FfP8n-H.mjs";import i from"colors";import{buildTranscendGraphQLClient as a,syncDataFlows as o}from"@transcend-io/sdk";import{splitCsvToList as s}from"@transcend-io/utils";const c=[`ID`,`Activity`,`Encounters`,`Last Seen At`,`Has Native Do Not Sell/Share Support`,`IAB USP API Support`,`Service Description`,`Website URL`,`Categories of Recipients`];async function l({auth:l,trackerStatus:u,file:d,classifyService:f=!1,transcendUrl:p=e}){let m=a(p,l);t.info(i.magenta(`Reading "${d}" from disk`)),await o(m,r(d,n).map(({Type:e,Notes:t,Service:n,Purpose:r,Status:i,Owners:a,Teams:o,"Connections Made To":l,...d})=>({value:l,type:e,description:t,trackingPurposes:s(r),status:i||u,owners:a?s(a):void 0,teams:o?s(o):void 0,attributes:Object.entries(d).filter(([e])=>!c.includes(e)).map(([e,t])=>({key:e,values:s(t)}))})),{classifyService:f,logger:t})||(t.error(i.red(`Encountered error(s) syncing data flows from CSV, see logs above for more info. `)),process.exit(1))}export{l as t};
2
- //# sourceMappingURL=uploadDataFlowsFromCsv-CJMs2KA1.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploadDataFlowsFromCsv-CJMs2KA1.mjs","names":[],"sources":["../src/lib/consent-manager/uploadDataFlowsFromCsv.ts"],"sourcesContent":["import { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, syncDataFlows } from '@transcend-io/sdk';\nimport { splitCsvToList } from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport { DataFlowInput, DataFlowCsvInput } from '../../codecs.js';\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { readCsv } from '../requests/readCsv.js';\n\nconst OMIT_COLUMNS = [\n 'ID',\n 'Activity',\n 'Encounters',\n 'Last Seen At',\n 'Has Native Do Not Sell/Share Support',\n 'IAB USP API Support',\n 'Service Description',\n 'Website URL',\n 'Categories of Recipients',\n];\n\n/**\n * Upload a set of data flows from CSV\n *\n * @param options - Options\n */\nexport async function uploadDataFlowsFromCsv({\n auth,\n trackerStatus,\n file,\n classifyService = false,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Sombra API key authentication */\n trackerStatus: ConsentTrackerStatus;\n /** classify data flow service if missing */\n classifyService?: boolean;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<void> {\n // Build a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Read from CSV the set of data flow inputs\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const dataFlowInputs = readCsv(file, DataFlowCsvInput);\n\n // Convert these data flow inputs into a format that the other function can use\n const validatedDataFlowInputs = dataFlowInputs.map(\n ({\n Type,\n Notes,\n // TODO: https://transcend.height.app/T-26391 - export in CSV\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Service,\n Purpose,\n Status,\n Owners,\n Teams,\n 'Connections Made To': value,\n ...rest\n }): DataFlowInput => ({\n value,\n type: Type,\n description: Notes,\n trackingPurposes: splitCsvToList(Purpose),\n // TODO: https://transcend.height.app/T-26391\n // service: Service,\n // Apply the trackerStatus to all values in the CSV -> allows for customer to define tracker status\n // on a row by row basis if needed\n status: Status || trackerStatus,\n owners: Owners ? splitCsvToList(Owners) : undefined,\n teams: Teams ? splitCsvToList(Teams) : undefined,\n // all remaining options are attribute\n attributes: Object.entries(rest)\n // filter out native columns that are exported from the admin dashboard\n // but not custom attributes\n .filter(([key]) => !OMIT_COLUMNS.includes(key))\n .map(([key, value]) => ({\n key,\n values: splitCsvToList(value),\n })),\n }),\n );\n\n // Upload the data flows into Transcend dashboard\n const syncedDataFlows = await syncDataFlows(client, validatedDataFlowInputs, {\n classifyService,\n logger,\n });\n\n // Log errors\n if (!syncedDataFlows) {\n logger.error(\n colors.red(\n 'Encountered error(s) syncing data flows from CSV, see logs above for more info. ',\n ),\n );\n process.exit(1);\n }\n}\n"],"mappings":"qUAUA,MAAM,EAAe,CACnB,KACA,WACA,aACA,eACA,uCACA,sBACA,sBACA,cACA,2BACD,CAOD,eAAsB,EAAuB,CAC3C,OACA,gBACA,OACA,kBAAkB,GAClB,eAAe,GAYC,CAEhB,IAAM,EAAS,EAA4B,EAAc,EAAK,CAG9D,EAAO,KAAK,EAAO,QAAQ,YAAY,EAAK,aAAa,CAAC,CAgDrD,MANyB,EAAc,EAzCrB,EAAQ,EAAM,EAGS,CAAC,KAC5C,CACC,OACA,QAGA,UACA,UACA,SACA,SACA,QACA,sBAAuB,EACvB,GAAG,MACiB,CACpB,QACA,KAAM,EACN,YAAa,EACb,iBAAkB,EAAe,EAAQ,CAKzC,OAAQ,GAAU,EAClB,OAAQ,EAAS,EAAe,EAAO,CAAG,IAAA,GAC1C,MAAO,EAAQ,EAAe,EAAM,CAAG,IAAA,GAEvC,WAAY,OAAO,QAAQ,EAAK,CAG7B,QAAQ,CAAC,KAAS,CAAC,EAAa,SAAS,EAAI,CAAC,CAC9C,KAAK,CAAC,EAAK,MAAY,CACtB,MACA,OAAQ,EAAe,EAAM,CAC9B,EAAE,CACN,EAIwE,CAAE,CAC3E,kBACA,SACD,CAAC,GAIA,EAAO,MACL,EAAO,IACL,mFACD,CACF,CACD,QAAQ,KAAK,EAAE"}
@@ -1,2 +0,0 @@
1
- import{t as e}from"./logger-Ckep4QXn.mjs";import{ct as t}from"./codecs-DJFlZLGT.mjs";import{existsSync as n,readFileSync as r}from"node:fs";import i from"colors";import{decodeCodec as a}from"@transcend-io/type-utils";import*as o from"io-ts";function s(s){return s||(e.error(i.red(`A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY`)),process.exit(1)),n(s)?a(o.array(t),r(s,`utf-8`)):s}export{s as t};
2
- //# sourceMappingURL=validateTranscendAuth-CAO5ktnu.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateTranscendAuth-CAO5ktnu.mjs","names":[],"sources":["../src/lib/api-keys/validateTranscendAuth.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\n\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport colors from 'colors';\nimport * as t from 'io-ts';\n\nimport { StoredApiKey } from '../../codecs.js';\nimport { logger } from '../../logger.js';\n\n/**\n * Determine if the `--auth` parameter is an API key or a path to a JSON\n * file containing a list of API keys.\n *\n * @param auth - Raw auth parameter\n * @returns The API key or the list API keys\n */\nexport function validateTranscendAuth(auth: string): string | StoredApiKey[] {\n // Ensure auth is passed\n if (!auth) {\n logger.error(\n colors.red(\n 'A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY',\n ),\n );\n process.exit(1);\n }\n\n // Read from disk\n if (existsSync(auth)) {\n // validate that file is a list of API keys\n return decodeCodec(t.array(StoredApiKey), readFileSync(auth, 'utf-8'));\n }\n\n // Return as single API key\n return auth;\n}\n"],"mappings":"iPAgBA,SAAgB,EAAsB,EAAuC,CAkB3E,OAhBK,IACH,EAAO,MACL,EAAO,IACL,wFACD,CACF,CACD,QAAQ,KAAK,EAAE,EAIb,EAAW,EAAK,CAEX,EAAY,EAAE,MAAM,EAAa,CAAE,EAAa,EAAM,QAAQ,CAAC,CAIjE"}