@transcend-io/cli 9.0.1 → 10.0.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.
Files changed (393) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +26 -34
  3. package/dist/RateCounter-DFL_mnk2.mjs +2 -0
  4. package/dist/RateCounter-DFL_mnk2.mjs.map +1 -0
  5. package/dist/RequestDataSilo-_Iv44M9u.mjs +51 -0
  6. package/dist/RequestDataSilo-_Iv44M9u.mjs.map +1 -0
  7. package/dist/app-By_zDIkK.mjs +131 -0
  8. package/dist/app-By_zDIkK.mjs.map +1 -0
  9. package/dist/approvePrivacyRequests-1cguqGqq.mjs +2 -0
  10. package/dist/approvePrivacyRequests-1cguqGqq.mjs.map +1 -0
  11. package/dist/assessment-BDywVaGR.mjs +284 -0
  12. package/dist/assessment-BDywVaGR.mjs.map +1 -0
  13. package/dist/bin/bash-complete.mjs +1 -1
  14. package/dist/bin/bash-complete.mjs.map +1 -1
  15. package/dist/bin/cli.mjs +1 -1
  16. package/dist/bin/cli.mjs.map +1 -1
  17. package/dist/bin/deprecated-command.mjs +1 -1
  18. package/dist/bin/deprecated-command.mjs.map +1 -1
  19. package/dist/bluebird-CUitXgsY.mjs +2 -0
  20. package/dist/bluebird-CUitXgsY.mjs.map +1 -0
  21. package/dist/buildXdiSyncEndpoint-BMaMHO7Z.mjs +9 -0
  22. package/dist/buildXdiSyncEndpoint-BMaMHO7Z.mjs.map +1 -0
  23. package/dist/bulkRestartRequests-DEPSHov-.mjs +2 -0
  24. package/dist/bulkRestartRequests-DEPSHov-.mjs.map +1 -0
  25. package/dist/bulkRetryEnrichers-BLkcFKXC.mjs +2 -0
  26. package/dist/bulkRetryEnrichers-BLkcFKXC.mjs.map +1 -0
  27. package/dist/cancelPrivacyRequests-C8MZQvsq.mjs +2 -0
  28. package/dist/cancelPrivacyRequests-C8MZQvsq.mjs.map +1 -0
  29. package/dist/codecs-BE3Wmoh8.mjs +2 -0
  30. package/dist/codecs-BE3Wmoh8.mjs.map +1 -0
  31. package/dist/codecs-Dx_vGxsl.mjs +2 -0
  32. package/dist/codecs-Dx_vGxsl.mjs.map +1 -0
  33. package/dist/{command-Bzyj3M2G.mjs → command-BUnCUxva.mjs} +2 -2
  34. package/dist/command-BUnCUxva.mjs.map +1 -0
  35. package/dist/consentManagersToBusinessEntities-BDgOFga7.mjs +5 -0
  36. package/dist/consentManagersToBusinessEntities-BDgOFga7.mjs.map +1 -0
  37. package/dist/constants-AFtS5Nad.mjs +4 -0
  38. package/dist/constants-AFtS5Nad.mjs.map +1 -0
  39. package/dist/constants-CeMiHaHx.mjs +2 -0
  40. package/dist/constants-CeMiHaHx.mjs.map +1 -0
  41. package/dist/constants-lIvXgkdp.mjs +2 -0
  42. package/dist/constants-lIvXgkdp.mjs.map +1 -0
  43. package/dist/{context-bkKpii_t.mjs → context-CdSyuBlf.mjs} +1 -1
  44. package/dist/context-CdSyuBlf.mjs.map +1 -0
  45. package/dist/{pooling-CazydwlD.mjs → createExtraKeyHandler-C_0EVj10.mjs} +5 -5
  46. package/dist/createExtraKeyHandler-C_0EVj10.mjs.map +1 -0
  47. package/dist/createPreferenceAccessTokens-6WLr6z-l.mjs +10 -0
  48. package/dist/createPreferenceAccessTokens-6WLr6z-l.mjs.map +1 -0
  49. package/dist/createSombraGotInstance-CahOgD6V.mjs +10 -0
  50. package/dist/createSombraGotInstance-CahOgD6V.mjs.map +1 -0
  51. package/dist/{dataFlowsToDataSilos-RAhfPV0l.mjs → dataFlowsToDataSilos-NhvBw1iy.mjs} +1 -1
  52. package/dist/dataFlowsToDataSilos-NhvBw1iy.mjs.map +1 -0
  53. package/dist/dataSilo-DrFetFXw.mjs +302 -0
  54. package/dist/dataSilo-DrFetFXw.mjs.map +1 -0
  55. package/dist/dataSubject-y_aXI0pa.mjs +92 -0
  56. package/dist/dataSubject-y_aXI0pa.mjs.map +1 -0
  57. package/dist/{done-input-validation-CcZtaz03.mjs → done-input-validation-DLR0-MJ7.mjs} +1 -1
  58. package/dist/{done-input-validation-CcZtaz03.mjs.map → done-input-validation-DLR0-MJ7.mjs.map} +1 -1
  59. package/dist/downloadPrivacyRequestFiles-B2yduagB.mjs +2 -0
  60. package/dist/downloadPrivacyRequestFiles-B2yduagB.mjs.map +1 -0
  61. package/dist/enums-CyFTrzXY.mjs.map +1 -1
  62. package/dist/extractClientError-DPjv09EH.mjs +2 -0
  63. package/dist/extractClientError-DPjv09EH.mjs.map +1 -0
  64. package/dist/extractErrorMessage-CPnTsT1S.mjs +2 -0
  65. package/dist/extractErrorMessage-CPnTsT1S.mjs.map +1 -0
  66. package/dist/fetchAllActions-C0l3wjQV.mjs +832 -0
  67. package/dist/fetchAllActions-C0l3wjQV.mjs.map +1 -0
  68. package/dist/fetchAllDataFlows-AQ9j_NRa.mjs +2 -0
  69. package/dist/fetchAllDataFlows-AQ9j_NRa.mjs.map +1 -0
  70. package/dist/fetchAllPreferenceTopics-Bn9PG-rO.mjs +36 -0
  71. package/dist/fetchAllPreferenceTopics-Bn9PG-rO.mjs.map +1 -0
  72. package/dist/fetchAllPurposes-CykSkZRY.mjs +29 -0
  73. package/dist/fetchAllPurposes-CykSkZRY.mjs.map +1 -0
  74. package/dist/fetchAllPurposesAndPreferences-Dog6N9L2.mjs +2 -0
  75. package/dist/fetchAllPurposesAndPreferences-Dog6N9L2.mjs.map +1 -0
  76. package/dist/fetchAllRequestEnrichers-q34mRuE5.mjs +42 -0
  77. package/dist/fetchAllRequestEnrichers-q34mRuE5.mjs.map +1 -0
  78. package/dist/fetchAllRequestIdentifiers-YP-geTV4.mjs +10 -0
  79. package/dist/fetchAllRequestIdentifiers-YP-geTV4.mjs.map +1 -0
  80. package/dist/fetchAllRequests-DEPTEUbi.mjs +2 -0
  81. package/dist/fetchAllRequests-DEPTEUbi.mjs.map +1 -0
  82. package/dist/fetchApiKeys-DkBco7W0.mjs +33 -0
  83. package/dist/fetchApiKeys-DkBco7W0.mjs.map +1 -0
  84. package/dist/fetchCatalogs-CBk871k6.mjs +12 -0
  85. package/dist/fetchCatalogs-CBk871k6.mjs.map +1 -0
  86. package/dist/fetchConsentManagerId-DHDA5Py9.mjs +321 -0
  87. package/dist/fetchConsentManagerId-DHDA5Py9.mjs.map +1 -0
  88. package/dist/fetchIdentifiers-DjqjUnaw.mjs +54 -0
  89. package/dist/fetchIdentifiers-DjqjUnaw.mjs.map +1 -0
  90. package/dist/fetchRequestDataSilo-CF6XOTQ-.mjs +2 -0
  91. package/dist/fetchRequestDataSilo-CF6XOTQ-.mjs.map +1 -0
  92. package/dist/fetchRequestFilesForRequest-DrHGOdih.mjs +33 -0
  93. package/dist/fetchRequestFilesForRequest-DrHGOdih.mjs.map +1 -0
  94. package/dist/generateCrossAccountApiKeys-F11uqpc5.mjs +33 -0
  95. package/dist/generateCrossAccountApiKeys-F11uqpc5.mjs.map +1 -0
  96. package/dist/impl--Lmj1RHh2.mjs +2 -0
  97. package/dist/impl--Lmj1RHh2.mjs.map +1 -0
  98. package/dist/impl-0ooudQ_J2.mjs +4 -0
  99. package/dist/impl-0ooudQ_J2.mjs.map +1 -0
  100. package/dist/{impl-BYBNi68b.mjs → impl-1U4QBT_L.mjs} +2 -2
  101. package/dist/impl-1U4QBT_L.mjs.map +1 -0
  102. package/dist/impl-2FbPcOv_2.mjs +2 -0
  103. package/dist/impl-2FbPcOv_2.mjs.map +1 -0
  104. package/dist/impl-ArGeiHuz.mjs +2 -0
  105. package/dist/impl-ArGeiHuz.mjs.map +1 -0
  106. package/dist/impl-B8iVBYdg.mjs +2 -0
  107. package/dist/impl-B8iVBYdg.mjs.map +1 -0
  108. package/dist/impl-BWjBYTQZ.mjs +2 -0
  109. package/dist/impl-BWjBYTQZ.mjs.map +1 -0
  110. package/dist/impl-Bc8Es_bT.mjs +7 -0
  111. package/dist/impl-Bc8Es_bT.mjs.map +1 -0
  112. package/dist/impl-BkyC7nnu.mjs +2 -0
  113. package/dist/impl-BkyC7nnu.mjs.map +1 -0
  114. package/dist/impl-BpUksm1b2.mjs +2 -0
  115. package/dist/impl-BpUksm1b2.mjs.map +1 -0
  116. package/dist/impl-BzupMfJi.mjs +12 -0
  117. package/dist/impl-BzupMfJi.mjs.map +1 -0
  118. package/dist/impl-C05tQHSq.mjs +2 -0
  119. package/dist/impl-C05tQHSq.mjs.map +1 -0
  120. package/dist/impl-CMX0qQr_2.mjs +2 -0
  121. package/dist/impl-CMX0qQr_2.mjs.map +1 -0
  122. package/dist/impl-CWHnw3oX.mjs +2 -0
  123. package/dist/impl-CWHnw3oX.mjs.map +1 -0
  124. package/dist/impl-CXK-D84c.mjs +4 -0
  125. package/dist/impl-CXK-D84c.mjs.map +1 -0
  126. package/dist/impl-CdoTu8TH.mjs +2 -0
  127. package/dist/impl-CdoTu8TH.mjs.map +1 -0
  128. package/dist/impl-CeLfAnyA2.mjs +2 -0
  129. package/dist/impl-CeLfAnyA2.mjs.map +1 -0
  130. package/dist/impl-Cgg_bv7j.mjs +2 -0
  131. package/dist/impl-Cgg_bv7j.mjs.map +1 -0
  132. package/dist/impl-CoLIqiH-2.mjs +2 -0
  133. package/dist/impl-CoLIqiH-2.mjs.map +1 -0
  134. package/dist/impl-Cq_RqK0_2.mjs +2 -0
  135. package/dist/impl-Cq_RqK0_2.mjs.map +1 -0
  136. package/dist/{impl-CZP2l3Ds.mjs → impl-Cwj9LeEI.mjs} +3 -3
  137. package/dist/impl-Cwj9LeEI.mjs.map +1 -0
  138. package/dist/impl-CyJBbyuF.mjs +2 -0
  139. package/dist/impl-CyJBbyuF.mjs.map +1 -0
  140. package/dist/impl-D-cp0CYr.mjs +2 -0
  141. package/dist/impl-D-cp0CYr.mjs.map +1 -0
  142. package/dist/impl-D-ldjJzl2.mjs +2 -0
  143. package/dist/impl-D-ldjJzl2.mjs.map +1 -0
  144. package/dist/impl-D6nwGrO8.mjs +2 -0
  145. package/dist/impl-D6nwGrO8.mjs.map +1 -0
  146. package/dist/impl-DGRuk3AB.mjs +2 -0
  147. package/dist/impl-DGRuk3AB.mjs.map +1 -0
  148. package/dist/impl-DXWN22xV.mjs +2 -0
  149. package/dist/impl-DXWN22xV.mjs.map +1 -0
  150. package/dist/impl-DZnSlfwn2.mjs +2 -0
  151. package/dist/impl-DZnSlfwn2.mjs.map +1 -0
  152. package/dist/impl-DcC8_dCy.mjs +2 -0
  153. package/dist/impl-DcC8_dCy.mjs.map +1 -0
  154. package/dist/impl-Dfc_yQML2.mjs +2 -0
  155. package/dist/impl-Dfc_yQML2.mjs.map +1 -0
  156. package/dist/impl-DgyjJ8RY2.mjs +2 -0
  157. package/dist/impl-DgyjJ8RY2.mjs.map +1 -0
  158. package/dist/impl-DhIyASha.mjs +2 -0
  159. package/dist/impl-DhIyASha.mjs.map +1 -0
  160. package/dist/impl-Dny1LX9A.mjs +2 -0
  161. package/dist/impl-Dny1LX9A.mjs.map +1 -0
  162. package/dist/impl-G1brwI4o.mjs +2 -0
  163. package/dist/impl-G1brwI4o.mjs.map +1 -0
  164. package/dist/impl-KV3yZaHz2.mjs +2 -0
  165. package/dist/impl-KV3yZaHz2.mjs.map +1 -0
  166. package/dist/impl-Rt3C_fDF.mjs +2 -0
  167. package/dist/impl-Rt3C_fDF.mjs.map +1 -0
  168. package/dist/impl-VHp2K2bg.mjs +2 -0
  169. package/dist/impl-VHp2K2bg.mjs.map +1 -0
  170. package/dist/impl-Zr8uLP_n.mjs +2 -0
  171. package/dist/impl-Zr8uLP_n.mjs.map +1 -0
  172. package/dist/impl-dEQtD5uE.mjs +2 -0
  173. package/dist/impl-dEQtD5uE.mjs.map +1 -0
  174. package/dist/impl-dlRlTYAQ.mjs +2 -0
  175. package/dist/impl-dlRlTYAQ.mjs.map +1 -0
  176. package/dist/impl-f4UPMoS_2.mjs +2 -0
  177. package/dist/impl-f4UPMoS_2.mjs.map +1 -0
  178. package/dist/impl-ph0q6K3i.mjs +2 -0
  179. package/dist/impl-ph0q6K3i.mjs.map +1 -0
  180. package/dist/impl-r8tHyAHB.mjs +2 -0
  181. package/dist/impl-r8tHyAHB.mjs.map +1 -0
  182. package/dist/impl-y1I9Muyc2.mjs +2 -0
  183. package/dist/impl-y1I9Muyc2.mjs.map +1 -0
  184. package/dist/index.d.mts +44 -32
  185. package/dist/index.d.mts.map +1 -0
  186. package/dist/index.mjs +78 -4
  187. package/dist/index.mjs.map +1 -1
  188. package/dist/inquirer-BgNcicZ4.mjs +2 -0
  189. package/dist/inquirer-BgNcicZ4.mjs.map +1 -0
  190. package/dist/listFiles-qzyQMaYH.mjs +2 -0
  191. package/dist/listFiles-qzyQMaYH.mjs.map +1 -0
  192. package/dist/{logger-Bj782ZYD.mjs → logger-B-LXIf3U.mjs} +1 -1
  193. package/dist/{logger-Bj782ZYD.mjs.map → logger-B-LXIf3U.mjs.map} +1 -1
  194. package/dist/makeGraphQLRequest-G078PsEL.mjs +2 -0
  195. package/dist/makeGraphQLRequest-G078PsEL.mjs.map +1 -0
  196. package/dist/markRequestDataSiloIdsCompleted-DmAz-R0M.mjs +2 -0
  197. package/dist/markRequestDataSiloIdsCompleted-DmAz-R0M.mjs.map +1 -0
  198. package/dist/markSilentPrivacyRequests-s7_aBROE.mjs +2 -0
  199. package/dist/markSilentPrivacyRequests-s7_aBROE.mjs.map +1 -0
  200. package/dist/mergeTranscendInputs-C64BJsse.mjs +2 -0
  201. package/dist/mergeTranscendInputs-C64BJsse.mjs.map +1 -0
  202. package/dist/notifyPrivacyRequestsAdditionalTime-BvXIXZYu.mjs +2 -0
  203. package/dist/notifyPrivacyRequestsAdditionalTime-BvXIXZYu.mjs.map +1 -0
  204. package/dist/package-BjNQxHlz.mjs +2 -0
  205. package/dist/package-BjNQxHlz.mjs.map +1 -0
  206. package/dist/parquetToCsvOneFile-DZVKXrjn.mjs +6 -0
  207. package/dist/parquetToCsvOneFile-DZVKXrjn.mjs.map +1 -0
  208. package/dist/parseAttributesFromString-CZStzJc0.mjs +2 -0
  209. package/dist/parseAttributesFromString-CZStzJc0.mjs.map +1 -0
  210. package/dist/pullAllDatapoints-DiMWp8a7.mjs +45 -0
  211. package/dist/pullAllDatapoints-DiMWp8a7.mjs.map +1 -0
  212. package/dist/pullChunkedCustomSiloOutstandingIdentifiers-DgWgggQt.mjs +2 -0
  213. package/dist/pullChunkedCustomSiloOutstandingIdentifiers-DgWgggQt.mjs.map +1 -0
  214. package/dist/pullConsentManagerMetrics-pFRPXTHJ.mjs +2 -0
  215. package/dist/pullConsentManagerMetrics-pFRPXTHJ.mjs.map +1 -0
  216. package/dist/pullManualEnrichmentIdentifiersToCsv-DA_4rIzW.mjs +2 -0
  217. package/dist/pullManualEnrichmentIdentifiersToCsv-DA_4rIzW.mjs.map +1 -0
  218. package/dist/pullTranscendConfiguration-D2cYlu6V.mjs +80 -0
  219. package/dist/pullTranscendConfiguration-D2cYlu6V.mjs.map +1 -0
  220. package/dist/pullUnstructuredSubDataPointRecommendations-C4aVhH-W.mjs +38 -0
  221. package/dist/pullUnstructuredSubDataPointRecommendations-C4aVhH-W.mjs.map +1 -0
  222. package/dist/pushCronIdentifiersFromCsv-C34TB9tG.mjs +2 -0
  223. package/dist/pushCronIdentifiersFromCsv-C34TB9tG.mjs.map +1 -0
  224. package/dist/pushManualEnrichmentIdentifiersFromCsv-CGS9E3Ft.mjs +2 -0
  225. package/dist/pushManualEnrichmentIdentifiersFromCsv-CGS9E3Ft.mjs.map +1 -0
  226. package/dist/readCsv-CyOL7eCc.mjs +2 -0
  227. package/dist/readCsv-CyOL7eCc.mjs.map +1 -0
  228. package/dist/{readTranscendYaml-DhKG1ViI.mjs → readTranscendYaml-D-J1ilS0.mjs} +2 -2
  229. package/dist/readTranscendYaml-D-J1ilS0.mjs.map +1 -0
  230. package/dist/removeUnverifiedRequestIdentifiers-pGGOFbfE.mjs +35 -0
  231. package/dist/removeUnverifiedRequestIdentifiers-pGGOFbfE.mjs.map +1 -0
  232. package/dist/request-CAsR6CMY.mjs +117 -0
  233. package/dist/request-CAsR6CMY.mjs.map +1 -0
  234. package/dist/retryRequestDataSilos-DXwN5uPw.mjs +2 -0
  235. package/dist/retryRequestDataSilos-DXwN5uPw.mjs.map +1 -0
  236. package/dist/skipPreflightJobs-BNQhuPZ8.mjs +2 -0
  237. package/dist/skipPreflightJobs-BNQhuPZ8.mjs.map +1 -0
  238. package/dist/skipRequestDataSilos-C39ji4lO.mjs +2 -0
  239. package/dist/skipRequestDataSilos-C39ji4lO.mjs.map +1 -0
  240. package/dist/splitCsvToList-BRq_CIfd.mjs +2 -0
  241. package/dist/splitCsvToList-BRq_CIfd.mjs.map +1 -0
  242. package/dist/streamPrivacyRequestsToCsv-C8lquiyd.mjs +2 -0
  243. package/dist/streamPrivacyRequestsToCsv-C8lquiyd.mjs.map +1 -0
  244. package/dist/syncCodePackages-BHgjfXCI.mjs +232 -0
  245. package/dist/syncCodePackages-BHgjfXCI.mjs.map +1 -0
  246. package/dist/syncCookies-CiLtxDFf.mjs +2 -0
  247. package/dist/syncCookies-CiLtxDFf.mjs.map +1 -0
  248. package/dist/syncDataFlows-DmBUs3G_.mjs +2 -0
  249. package/dist/syncDataFlows-DmBUs3G_.mjs.map +1 -0
  250. package/dist/syncTemplates-BNu1_dmW.mjs +23 -0
  251. package/dist/syncTemplates-BNu1_dmW.mjs.map +1 -0
  252. package/dist/time-Bl_c3W8U.mjs +2 -0
  253. package/dist/time-Bl_c3W8U.mjs.map +1 -0
  254. package/dist/types-B4CVJCpj.mjs +2 -0
  255. package/dist/types-B4CVJCpj.mjs.map +1 -0
  256. package/dist/updateConsentManagerVersionToLatest-BBMN94Hs.mjs +2 -0
  257. package/dist/updateConsentManagerVersionToLatest-BBMN94Hs.mjs.map +1 -0
  258. package/dist/uploadConsents-BbR7_sSt.mjs +2 -0
  259. package/dist/uploadConsents-BbR7_sSt.mjs.map +1 -0
  260. package/dist/uploadCookiesFromCsv-BKZx_E_2.mjs +2 -0
  261. package/dist/uploadCookiesFromCsv-BKZx_E_2.mjs.map +1 -0
  262. package/dist/uploadDataFlowsFromCsv-CJFVLvCJ.mjs +2 -0
  263. package/dist/uploadDataFlowsFromCsv-CJFVLvCJ.mjs.map +1 -0
  264. package/dist/uploadPrivacyRequestsFromCsv-BmP1JluQ.mjs +17 -0
  265. package/dist/uploadPrivacyRequestsFromCsv-BmP1JluQ.mjs.map +1 -0
  266. package/dist/uploadSiloDiscoveryResults-XpDp2u35.mjs +20 -0
  267. package/dist/uploadSiloDiscoveryResults-XpDp2u35.mjs.map +1 -0
  268. package/dist/validateTranscendAuth-1W1IylqE.mjs +2 -0
  269. package/dist/validateTranscendAuth-1W1IylqE.mjs.map +1 -0
  270. package/dist/withPreferenceRetry-Cb5S310L.mjs +2 -0
  271. package/dist/withPreferenceRetry-Cb5S310L.mjs.map +1 -0
  272. package/dist/writeCsv-B51ulrVl.mjs +6 -0
  273. package/dist/writeCsv-B51ulrVl.mjs.map +1 -0
  274. package/package.json +34 -53
  275. package/dist/api-keys-CxvKdj2v.mjs +0 -2
  276. package/dist/api-keys-CxvKdj2v.mjs.map +0 -1
  277. package/dist/app-BKMxG7RO.mjs +0 -131
  278. package/dist/app-BKMxG7RO.mjs.map +0 -1
  279. package/dist/buildAIIntegrationType-Bk0EbFKV.mjs +0 -2
  280. package/dist/buildAIIntegrationType-Bk0EbFKV.mjs.map +0 -1
  281. package/dist/code-scanning-Cx1kpssH.mjs +0 -4
  282. package/dist/code-scanning-Cx1kpssH.mjs.map +0 -1
  283. package/dist/codecs-TR6p48v3.mjs +0 -2
  284. package/dist/codecs-TR6p48v3.mjs.map +0 -1
  285. package/dist/command-Bzyj3M2G.mjs.map +0 -1
  286. package/dist/consent-manager-c4bgQF1N.mjs +0 -12
  287. package/dist/consent-manager-c4bgQF1N.mjs.map +0 -1
  288. package/dist/constants-CnLQtIBn.mjs +0 -2
  289. package/dist/constants-CnLQtIBn.mjs.map +0 -1
  290. package/dist/context-bkKpii_t.mjs.map +0 -1
  291. package/dist/cron-BvxWyvDu.mjs +0 -2
  292. package/dist/cron-BvxWyvDu.mjs.map +0 -1
  293. package/dist/data-inventory-CkS_kmus.mjs +0 -75
  294. package/dist/data-inventory-CkS_kmus.mjs.map +0 -1
  295. package/dist/dataFlowsToDataSilos-RAhfPV0l.mjs.map +0 -1
  296. package/dist/impl-8dOatHnF.mjs +0 -2
  297. package/dist/impl-8dOatHnF.mjs.map +0 -1
  298. package/dist/impl-Ah-1lwzr.mjs +0 -2
  299. package/dist/impl-Ah-1lwzr.mjs.map +0 -1
  300. package/dist/impl-B5lTeRbn.mjs +0 -2
  301. package/dist/impl-B5lTeRbn.mjs.map +0 -1
  302. package/dist/impl-B6UhzQcY2.mjs +0 -2
  303. package/dist/impl-B6UhzQcY2.mjs.map +0 -1
  304. package/dist/impl-BFf_CotE2.mjs +0 -2
  305. package/dist/impl-BFf_CotE2.mjs.map +0 -1
  306. package/dist/impl-BGQ0EGS0.mjs +0 -2
  307. package/dist/impl-BGQ0EGS0.mjs.map +0 -1
  308. package/dist/impl-BYBNi68b.mjs.map +0 -1
  309. package/dist/impl-B__p3_wC.mjs +0 -2
  310. package/dist/impl-B__p3_wC.mjs.map +0 -1
  311. package/dist/impl-BcayRe6a.mjs +0 -2
  312. package/dist/impl-BcayRe6a.mjs.map +0 -1
  313. package/dist/impl-BkYKsEVG2.mjs +0 -2
  314. package/dist/impl-BkYKsEVG2.mjs.map +0 -1
  315. package/dist/impl-Bl2yVgh0.mjs +0 -4
  316. package/dist/impl-Bl2yVgh0.mjs.map +0 -1
  317. package/dist/impl-BmAMgEEM.mjs +0 -12
  318. package/dist/impl-BmAMgEEM.mjs.map +0 -1
  319. package/dist/impl-BsttzxTN2.mjs +0 -2
  320. package/dist/impl-BsttzxTN2.mjs.map +0 -1
  321. package/dist/impl-BtnySmbi.mjs +0 -2
  322. package/dist/impl-BtnySmbi.mjs.map +0 -1
  323. package/dist/impl-BwX-evfW2.mjs +0 -4
  324. package/dist/impl-BwX-evfW2.mjs.map +0 -1
  325. package/dist/impl-C-wzeAib2.mjs +0 -2
  326. package/dist/impl-C-wzeAib2.mjs.map +0 -1
  327. package/dist/impl-C61PYfk12.mjs +0 -2
  328. package/dist/impl-C61PYfk12.mjs.map +0 -1
  329. package/dist/impl-CAuNpuF2.mjs +0 -2
  330. package/dist/impl-CAuNpuF2.mjs.map +0 -1
  331. package/dist/impl-CSKrBIuV.mjs +0 -2
  332. package/dist/impl-CSKrBIuV.mjs.map +0 -1
  333. package/dist/impl-CZP2l3Ds.mjs.map +0 -1
  334. package/dist/impl-CiJ8hE5W2.mjs +0 -2
  335. package/dist/impl-CiJ8hE5W2.mjs.map +0 -1
  336. package/dist/impl-Cj3H-m2Z.mjs +0 -2
  337. package/dist/impl-Cj3H-m2Z.mjs.map +0 -1
  338. package/dist/impl-CkY0wfCz.mjs +0 -2
  339. package/dist/impl-CkY0wfCz.mjs.map +0 -1
  340. package/dist/impl-Cm8pUfBU2.mjs +0 -2
  341. package/dist/impl-Cm8pUfBU2.mjs.map +0 -1
  342. package/dist/impl-CpzS9LVu2.mjs +0 -2
  343. package/dist/impl-CpzS9LVu2.mjs.map +0 -1
  344. package/dist/impl-CwfamZ1c.mjs +0 -2
  345. package/dist/impl-CwfamZ1c.mjs.map +0 -1
  346. package/dist/impl-D81et1Yb2.mjs +0 -2
  347. package/dist/impl-D81et1Yb2.mjs.map +0 -1
  348. package/dist/impl-D92PTNk3.mjs +0 -2
  349. package/dist/impl-D92PTNk3.mjs.map +0 -1
  350. package/dist/impl-DTXDVeo6.mjs +0 -2
  351. package/dist/impl-DTXDVeo6.mjs.map +0 -1
  352. package/dist/impl-DWoysXup.mjs +0 -2
  353. package/dist/impl-DWoysXup.mjs.map +0 -1
  354. package/dist/impl-DX3JHZ4v2.mjs +0 -2
  355. package/dist/impl-DX3JHZ4v2.mjs.map +0 -1
  356. package/dist/impl-DhuUrzxQ.mjs +0 -2
  357. package/dist/impl-DhuUrzxQ.mjs.map +0 -1
  358. package/dist/impl-DqMYLKjU.mjs +0 -2
  359. package/dist/impl-DqMYLKjU.mjs.map +0 -1
  360. package/dist/impl-DqQ6CIj0.mjs +0 -2
  361. package/dist/impl-DqQ6CIj0.mjs.map +0 -1
  362. package/dist/impl-Duaq6iWI2.mjs +0 -2
  363. package/dist/impl-Duaq6iWI2.mjs.map +0 -1
  364. package/dist/impl-O5gz8qcm.mjs +0 -2
  365. package/dist/impl-O5gz8qcm.mjs.map +0 -1
  366. package/dist/impl-PH0AoC7i.mjs +0 -2
  367. package/dist/impl-PH0AoC7i.mjs.map +0 -1
  368. package/dist/impl-S8p6toVb2.mjs +0 -2
  369. package/dist/impl-S8p6toVb2.mjs.map +0 -1
  370. package/dist/impl-X2MSb8Ij.mjs +0 -2
  371. package/dist/impl-X2MSb8Ij.mjs.map +0 -1
  372. package/dist/impl-bo95wZIU2.mjs +0 -2
  373. package/dist/impl-bo95wZIU2.mjs.map +0 -1
  374. package/dist/impl-cfdCesro.mjs +0 -2
  375. package/dist/impl-cfdCesro.mjs.map +0 -1
  376. package/dist/impl-iZoXu4nV.mjs +0 -2
  377. package/dist/impl-iZoXu4nV.mjs.map +0 -1
  378. package/dist/impl-lebl6Zek2.mjs +0 -2
  379. package/dist/impl-lebl6Zek2.mjs.map +0 -1
  380. package/dist/impl-p0YN9e2e.mjs +0 -2
  381. package/dist/impl-p0YN9e2e.mjs.map +0 -1
  382. package/dist/manual-enrichment-B6lW5kAX.mjs +0 -2
  383. package/dist/manual-enrichment-B6lW5kAX.mjs.map +0 -1
  384. package/dist/mergeTranscendInputs-Coj_e2N3.mjs +0 -2
  385. package/dist/mergeTranscendInputs-Coj_e2N3.mjs.map +0 -1
  386. package/dist/pooling-CazydwlD.mjs.map +0 -1
  387. package/dist/preference-management-8gj7aSJB.mjs +0 -7
  388. package/dist/preference-management-8gj7aSJB.mjs.map +0 -1
  389. package/dist/readTranscendYaml-DhKG1ViI.mjs.map +0 -1
  390. package/dist/syncConfigurationToTranscend-VJd0PnaZ.mjs +0 -3010
  391. package/dist/syncConfigurationToTranscend-VJd0PnaZ.mjs.map +0 -1
  392. package/dist/uploadConsents-C1S-BNzw.mjs +0 -2
  393. package/dist/uploadConsents-C1S-BNzw.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchApiKeys-DkBco7W0.mjs","names":[],"sources":["../src/lib/graphql/gqls/apiKey.ts","../src/lib/graphql/fetchApiKeys.ts"],"sourcesContent":["import { gql } from 'graphql-request';\n\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\nexport const API_KEYS = gql`\n query TranscendCliApiKeys($first: Int!, $offset: Int!, $titles: [String!]) {\n apiKeys(\n first: $first\n offset: $offset\n filterBy: { titles: $titles }\n useMaster: false\n orderBy: [{ field: createdAt, direction: ASC }, { field: title, direction: ASC }]\n ) {\n nodes {\n id\n title\n }\n }\n }\n`;\n\nexport const CREATE_API_KEY = gql`\n mutation TranscendCliCreateApiKey($input: ApiKeyInput!) {\n createApiKey(input: $input) {\n apiKey {\n id\n apiKey\n title\n }\n }\n }\n`;\n\nexport const DELETE_API_KEY = gql`\n mutation TranscendCliDeleteApiKey($id: ID!) {\n deleteApiKey(id: $id) {\n clientMutationId\n }\n }\n`;\n","import colors from 'colors';\nimport { GraphQLClient } from 'graphql-request';\nimport { keyBy, uniq, difference } from 'lodash-es';\n\nimport { TranscendInput } from '../../codecs.js';\nimport { logger } from '../../logger.js';\nimport { API_KEYS } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface ApiKey {\n /** ID of API key */\n id: string;\n /** Title of API key */\n title: string;\n}\n\nconst PAGE_SIZE = 20;\n\nconst ADMIN_LINK = 'https://app.transcend.io/infrastructure/api-keys';\n\n/**\n * Fetch all API keys in an organization\n *\n * @param client - Client\n * @param titles - Filter on titles\n * @returns API keys\n */\nexport async function fetchAllApiKeys(client: GraphQLClient, titles?: string[]): Promise<ApiKey[]> {\n const apiKeys: ApiKey[] = [];\n let offset = 0;\n\n // Paginate\n let shouldContinue = false;\n do {\n const {\n apiKeys: { nodes },\n } = await makeGraphQLRequest<{\n /** API keys */\n apiKeys: {\n /** List */\n nodes: ApiKey[];\n };\n }>(client, API_KEYS, {\n first: PAGE_SIZE,\n offset,\n titles,\n });\n apiKeys.push(...nodes);\n offset += PAGE_SIZE;\n shouldContinue = nodes.length === PAGE_SIZE;\n } while (shouldContinue);\n return apiKeys.sort((a, b) => a.title.localeCompare(b.title));\n}\n\n/**\n * Fetch all apiKeys and if any are found in the config that are\n * missing, create those apiKeys.\n *\n * @param apiKeyInputs - API keys to fetch metadata on\n * @param client - GraphQL client\n * @param fetchAll - When true, fetch all API keys\n * @returns A map from apiKey title to Identifier\n */\nexport async function fetchApiKeys(\n { 'api-keys': apiKeyInputs = [], 'data-silos': dataSilos = [] }: TranscendInput,\n client: GraphQLClient,\n fetchAll = false,\n): Promise<{ [k in string]: ApiKey }> {\n logger.info(colors.magenta(`Fetching ${fetchAll ? 'all' : apiKeyInputs.length} API keys...`));\n const titles = apiKeyInputs.map(({ title }) => title);\n const expectedApiKeyTitles = uniq(\n dataSilos.map((silo) => silo['api-key-title']).filter((x): x is string => !!x),\n );\n const allTitlesExpected = [...expectedApiKeyTitles, ...titles];\n const apiKeys = await fetchAllApiKeys(\n client,\n fetchAll ? undefined : [...expectedApiKeyTitles, ...titles],\n );\n\n // Create a map\n const apiKeysByTitle = keyBy(apiKeys, 'title');\n\n // Determine expected set of apiKeys expected\n const missingApiKeys = difference(\n allTitlesExpected,\n apiKeys.map(({ title }) => title),\n );\n\n // If there are missing apiKeys, throw an error\n if (missingApiKeys.length > 0) {\n logger.info(\n colors.red(\n `Failed to find API keys \"${missingApiKeys.join(\n '\", \"',\n )}\"! Make sure these API keys are created at: ${ADMIN_LINK}`,\n ),\n );\n process.exit(1);\n }\n return apiKeysByTitle;\n}\n"],"mappings":"mNAIA,MAAa,EAAW,CAAG;;;;;;;;;;;;;;;EAiBd,EAAiB,CAAG;;;;;;;;;;EAYpB,EAAiB,CAAG;;;;;;ECNjC,eAAsB,EAAgB,EAAuB,EAAsC,CACjG,IAAM,EAAoB,EAAE,CACxB,EAAS,EAGT,EAAiB,GACrB,EAAG,CACD,GAAM,CACJ,QAAS,CAAE,UACT,MAAM,EAMP,EAAQ,EAAU,CACnB,MAAO,GACP,SACA,SACD,CAAC,CACF,EAAQ,KAAK,GAAG,EAAM,CACtB,GAAU,GACV,EAAiB,EAAM,SAAW,SAC3B,GACT,OAAO,EAAQ,MAAM,EAAG,IAAM,EAAE,MAAM,cAAc,EAAE,MAAM,CAAC,CAY/D,eAAsB,EACpB,CAAE,WAAY,EAAe,EAAE,CAAE,aAAc,EAAY,EAAE,EAC7D,EACA,EAAW,GACyB,CACpC,EAAO,KAAK,EAAO,QAAQ,YAAY,EAAW,MAAQ,EAAa,OAAO,cAAc,CAAC,CAC7F,IAAM,EAAS,EAAa,KAAK,CAAE,WAAY,EAAM,CAC/C,EAAuB,EAC3B,EAAU,IAAK,GAAS,EAAK,iBAAiB,CAAC,OAAQ,GAAmB,CAAC,CAAC,EAAE,CAC/E,CACK,EAAoB,CAAC,GAAG,EAAsB,GAAG,EAAO,CACxD,EAAU,MAAM,EACpB,EACA,EAAW,IAAA,GAAY,CAAC,GAAG,EAAsB,GAAG,EAAO,CAC5D,CAGK,EAAiB,EAAM,EAAS,QAAQ,CAGxC,EAAiB,EACrB,EACA,EAAQ,KAAK,CAAE,WAAY,EAAM,CAClC,CAaD,OAVI,EAAe,OAAS,IAC1B,EAAO,KACL,EAAO,IACL,4BAA4B,EAAe,KACzC,OACD,CAAC,8FACH,CACF,CACD,QAAQ,KAAK,EAAE,EAEV"}
@@ -0,0 +1,12 @@
1
+ import{t as e}from"./makeGraphQLRequest-G078PsEL.mjs";import{gql as t}from"graphql-request";const n=t`
2
+ query TranscendCliCatalogs($first: Int!, $offset: Int!) {
3
+ catalogs(first: $first, offset: $offset, filterBy: {}, useMaster: false) {
4
+ nodes {
5
+ integrationName
6
+ title
7
+ hasApiFunctionality
8
+ }
9
+ }
10
+ }
11
+ `;async function r(t){let r=[],i=0,a=!1;do{let{catalogs:{nodes:o}}=await e(t,n,{first:100,offset:i});r.push(...o),i+=100,a=o.length===100}while(a);return r.sort((e,t)=>e.integrationName.localeCompare(t.integrationName))}async function i(e){let t=await r(e);return{catalogs:t,serviceToTitle:t.reduce((e,t)=>Object.assign(e,{[t.integrationName]:t.title}),{}),serviceToSupportedIntegration:t.reduce((e,t)=>Object.assign(e,{[t.integrationName]:t.hasApiFunctionality}),{})}}export{i as n,n as r,r as t};
12
+ //# sourceMappingURL=fetchCatalogs-CBk871k6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchCatalogs-CBk871k6.mjs","names":[],"sources":["../src/lib/graphql/gqls/catalog.ts","../src/lib/graphql/fetchCatalogs.ts"],"sourcesContent":["import { gql } from 'graphql-request';\n\n// TODO: https://transcend.height.app/T-27909 - order by createdAt\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\nexport const CATALOGS = gql`\n query TranscendCliCatalogs($first: Int!, $offset: Int!) {\n catalogs(first: $first, offset: $offset, filterBy: {}, useMaster: false) {\n nodes {\n integrationName\n title\n hasApiFunctionality\n }\n }\n }\n`;\n","import { GraphQLClient } from 'graphql-request';\n\nimport { CATALOGS } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface Catalog {\n /** Integration name */\n integrationName: string;\n /** Title of Data Silo */\n title: string;\n /** Whether API is supported */\n hasApiFunctionality: boolean;\n}\n\nconst PAGE_SIZE = 100;\n\n/**\n * Fetch all integration catalogs in an organization\n *\n * @param client - Client\n * @returns Integration catalogs\n */\nexport async function fetchAllCatalogs(client: GraphQLClient): Promise<Catalog[]> {\n const catalogs: Catalog[] = [];\n let offset = 0;\n\n // Paginate\n let shouldContinue = false;\n do {\n const {\n catalogs: { nodes },\n } = await makeGraphQLRequest<{\n /** integration catalogs */\n catalogs: {\n /** List */\n nodes: Catalog[];\n };\n }>(client, CATALOGS, {\n first: PAGE_SIZE,\n offset,\n });\n catalogs.push(...nodes);\n offset += PAGE_SIZE;\n shouldContinue = nodes.length === PAGE_SIZE;\n } while (shouldContinue);\n return catalogs.sort((a, b) => a.integrationName.localeCompare(b.integrationName));\n}\n\nexport interface IndexedCatalogs {\n /** Mapping from service name to service title */\n serviceToTitle: { [k in string]: string };\n /** Mapping from service name to boolean indicate if service has API integration support */\n serviceToSupportedIntegration: { [k in string]: boolean };\n}\n\n/**\n * Fetch all integration catalogs and index them for usage in common utility manners\n *\n * @param client - Client\n * @returns Integration catalogs\n */\nexport async function fetchAndIndexCatalogs(client: GraphQLClient): Promise<\n {\n /** List of all catalogs */\n catalogs: Catalog[];\n } & IndexedCatalogs\n> {\n // Fetch all integrations in the catalog\n const catalogs = await fetchAllCatalogs(client);\n\n // Create mapping from service name to service title\n const serviceToTitle = catalogs.reduce(\n (acc, catalog) => Object.assign(acc, { [catalog.integrationName]: catalog.title }),\n {} as { [k in string]: string },\n );\n\n // Create mapping from service name to boolean indicate if service has API integration support\n const serviceToSupportedIntegration = catalogs.reduce(\n (acc, catalog) =>\n Object.assign(acc, {\n [catalog.integrationName]: catalog.hasApiFunctionality,\n }),\n {} as { [k in string]: boolean },\n );\n\n return {\n catalogs,\n serviceToTitle,\n serviceToSupportedIntegration,\n };\n}\n"],"mappings":"4FAKA,MAAa,EAAW,CAAG;;;;;;;;;;ECiB3B,eAAsB,EAAiB,EAA2C,CAChF,IAAM,EAAsB,EAAE,CAC1B,EAAS,EAGT,EAAiB,GACrB,EAAG,CACD,GAAM,CACJ,SAAU,CAAE,UACV,MAAM,EAMP,EAAQ,EAAU,CACnB,MAAO,IACP,SACD,CAAC,CACF,EAAS,KAAK,GAAG,EAAM,CACvB,GAAU,IACV,EAAiB,EAAM,SAAW,UAC3B,GACT,OAAO,EAAS,MAAM,EAAG,IAAM,EAAE,gBAAgB,cAAc,EAAE,gBAAgB,CAAC,CAgBpF,eAAsB,EAAsB,EAK1C,CAEA,IAAM,EAAW,MAAM,EAAiB,EAAO,CAiB/C,MAAO,CACL,WACA,eAhBqB,EAAS,QAC7B,EAAK,IAAY,OAAO,OAAO,EAAK,EAAG,EAAQ,iBAAkB,EAAQ,MAAO,CAAC,CAClF,EAAE,CACH,CAcC,8BAXoC,EAAS,QAC5C,EAAK,IACJ,OAAO,OAAO,EAAK,EAChB,EAAQ,iBAAkB,EAAQ,oBACpC,CAAC,CACJ,EAAE,CACH,CAMA"}
@@ -0,0 +1,321 @@
1
+ import{t as e}from"./makeGraphQLRequest-G078PsEL.mjs";import{gql as t}from"graphql-request";const n=t`
2
+ query TranscendCliExperiences($first: Int!, $offset: Int!) {
3
+ experiences(first: $first, offset: $offset, useMaster: false) {
4
+ nodes {
5
+ id
6
+ name
7
+ displayName
8
+ regions {
9
+ countrySubDivision
10
+ country
11
+ }
12
+ operator
13
+ displayPriority
14
+ onConsentExpiry
15
+ consentExpiry
16
+ viewState
17
+ purposes {
18
+ name
19
+ trackingType
20
+ }
21
+ optedOutPurposes {
22
+ name
23
+ trackingType
24
+ }
25
+ browserLanguages
26
+ browserTimeZones
27
+ }
28
+ }
29
+ }
30
+ `,r=t`
31
+ query TranscendCliConsentPartitions($first: Int!, $offset: Int!) {
32
+ consentPartitions(first: $first, offset: $offset) {
33
+ nodes {
34
+ id
35
+ name
36
+ partition
37
+ }
38
+ }
39
+ }
40
+ `,i=t`
41
+ mutation TranscendCliCreateDataFlows(
42
+ $dataFlows: [DataFlowInput!]!
43
+ $airgapBundleId: ID!
44
+ $classifyService: Boolean
45
+ ) {
46
+ createDataFlows(
47
+ input: {
48
+ airgapBundleId: $airgapBundleId
49
+ dataFlows: $dataFlows
50
+ classifyService: $classifyService
51
+ }
52
+ ) {
53
+ dataFlows {
54
+ id
55
+ }
56
+ }
57
+ }
58
+ `,a=t`
59
+ mutation TranscendCliUpdateDataFlows(
60
+ $airgapBundleId: ID!
61
+ $dataFlows: [UpdateDataFlowInput!]!
62
+ $classifyService: Boolean
63
+ ) {
64
+ updateDataFlows(
65
+ input: {
66
+ airgapBundleId: $airgapBundleId
67
+ dataFlows: $dataFlows
68
+ classifyService: $classifyService
69
+ }
70
+ ) {
71
+ dataFlows {
72
+ id
73
+ }
74
+ }
75
+ }
76
+ `,o=t`
77
+ mutation TranscendCliUpdateOrCreateCookies(
78
+ $cookies: [UpdateOrCreateCookieInput!]!
79
+ $airgapBundleId: ID!
80
+ ) {
81
+ updateOrCreateCookies(input: { airgapBundleId: $airgapBundleId, cookies: $cookies }) {
82
+ clientMutationId
83
+ }
84
+ }
85
+ `,s=t`
86
+ query TranscendCliDataFlows(
87
+ $first: Int!
88
+ $airgapBundleId: ID!
89
+ $offset: Int!
90
+ $status: ConsentTrackerStatus
91
+ $showZeroActivity: Boolean
92
+ ) {
93
+ dataFlows(
94
+ first: $first
95
+ offset: $offset
96
+ filterBy: { status: $status, showZeroActivity: $showZeroActivity }
97
+ input: { airgapBundleId: $airgapBundleId }
98
+ orderBy: [{ field: createdAt, direction: ASC }, { field: value, direction: ASC }]
99
+ useMaster: false
100
+ ) {
101
+ nodes {
102
+ id
103
+ value
104
+ type
105
+ description
106
+ trackingType
107
+ service {
108
+ integrationName
109
+ }
110
+ source
111
+ status
112
+ owners {
113
+ email
114
+ }
115
+ teams {
116
+ name
117
+ }
118
+ attributeValues {
119
+ name
120
+ attributeKey {
121
+ name
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ `,c=t`
128
+ query TranscendCliCookies(
129
+ $first: Int!
130
+ $offset: Int!
131
+ $airgapBundleId: ID!
132
+ $status: ConsentTrackerStatus
133
+ ) {
134
+ cookies(
135
+ first: $first
136
+ offset: $offset
137
+ filterBy: { status: $status }
138
+ input: { airgapBundleId: $airgapBundleId }
139
+ orderBy: [{ field: createdAt, direction: ASC }, { field: name, direction: ASC }]
140
+ useMaster: false
141
+ ) {
142
+ nodes {
143
+ id
144
+ name
145
+ isRegex
146
+ description
147
+ trackingPurposes
148
+ service {
149
+ integrationName
150
+ }
151
+ source
152
+ status
153
+ owners {
154
+ email
155
+ }
156
+ teams {
157
+ name
158
+ }
159
+ attributeValues {
160
+ name
161
+ attributeKey {
162
+ name
163
+ }
164
+ }
165
+ }
166
+ }
167
+ }
168
+ `,l=t`
169
+ query TranscendCliFetchConsentManagerId {
170
+ consentManager {
171
+ consentManager {
172
+ id
173
+ }
174
+ }
175
+ }
176
+ `,u=t`
177
+ query TranscendCliFetchConsentManager {
178
+ consentManager {
179
+ consentManager {
180
+ id
181
+ bundleURL
182
+ testBundleURL
183
+ configuration {
184
+ domains
185
+ consentPrecedence
186
+ unknownRequestPolicy
187
+ unknownCookiePolicy
188
+ syncEndpoint
189
+ telemetryPartitioning
190
+ signedIabAgreement
191
+ syncGroups
192
+ partition
193
+ }
194
+ partition {
195
+ partition
196
+ }
197
+ }
198
+ }
199
+ }
200
+ `,d=t`
201
+ query TranscendCliFetchConsentManagerTheme($airgapBundleId: ID!) {
202
+ consentManagerTheme(input: { airgapBundleId: $airgapBundleId }) {
203
+ theme {
204
+ primaryColor
205
+ fontColor
206
+ privacyPolicy
207
+ prompt
208
+ }
209
+ }
210
+ }
211
+ `,f=t`
212
+ mutation TranscendCliCreateConsentManager($privacyCenterId: ID!) {
213
+ createConsentManager(input: { privacyCenterId: $privacyCenterId }) {
214
+ consentManager {
215
+ id
216
+ }
217
+ }
218
+ }
219
+ `,p=t`
220
+ mutation TranscendCliUpdateConsentManager($airgapBundleId: ID!, $version: String!) {
221
+ updateConsentManager(id: $airgapBundleId, input: { version: $version }) {
222
+ clientMutationId
223
+ }
224
+ }
225
+ `,m=t`
226
+ mutation TranscendCliUpdateConsentManagerToLatest(
227
+ $airgapBundleId: ID!
228
+ $bundleType: ConsentBundleType!
229
+ ) {
230
+ updateConsentManagerToLatestVersion(id: $airgapBundleId, input: { bundleType: $bundleType }) {
231
+ clientMutationId
232
+ }
233
+ }
234
+ `,h=t`
235
+ mutation TranscendCliDeployConsentManager($airgapBundleId: ID!, $bundleType: ConsentBundleType!) {
236
+ deployConsentManagerBundle(id: $airgapBundleId, input: { bundleType: $bundleType }) {
237
+ clientMutationId
238
+ }
239
+ }
240
+ `,g=t`
241
+ mutation TranscendCliUpdateConsentManagerDomains($airgapBundleId: ID!, $domains: [String!]!) {
242
+ updateConsentManagerDomains(input: { id: $airgapBundleId, domains: $domains }) {
243
+ clientMutationId
244
+ }
245
+ }
246
+ `,_=t`
247
+ mutation TranscendCliUpdateConsentManagerPartition($airgapBundleId: ID!, $partitionId: ID!) {
248
+ updateConsentManagerPartition(input: { id: $airgapBundleId, partitionId: $partitionId }) {
249
+ clientMutationId
250
+ }
251
+ }
252
+ `,v=t`
253
+ mutation TranscendCliUpdateLoadOptions($input: UpdateLoadOptionsInput!) {
254
+ updateLoadOptions(input: $input) {
255
+ clientMutationId
256
+ }
257
+ }
258
+ `,y=t`
259
+ mutation TranscendCliToggleUnknownRequestPolicy($input: ToggleUnknownRequestPolicyInput!) {
260
+ toggleUnknownRequestPolicy(input: $input) {
261
+ clientMutationId
262
+ }
263
+ }
264
+ `,b=t`
265
+ mutation TranscendCliToggleUnknownCookiePolicy($input: ToggleUnknownCookiePolicyInput!) {
266
+ toggleUnknownCookiePolicy(input: $input) {
267
+ clientMutationId
268
+ }
269
+ }
270
+ `,x=t`
271
+ mutation TranscendCliToggleTelemetryPartitionStrategy(
272
+ $input: ToggleTelemetryPartitionStrategyInput!
273
+ ) {
274
+ toggleTelemetryPartitioning(input: $input) {
275
+ clientMutationId
276
+ }
277
+ }
278
+ `,S=t`
279
+ mutation TranscendCliToggleConsentPrecedence($input: ToggleConsentPrecedenceInput!) {
280
+ toggleConsentPrecedence(input: $input) {
281
+ clientMutationId
282
+ }
283
+ }
284
+ `,C=t`
285
+ mutation TranscendCliUpdateConsentManagerTheme($input: UpdateConsentManagerThemeInput!) {
286
+ updateConsentManagerTheme(input: $input) {
287
+ clientMutationId
288
+ }
289
+ }
290
+ `,w=t`
291
+ mutation TranscendCliUpdateConsentExperience($input: UpdateExperienceInput!) {
292
+ updateExperience(input: $input) {
293
+ clientMutationId
294
+ }
295
+ }
296
+ `,T=t`
297
+ mutation TranscendCliCreateConsentExperience($input: CreateExperienceInput!) {
298
+ createExperience(input: $input) {
299
+ clientMutationId
300
+ }
301
+ }
302
+ `,E=t`
303
+ mutation TranscendCliCreateConsentPartition($input: CreateConsentPartitionInput!) {
304
+ createConsentPartition(input: $input) {
305
+ clientMutationId
306
+ }
307
+ }
308
+ `,D=t`
309
+ query TranscendCliConsentManagerAnalyticsData($input: AnalyticsInput!) {
310
+ analyticsData(input: $input) {
311
+ series {
312
+ name
313
+ points {
314
+ key
315
+ value
316
+ }
317
+ }
318
+ }
319
+ }
320
+ `;async function O(t){let{consentManager:{consentManager:n}}=await e(t,u);return n}async function k(t,n){let{consentManager:{consentManager:r}}=await e(t,l,{},{},n);return r.id}async function A(t){let r=[],i=0,a=!1;do{let{experiences:{nodes:o}}=await e(t,n,{first:50,offset:i});r.push(...o),i+=50,a=o.length===50}while(a);return r.sort((e,t)=>e.name.localeCompare(t.name))}let j=function(e){return e.Hourly=`1h`,e.Daily=`1d`,e}({});async function M(t,n){let{analyticsData:{series:r}}=await e(t,D,{input:n});return r}async function N(t,n){let{consentManagerTheme:{theme:r}}=await e(t,d,{airgapBundleId:n});return r}export{a as A,y as C,C as D,_ as E,o as M,m as O,b as S,g as T,u as _,k as a,S as b,r as c,f as d,E as f,n as g,h,A as i,v as j,p as k,c as l,s as m,O as n,N as o,i as p,M as r,D as s,j as t,T as u,l as v,w,x,d as y};
321
+ //# sourceMappingURL=fetchConsentManagerId-DHDA5Py9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchConsentManagerId-DHDA5Py9.mjs","names":[],"sources":["../src/lib/graphql/gqls/consentManager.ts","../src/lib/graphql/gqls/consentManagerMetrics.ts","../src/lib/graphql/fetchConsentManagerId.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport { gql } from 'graphql-request';\n\n// TODO: https://transcend.height.app/T-27909 - order by createdAt\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\nexport const EXPERIENCES = gql`\n query TranscendCliExperiences($first: Int!, $offset: Int!) {\n experiences(first: $first, offset: $offset, useMaster: false) {\n nodes {\n id\n name\n displayName\n regions {\n countrySubDivision\n country\n }\n operator\n displayPriority\n onConsentExpiry\n consentExpiry\n viewState\n purposes {\n name\n trackingType\n }\n optedOutPurposes {\n name\n trackingType\n }\n browserLanguages\n browserTimeZones\n }\n }\n }\n`;\n\n// TODO: https://transcend.height.app/T-27909 - order by createdAt\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// useMaster: false\n// isExportCsv: true\nexport const CONSENT_PARTITIONS = gql`\n query TranscendCliConsentPartitions($first: Int!, $offset: Int!) {\n consentPartitions(first: $first, offset: $offset) {\n nodes {\n id\n name\n partition\n }\n }\n }\n`;\n\nexport const CREATE_DATA_FLOWS = gql`\n mutation TranscendCliCreateDataFlows(\n $dataFlows: [DataFlowInput!]!\n $airgapBundleId: ID!\n $classifyService: Boolean\n ) {\n createDataFlows(\n input: {\n airgapBundleId: $airgapBundleId\n dataFlows: $dataFlows\n classifyService: $classifyService\n }\n ) {\n dataFlows {\n id\n }\n }\n }\n`;\n\nexport const UPDATE_DATA_FLOWS = gql`\n mutation TranscendCliUpdateDataFlows(\n $airgapBundleId: ID!\n $dataFlows: [UpdateDataFlowInput!]!\n $classifyService: Boolean\n ) {\n updateDataFlows(\n input: {\n airgapBundleId: $airgapBundleId\n dataFlows: $dataFlows\n classifyService: $classifyService\n }\n ) {\n dataFlows {\n id\n }\n }\n }\n`;\n\nexport const UPDATE_OR_CREATE_COOKIES = gql`\n mutation TranscendCliUpdateOrCreateCookies(\n $cookies: [UpdateOrCreateCookieInput!]!\n $airgapBundleId: ID!\n ) {\n updateOrCreateCookies(input: { airgapBundleId: $airgapBundleId, cookies: $cookies }) {\n clientMutationId\n }\n }\n`;\n\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\nexport const DATA_FLOWS = gql`\n query TranscendCliDataFlows(\n $first: Int!\n $airgapBundleId: ID!\n $offset: Int!\n $status: ConsentTrackerStatus\n $showZeroActivity: Boolean\n ) {\n dataFlows(\n first: $first\n offset: $offset\n filterBy: { status: $status, showZeroActivity: $showZeroActivity }\n input: { airgapBundleId: $airgapBundleId }\n orderBy: [{ field: createdAt, direction: ASC }, { field: value, direction: ASC }]\n useMaster: false\n ) {\n nodes {\n id\n value\n type\n description\n trackingType\n service {\n integrationName\n }\n source\n status\n owners {\n email\n }\n teams {\n name\n }\n attributeValues {\n name\n attributeKey {\n name\n }\n }\n }\n }\n }\n`;\n\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\nexport const COOKIES = gql`\n query TranscendCliCookies(\n $first: Int!\n $offset: Int!\n $airgapBundleId: ID!\n $status: ConsentTrackerStatus\n ) {\n cookies(\n first: $first\n offset: $offset\n filterBy: { status: $status }\n input: { airgapBundleId: $airgapBundleId }\n orderBy: [{ field: createdAt, direction: ASC }, { field: name, direction: ASC }]\n useMaster: false\n ) {\n nodes {\n id\n name\n isRegex\n description\n trackingPurposes\n service {\n integrationName\n }\n source\n status\n owners {\n email\n }\n teams {\n name\n }\n attributeValues {\n name\n attributeKey {\n name\n }\n }\n }\n }\n }\n`;\n\nexport const FETCH_CONSENT_MANAGER_ID = gql`\n query TranscendCliFetchConsentManagerId {\n consentManager {\n consentManager {\n id\n }\n }\n }\n`;\n\nexport const FETCH_CONSENT_MANAGER = gql`\n query TranscendCliFetchConsentManager {\n consentManager {\n consentManager {\n id\n bundleURL\n testBundleURL\n configuration {\n domains\n consentPrecedence\n unknownRequestPolicy\n unknownCookiePolicy\n syncEndpoint\n telemetryPartitioning\n signedIabAgreement\n syncGroups\n partition\n }\n partition {\n partition\n }\n }\n }\n }\n`;\n\nexport const FETCH_CONSENT_MANAGER_THEME = gql`\n query TranscendCliFetchConsentManagerTheme($airgapBundleId: ID!) {\n consentManagerTheme(input: { airgapBundleId: $airgapBundleId }) {\n theme {\n primaryColor\n fontColor\n privacyPolicy\n prompt\n }\n }\n }\n`;\n\nexport const CREATE_CONSENT_MANAGER = gql`\n mutation TranscendCliCreateConsentManager($privacyCenterId: ID!) {\n createConsentManager(input: { privacyCenterId: $privacyCenterId }) {\n consentManager {\n id\n }\n }\n }\n`;\n\nexport const UPDATE_CONSENT_MANAGER_VERSION = gql`\n mutation TranscendCliUpdateConsentManager($airgapBundleId: ID!, $version: String!) {\n updateConsentManager(id: $airgapBundleId, input: { version: $version }) {\n clientMutationId\n }\n }\n`;\n\nexport const UPDATE_CONSENT_MANAGER_TO_LATEST = gql`\n mutation TranscendCliUpdateConsentManagerToLatest(\n $airgapBundleId: ID!\n $bundleType: ConsentBundleType!\n ) {\n updateConsentManagerToLatestVersion(id: $airgapBundleId, input: { bundleType: $bundleType }) {\n clientMutationId\n }\n }\n`;\n\nexport const DEPLOY_CONSENT_MANAGER = gql`\n mutation TranscendCliDeployConsentManager($airgapBundleId: ID!, $bundleType: ConsentBundleType!) {\n deployConsentManagerBundle(id: $airgapBundleId, input: { bundleType: $bundleType }) {\n clientMutationId\n }\n }\n`;\n\nexport const UPDATE_CONSENT_MANAGER_DOMAINS = gql`\n mutation TranscendCliUpdateConsentManagerDomains($airgapBundleId: ID!, $domains: [String!]!) {\n updateConsentManagerDomains(input: { id: $airgapBundleId, domains: $domains }) {\n clientMutationId\n }\n }\n`;\n\nexport const UPDATE_CONSENT_MANAGER_PARTITION = gql`\n mutation TranscendCliUpdateConsentManagerPartition($airgapBundleId: ID!, $partitionId: ID!) {\n updateConsentManagerPartition(input: { id: $airgapBundleId, partitionId: $partitionId }) {\n clientMutationId\n }\n }\n`;\n\nexport const UPDATE_LOAD_OPTIONS = gql`\n mutation TranscendCliUpdateLoadOptions($input: UpdateLoadOptionsInput!) {\n updateLoadOptions(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const TOGGLE_UNKNOWN_REQUEST_POLICY = gql`\n mutation TranscendCliToggleUnknownRequestPolicy($input: ToggleUnknownRequestPolicyInput!) {\n toggleUnknownRequestPolicy(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const TOGGLE_UNKNOWN_COOKIE_POLICY = gql`\n mutation TranscendCliToggleUnknownCookiePolicy($input: ToggleUnknownCookiePolicyInput!) {\n toggleUnknownCookiePolicy(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const TOGGLE_TELEMETRY_PARTITION_STRATEGY = gql`\n mutation TranscendCliToggleTelemetryPartitionStrategy(\n $input: ToggleTelemetryPartitionStrategyInput!\n ) {\n toggleTelemetryPartitioning(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const TOGGLE_CONSENT_PRECEDENCE = gql`\n mutation TranscendCliToggleConsentPrecedence($input: ToggleConsentPrecedenceInput!) {\n toggleConsentPrecedence(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const UPDATE_CONSENT_MANAGER_THEME = gql`\n mutation TranscendCliUpdateConsentManagerTheme($input: UpdateConsentManagerThemeInput!) {\n updateConsentManagerTheme(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const UPDATE_CONSENT_EXPERIENCE = gql`\n mutation TranscendCliUpdateConsentExperience($input: UpdateExperienceInput!) {\n updateExperience(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const CREATE_CONSENT_EXPERIENCE = gql`\n mutation TranscendCliCreateConsentExperience($input: CreateExperienceInput!) {\n createExperience(input: $input) {\n clientMutationId\n }\n }\n`;\n\nexport const CREATE_CONSENT_PARTITION = gql`\n mutation TranscendCliCreateConsentPartition($input: CreateConsentPartitionInput!) {\n createConsentPartition(input: $input) {\n clientMutationId\n }\n }\n`;\n/* eslint-enable max-lines */\n","import { gql } from 'graphql-request';\n\nexport const CONSENT_MANAGER_ANALYTICS_DATA = gql`\n query TranscendCliConsentManagerAnalyticsData($input: AnalyticsInput!) {\n analyticsData(input: $input) {\n series {\n name\n points {\n key\n value\n }\n }\n }\n }\n`;\n","import { InitialViewState, BrowserLanguage, OnConsentExpiry } from '@transcend-io/airgap.js-types';\nimport {\n ConsentPrecedenceOption,\n UnknownRequestPolicy,\n TelemetryPartitionStrategy,\n RegionsOperator,\n IsoCountrySubdivisionCode,\n IsoCountryCode,\n BrowserTimeZone,\n SignedIabAgreementOption,\n} from '@transcend-io/privacy-types';\nimport { GraphQLClient } from 'graphql-request';\n\nimport {\n FETCH_CONSENT_MANAGER_ID,\n FETCH_CONSENT_MANAGER,\n EXPERIENCES,\n CONSENT_MANAGER_ANALYTICS_DATA,\n FETCH_CONSENT_MANAGER_THEME,\n} from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface ConsentManager {\n /** ID of consent manager */\n id: string;\n /** Production bundle URL */\n bundleURL: string;\n /** Test bundle URL */\n testBundleURL: string;\n /** Configuration of consent manager */\n configuration: {\n /** Domain list */\n domains: string[];\n /** Consent precedence of user vs signal */\n consentPrecedence: ConsentPrecedenceOption;\n /** Unknown request policy */\n unknownRequestPolicy: UnknownRequestPolicy;\n /** Unknown cookie policy */\n unknownCookiePolicy: UnknownRequestPolicy;\n /** Sync endpoint */\n syncEndpoint: string;\n /** Telemetry partitioning */\n telemetryPartitioning: TelemetryPartitionStrategy;\n /** Signed IAB agreement */\n signedIabAgreement: SignedIabAgreementOption;\n /** Sync groups */\n syncGroups: string;\n /** Partition parameter */\n partition: string;\n };\n /** When using a custom partition, this is the partition value */\n partition?: {\n /** Partition value */\n partition: string;\n };\n}\n\n/**\n * Fetch consent manager\n *\n * @param client - GraphQL client\n * @returns Consent manager ID in organization\n */\nexport async function fetchConsentManager(client: GraphQLClient): Promise<ConsentManager> {\n const {\n consentManager: { consentManager },\n } = await makeGraphQLRequest<{\n /** Consent manager query */\n consentManager: {\n /** Consent manager object */\n consentManager: ConsentManager;\n };\n }>(client, FETCH_CONSENT_MANAGER);\n return consentManager;\n}\n\n/**\n * Fetch consent manager ID\n *\n * @param client - GraphQL client\n * @param maxRequests - = Max number of requests to send\n * @returns Consent manager ID in organization\n */\nexport async function fetchConsentManagerId(\n client: GraphQLClient,\n maxRequests?: number,\n): Promise<string> {\n const {\n consentManager: { consentManager },\n } = await makeGraphQLRequest<{\n /** Consent manager query */\n consentManager: {\n /** Consent manager object */\n consentManager: {\n /** ID of bundle */\n id: string;\n };\n };\n }>(client, FETCH_CONSENT_MANAGER_ID, {}, {}, maxRequests);\n return consentManager.id;\n}\n\nconst PAGE_SIZE = 50;\n\nexport interface ConsentExperience {\n /** ID of experience */\n id: string;\n /** Name of experience */\n name: string;\n /** Experience display name */\n displayName?: string;\n /** Region that define this regional experience */\n regions: {\n /** Sub division */\n countrySubDivision?: IsoCountrySubdivisionCode;\n /** Country */\n country?: IsoCountryCode;\n }[];\n /** In vs not in operator */\n operator: RegionsOperator;\n /** Priority of experience */\n displayPriority: number;\n /** View state to prompt when auto prompting is enabled */\n viewState: InitialViewState;\n /** Consent expiry setting */\n onConsentExpiry: OnConsentExpiry;\n /** Consent expiry */\n consentExpiry: number;\n /** Purposes that can be opted out of in a particular experience */\n purposes: {\n /** Name of purpose */\n name: string;\n /** Purpose slug */\n trackingType: string;\n }[];\n /** Purposes that are opted out by default in a particular experience */\n optedOutPurposes: {\n /** Name of purpose */\n name: string;\n /** Purpose slug */\n trackingType: string;\n }[];\n /**\n * Browser languages that define this regional experience\n */\n browserLanguages: BrowserLanguage[];\n /** Browser time zones that define this regional experience */\n browserTimeZones: BrowserTimeZone[];\n}\n\n/**\n * Fetch consent manager experiences\n *\n * @param client - GraphQL client\n * @returns Consent manager experiences in the organization\n */\nexport async function fetchConsentManagerExperiences(\n client: GraphQLClient,\n): Promise<ConsentExperience[]> {\n const experiences: ConsentExperience[] = [];\n let offset = 0;\n\n // Fetch all experiences\n let shouldContinue = false;\n do {\n const {\n experiences: { nodes },\n } = await makeGraphQLRequest<{\n /** Consent experience */\n experiences: {\n /** List */\n nodes: ConsentExperience[];\n };\n }>(client, EXPERIENCES, {\n first: PAGE_SIZE,\n offset,\n });\n experiences.push(...nodes);\n offset += PAGE_SIZE;\n shouldContinue = nodes.length === PAGE_SIZE;\n } while (shouldContinue);\n\n return experiences.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/**\n * The allowed bin sizes for pulling consent metrics\n */\nexport enum ConsentManagerMetricBin {\n Hourly = '1h',\n Daily = '1d',\n}\n\nexport interface ConsentManagerMetric {\n /** Name of metric */\n name: string;\n /** The metrics */\n points: {\n /** Key of metric */\n key: string;\n /** Value of metric */\n value: string;\n }[];\n}\n\n/**\n * Fetch consent manager analytics data\n *\n * @param client - GraphQL client\n * @param input - Input for fetching data\n * @returns Consent manager purposes in the organization\n */\nexport async function fetchConsentManagerAnalyticsData(\n client: GraphQLClient,\n input: {\n /** Data source */\n dataSource:\n | 'PRIVACY_SIGNAL_TIMESERIES'\n | 'CONSENT_CHANGES_TIMESERIES'\n | 'CONSENT_SESSIONS_BY_REGIME';\n /** Start date, in ISO string format */\n startDate: string;\n /** End date, in ISO string format */\n endDate: string;\n /** Force refetching */\n forceRefetch?: boolean;\n /** Airgap bundle ID */\n airgapBundleId: string;\n /** Bin interval */\n binInterval: ConsentManagerMetricBin;\n /** Whether or not to smooth the time series */\n smoothTimeseries: false;\n },\n): Promise<ConsentManagerMetric[]> {\n const {\n analyticsData: { series },\n } = await makeGraphQLRequest<{\n /** Analytics data response */\n analyticsData: {\n /** Consent manager metrics */\n series: ConsentManagerMetric[];\n };\n }>(client, CONSENT_MANAGER_ANALYTICS_DATA, {\n input,\n });\n return series;\n}\n\nexport interface ConsentManagerTheme {\n /** Primary color */\n primaryColor: string;\n /** Font color */\n fontColor: string;\n /** Privacy policy URL */\n privacyPolicy?: string;\n /** Auto-prompt setting */\n prompt: number;\n}\n\n/**\n * Fetch consent manager theme\n *\n * @param client - GraphQL client\n * @param airgapBundleId - Airgap bundle ID to fetch for\n * @returns Consent manager ID in organization\n */\nexport async function fetchConsentManagerTheme(\n client: GraphQLClient,\n airgapBundleId: string,\n): Promise<ConsentManagerTheme> {\n const {\n consentManagerTheme: { theme },\n } = await makeGraphQLRequest<{\n /** Consent manager query */\n consentManagerTheme: {\n /** Consent manager object */\n theme: ConsentManagerTheme;\n };\n }>(client, FETCH_CONSENT_MANAGER_THEME, {\n airgapBundleId,\n });\n return theme;\n}\n"],"mappings":"4FAMA,MAAa,EAAc,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmCjB,EAAqB,CAAG;;;;;;;;;;EAYxB,EAAoB,CAAG;;;;;;;;;;;;;;;;;;EAoBvB,EAAoB,CAAG;;;;;;;;;;;;;;;;;;EAoBvB,EAA2B,CAAG;;;;;;;;;EAa9B,EAAa,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8ChB,EAAU,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2Cb,EAA2B,CAAG;;;;;;;;EAU9B,EAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;EA0B3B,EAA8B,CAAG;;;;;;;;;;;EAajC,EAAyB,CAAG;;;;;;;;EAU5B,EAAiC,CAAG;;;;;;EAQpC,EAAmC,CAAG;;;;;;;;;EAWtC,EAAyB,CAAG;;;;;;EAQ5B,EAAiC,CAAG;;;;;;EAQpC,EAAmC,CAAG;;;;;;EAQtC,EAAsB,CAAG;;;;;;EAQzB,EAAgC,CAAG;;;;;;EAQnC,EAA+B,CAAG;;;;;;EAQlC,EAAsC,CAAG;;;;;;;;EAUzC,EAA4B,CAAG;;;;;;EAQ/B,EAA+B,CAAG;;;;;;EAQlC,EAA4B,CAAG;;;;;;EAQ/B,EAA4B,CAAG;;;;;;EAQ/B,EAA2B,CAAG;;;;;;ECzW9B,EAAiC,CAAG;;;;;;;;;;;;EC6DjD,eAAsB,EAAoB,EAAgD,CACxF,GAAM,CACJ,eAAgB,CAAE,mBAChB,MAAM,EAMP,EAAQ,EAAsB,CACjC,OAAO,EAUT,eAAsB,EACpB,EACA,EACiB,CACjB,GAAM,CACJ,eAAgB,CAAE,mBAChB,MAAM,EASP,EAAQ,EAA0B,EAAE,CAAE,EAAE,CAAE,EAAY,CACzD,OAAO,EAAe,GAyDxB,eAAsB,EACpB,EAC8B,CAC9B,IAAM,EAAmC,EAAE,CACvC,EAAS,EAGT,EAAiB,GACrB,EAAG,CACD,GAAM,CACJ,YAAa,CAAE,UACb,MAAM,EAMP,EAAQ,EAAa,CACtB,MAAO,GACP,SACD,CAAC,CACF,EAAY,KAAK,GAAG,EAAM,CAC1B,GAAU,GACV,EAAiB,EAAM,SAAW,SAC3B,GAET,OAAO,EAAY,MAAM,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,KAAK,CAAC,CAMjE,IAAY,EAAL,SAAA,EAAA,OACL,GAAA,OAAA,KACA,EAAA,MAAA,WACD,CAqBD,eAAsB,EACpB,EACA,EAmBiC,CACjC,GAAM,CACJ,cAAe,CAAE,WACf,MAAM,EAMP,EAAQ,EAAgC,CACzC,QACD,CAAC,CACF,OAAO,EAqBT,eAAsB,EACpB,EACA,EAC8B,CAC9B,GAAM,CACJ,oBAAqB,CAAE,UACrB,MAAM,EAMP,EAAQ,EAA6B,CACtC,iBACD,CAAC,CACF,OAAO"}
@@ -0,0 +1,54 @@
1
+ import{t as e}from"./logger-B-LXIf3U.mjs";import{n as t}from"./bluebird-CUitXgsY.mjs";import{t as n}from"./makeGraphQLRequest-G078PsEL.mjs";import{difference as r,flatten as i,keyBy as a,uniq as o}from"lodash-es";import s from"colors";import{gql as c}from"graphql-request";const l=c`
2
+ query TranscendCliIdentifiers($first: Int!, $offset: Int!) {
3
+ identifiers(
4
+ first: $first
5
+ offset: $offset
6
+ useMaster: false
7
+ orderBy: [{ field: createdAt, direction: ASC }, { field: name, direction: ASC }]
8
+ ) {
9
+ nodes {
10
+ id
11
+ name
12
+ type
13
+ regex
14
+ selectOptions
15
+ privacyCenterVisibility
16
+ dataSubjects {
17
+ type
18
+ }
19
+ isRequiredInForm
20
+ placeholder
21
+ displayTitle {
22
+ defaultMessage
23
+ }
24
+ displayDescription {
25
+ defaultMessage
26
+ }
27
+ displayOrder
28
+ isUniqueOnPreferenceStore
29
+ }
30
+ }
31
+ }
32
+ `,u=c`
33
+ query TranscendCliNewIdentifierTypes {
34
+ newIdentifierTypes {
35
+ name
36
+ }
37
+ }
38
+ `,d=c`
39
+ mutation TranscendCliCreateIdentifier($input: IdentifierInput!) {
40
+ createIdentifier(input: $input) {
41
+ identifier {
42
+ id
43
+ name
44
+ }
45
+ }
46
+ }
47
+ `,f=c`
48
+ mutation TranscendCliUpdateIdentifier($input: UpdateIdentifierInput!) {
49
+ updateIdentifier(input: $input) {
50
+ clientMutationId
51
+ }
52
+ }
53
+ `;async function p(e){let t=[],r=0,i=!1;do{let{identifiers:{nodes:a}}=await n(e,l,{first:20,offset:r});t.push(...a),r+=20,i=a.length===20}while(i);return t.sort((e,t)=>e.name.localeCompare(t.name))}async function m({enrichers:c=[],"data-silos":l=[],identifiers:f=[]},m,h=!1){let g=await p(m),_=a(g,`name`),v=r(o([...i(c.map(e=>[e[`input-identifier`],...e[`output-identifiers`]])),...i(l.map(e=>e[`identity-keys`])),...f.map(({name:e})=>e)]).filter(e=>!!e),g.map(({name:e})=>e));if(v.length>0){e.info(s.magenta(`Creating ${v.length} new identifiers...`));let{newIdentifierTypes:r}=await n(m,u),i=r.map(({name:e})=>e);await t(v,async t=>{e.info(s.magenta(`Creating identifier ${t}...`));let{createIdentifier:r}=await n(m,d,{input:{name:t,type:i.includes(t)?t:`custom`,skipPublish:h}});e.info(s.green(`Created identifier ${t}!`)),_[t]=r.identifier})}return _}export{u as a,l as i,m as n,f as o,d as r,p as t};
54
+ //# sourceMappingURL=fetchIdentifiers-DjqjUnaw.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchIdentifiers-DjqjUnaw.mjs","names":[],"sources":["../src/lib/graphql/gqls/identifier.ts","../src/lib/graphql/fetchIdentifiers.ts"],"sourcesContent":["import { gql } from 'graphql-request';\n\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\nexport const IDENTIFIERS = gql`\n query TranscendCliIdentifiers($first: Int!, $offset: Int!) {\n identifiers(\n first: $first\n offset: $offset\n useMaster: false\n orderBy: [{ field: createdAt, direction: ASC }, { field: name, direction: ASC }]\n ) {\n nodes {\n id\n name\n type\n regex\n selectOptions\n privacyCenterVisibility\n dataSubjects {\n type\n }\n isRequiredInForm\n placeholder\n displayTitle {\n defaultMessage\n }\n displayDescription {\n defaultMessage\n }\n displayOrder\n isUniqueOnPreferenceStore\n }\n }\n }\n`;\n\nexport const NEW_IDENTIFIER_TYPES = gql`\n query TranscendCliNewIdentifierTypes {\n newIdentifierTypes {\n name\n }\n }\n`;\n\nexport const CREATE_IDENTIFIER = gql`\n mutation TranscendCliCreateIdentifier($input: IdentifierInput!) {\n createIdentifier(input: $input) {\n identifier {\n id\n name\n }\n }\n }\n`;\n\nexport const UPDATE_IDENTIFIER = gql`\n mutation TranscendCliUpdateIdentifier($input: UpdateIdentifierInput!) {\n updateIdentifier(input: $input) {\n clientMutationId\n }\n }\n`;\n","import { IdentifierType, RequestAction } from '@transcend-io/privacy-types';\nimport colors from 'colors';\nimport { GraphQLClient } from 'graphql-request';\nimport { keyBy, uniq, flatten, difference } from 'lodash-es';\n\nimport { TranscendInput } from '../../codecs.js';\nimport { logger } from '../../logger.js';\nimport { mapSeries } from '../bluebird.js';\nimport { CREATE_IDENTIFIER, IDENTIFIERS, NEW_IDENTIFIER_TYPES } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface Identifier {\n /** ID of identifier */\n id: string;\n /** Name of identifier */\n name: string;\n /** The type of identifier */\n type: IdentifierType;\n /** Regular expression to */\n regex: string;\n /** The set of options that the identifier */\n selectOptions: string[];\n /** Whether identifier is enabled on privacy center */\n privacyCenterVisibility: RequestAction[];\n /** Enabled data subjects that are exposed this identifier on the privacy center */\n dataSubjects: {\n /** type of data subjects */\n type: string;\n }[];\n /** Whether identifier is a required field in privacy center form */\n isRequiredInForm: boolean;\n /** Identifier placeholder text */\n placeholder: string;\n /** Display title for identifier */\n displayTitle: {\n /** Default message */\n defaultMessage: string;\n };\n /** Display description for identifier */\n displayDescription: {\n /** Default */\n defaultMessage: string;\n };\n /** Display order */\n displayOrder: number;\n /** does this identifier uniquely identify a consent record */\n isUniqueOnPreferenceStore: boolean;\n}\n\nconst PAGE_SIZE = 20;\n\n/**\n * Fetch all identifiers in the organization\n *\n * @param client - GraphQL client\n * @returns All identifiers in the organization\n */\nexport async function fetchAllIdentifiers(client: GraphQLClient): Promise<Identifier[]> {\n const identifiers: Identifier[] = [];\n let offset = 0;\n\n // Whether to continue looping\n let shouldContinue = false;\n do {\n const {\n identifiers: { nodes },\n } = await makeGraphQLRequest<{\n /** Identifiers */\n identifiers: {\n /** List */\n nodes: Identifier[];\n };\n }>(client, IDENTIFIERS, {\n first: PAGE_SIZE,\n offset,\n });\n identifiers.push(...nodes);\n offset += PAGE_SIZE;\n shouldContinue = nodes.length === PAGE_SIZE;\n } while (shouldContinue);\n\n return identifiers.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/**\n * Fetch all identifiers and if any are found in the config that are\n * missing, create those identifiers.\n *\n * @param input - Transcend input\n * @param client - GraphQL client\n * @param skipPublish - When true, skip publishing to privacy center\n * @returns A map from identifier name to Identifier\n */\nexport async function fetchIdentifiersAndCreateMissing(\n { enrichers = [], 'data-silos': dataSilos = [], identifiers = [] }: TranscendInput,\n client: GraphQLClient,\n skipPublish = false,\n): Promise<{ [k in string]: Identifier }> {\n // Grab all existing identifiers\n const allIdentifiers = await fetchAllIdentifiers(client);\n\n // Create a map\n const identifiersByName = keyBy(allIdentifiers, 'name');\n\n // Determine expected set of identifiers\n const expectedIdentifiers = uniq([\n ...flatten(\n enrichers.map((enricher) => [\n enricher['input-identifier'],\n ...enricher['output-identifiers'],\n ]),\n ),\n ...flatten(dataSilos.map((dataSilo) => dataSilo['identity-keys'])),\n ...identifiers.map(({ name }) => name),\n ]).filter((x) => !!x);\n const missingIdentifiers = difference(\n expectedIdentifiers,\n allIdentifiers.map(({ name }) => name),\n );\n\n // If there are missing identifiers, create new ones\n if (missingIdentifiers.length > 0) {\n logger.info(colors.magenta(`Creating ${missingIdentifiers.length} new identifiers...`));\n const { newIdentifierTypes } = await makeGraphQLRequest<{\n /** Query response */\n newIdentifierTypes: {\n /** Name of identifier type remaining */\n name: string;\n }[];\n }>(client, NEW_IDENTIFIER_TYPES);\n const nativeTypesRemaining = newIdentifierTypes.map(({ name }) => name);\n await mapSeries(missingIdentifiers, async (identifier) => {\n logger.info(colors.magenta(`Creating identifier ${identifier}...`));\n const { createIdentifier } = await makeGraphQLRequest<{\n /** createIdentifier Response */\n createIdentifier: {\n /** Created identifier */\n identifier: Identifier;\n };\n }>(client, CREATE_IDENTIFIER, {\n input: {\n name: identifier,\n type: nativeTypesRemaining.includes(identifier!) ? identifier : 'custom',\n skipPublish,\n },\n });\n logger.info(colors.green(`Created identifier ${identifier}!`));\n\n identifiersByName[identifier!] = createIdentifier.identifier;\n });\n }\n return identifiersByName;\n}\n"],"mappings":"iRAIA,MAAa,EAAc,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCjB,EAAuB,CAAG;;;;;;EAQ1B,EAAoB,CAAG;;;;;;;;;EAWvB,EAAoB,CAAG;;;;;;ECCpC,eAAsB,EAAoB,EAA8C,CACtF,IAAM,EAA4B,EAAE,CAChC,EAAS,EAGT,EAAiB,GACrB,EAAG,CACD,GAAM,CACJ,YAAa,CAAE,UACb,MAAM,EAMP,EAAQ,EAAa,CACtB,MAAO,GACP,SACD,CAAC,CACF,EAAY,KAAK,GAAG,EAAM,CAC1B,GAAU,GACV,EAAiB,EAAM,SAAW,SAC3B,GAET,OAAO,EAAY,MAAM,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,KAAK,CAAC,CAYjE,eAAsB,EACpB,CAAE,YAAY,EAAE,CAAE,aAAc,EAAY,EAAE,CAAE,cAAc,EAAE,EAChE,EACA,EAAc,GAC0B,CAExC,IAAM,EAAiB,MAAM,EAAoB,EAAO,CAGlD,EAAoB,EAAM,EAAgB,OAAO,CAajD,EAAqB,EAVC,EAAK,CAC/B,GAAG,EACD,EAAU,IAAK,GAAa,CAC1B,EAAS,oBACT,GAAG,EAAS,sBACb,CAAC,CACH,CACD,GAAG,EAAQ,EAAU,IAAK,GAAa,EAAS,iBAAiB,CAAC,CAClE,GAAG,EAAY,KAAK,CAAE,UAAW,EAAK,CACvC,CAAC,CAAC,OAAQ,GAAM,CAAC,CAAC,EAAE,CAGnB,EAAe,KAAK,CAAE,UAAW,EAAK,CACvC,CAGD,GAAI,EAAmB,OAAS,EAAG,CACjC,EAAO,KAAK,EAAO,QAAQ,YAAY,EAAmB,OAAO,qBAAqB,CAAC,CACvF,GAAM,CAAE,sBAAuB,MAAM,EAMlC,EAAQ,EAAqB,CAC1B,EAAuB,EAAmB,KAAK,CAAE,UAAW,EAAK,CACvE,MAAM,EAAU,EAAoB,KAAO,IAAe,CACxD,EAAO,KAAK,EAAO,QAAQ,uBAAuB,EAAW,KAAK,CAAC,CACnE,GAAM,CAAE,oBAAqB,MAAM,EAMhC,EAAQ,EAAmB,CAC5B,MAAO,CACL,KAAM,EACN,KAAM,EAAqB,SAAS,EAAY,CAAG,EAAa,SAChE,cACD,CACF,CAAC,CACF,EAAO,KAAK,EAAO,MAAM,sBAAsB,EAAW,GAAG,CAAC,CAE9D,EAAkB,GAAe,EAAiB,YAClD,CAEJ,OAAO"}
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./RequestDataSilo-_Iv44M9u.mjs";import{t}from"./makeGraphQLRequest-G078PsEL.mjs";async function n(n,{requestId:r,dataSiloId:i,requestStatuses:a,statuses:o}){let{requestDataSilos:{totalCount:s}}=await t(n,e,{first:1,offset:0,filterBy:{dataSiloId:i,requestId:r,status:o,requestStatus:a}});return s}async function r(n,{requestId:r,dataSiloId:i,requestStatuses:a,statuses:o,limit:s,onProgress:c}){let l=[],u=0,d=!1;do{let{requestDataSilos:{nodes:s}}=await t(n,e,{first:100,offset:u,filterBy:{dataSiloId:i,requestId:r,status:o,requestStatus:a}});l.push(...s),u+=100,d=s.length===100,c?.(s.length)}while(d&&(!s||u<s));return l}async function i(e,{requestId:t,dataSiloId:n}){let i=await r(e,{requestId:t,dataSiloId:n});if(i.length!==1)throw Error(`Failed to find RequestDataSilo with requestId:${t},dataSiloId:${n}`);return i[0]}export{r as n,n as r,i as t};
2
+ //# sourceMappingURL=fetchRequestDataSilo-CF6XOTQ-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchRequestDataSilo-CF6XOTQ-.mjs","names":[],"sources":["../src/lib/graphql/fetchRequestDataSilo.ts"],"sourcesContent":["import { RequestDataSiloStatus, RequestStatus } from '@transcend-io/privacy-types';\nimport { GraphQLClient } from 'graphql-request';\n\nimport { REQUEST_DATA_SILOS } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface RequestDataSilo {\n /** ID of RequestDataSilo */\n id: string;\n}\n\nexport interface RequestDataSiloFilters {\n /** ID of request to filter on */\n requestId?: string;\n /** Data silo ID */\n dataSiloId?: string;\n /**\n * The statuses to filter on\n */\n statuses?: RequestDataSiloStatus[];\n /** The request statuses to filter on */\n requestStatuses?: RequestStatus[];\n}\n\n/**\n * Fetch a count of request data silos\n *\n * @param client - GraphQL client\n * @param options - Filter options\n * @returns List of request identifiers\n */\nexport async function fetchRequestDataSilosCount(\n client: GraphQLClient,\n { requestId, dataSiloId, requestStatuses, statuses }: RequestDataSiloFilters,\n): Promise<number> {\n const {\n requestDataSilos: { totalCount },\n } = await makeGraphQLRequest<{\n /** Request Data Silos */\n requestDataSilos: {\n /** List */\n nodes: RequestDataSilo[];\n /** Total count */\n totalCount: number;\n };\n }>(client, REQUEST_DATA_SILOS, {\n first: 1,\n offset: 0,\n filterBy: {\n dataSiloId,\n requestId,\n status: statuses,\n requestStatus: requestStatuses,\n },\n });\n\n return totalCount;\n}\n\nconst PAGE_SIZE = 100;\n\n/**\n * Fetch all request data silos by some filter criteria\n *\n * @param client - GraphQL client\n * @param options - Filter options\n * @returns List of request identifiers\n */\nexport async function fetchRequestDataSilos(\n client: GraphQLClient,\n {\n requestId,\n dataSiloId,\n requestStatuses,\n statuses,\n limit,\n onProgress,\n }: {\n /** ID of request to filter on */\n requestId?: string;\n /** Data silo ID */\n dataSiloId?: string;\n /**\n * The statuses to filter on\n */\n statuses?: RequestDataSiloStatus[];\n /** The request statuses to filter on */\n requestStatuses?: RequestStatus[];\n /** Limit on number of requests */\n limit?: number;\n /** Handle progress updates */\n onProgress?: (numUpdated: number) => void;\n },\n): Promise<RequestDataSilo[]> {\n const requestDataSilos: RequestDataSilo[] = [];\n let offset = 0;\n\n // Try to fetch an DataFlow with the same title\n let shouldContinue = false;\n do {\n const {\n requestDataSilos: { nodes },\n } = await makeGraphQLRequest<{\n /** Request Data Silos */\n requestDataSilos: {\n /** List */\n nodes: RequestDataSilo[];\n /** Total count */\n totalCount: number;\n };\n }>(client, REQUEST_DATA_SILOS, {\n first: PAGE_SIZE,\n offset,\n filterBy: {\n dataSiloId,\n requestId,\n status: statuses,\n requestStatus: requestStatuses,\n },\n });\n requestDataSilos.push(...nodes);\n\n offset += PAGE_SIZE;\n shouldContinue = nodes.length === PAGE_SIZE;\n onProgress?.(nodes.length);\n } while (shouldContinue && (!limit || offset < limit));\n\n return requestDataSilos;\n}\n\n/**\n * Fetch all request identifiers for a particular request\n *\n * @param client - GraphQL client\n * @param options - Filter options\n * @returns List of request identifiers\n */\nexport async function fetchRequestDataSilo(\n client: GraphQLClient,\n {\n requestId,\n dataSiloId,\n }: {\n /** ID of request to filter on */\n requestId: string;\n /** Data silo ID */\n dataSiloId: string;\n },\n): Promise<RequestDataSilo> {\n const nodes = await fetchRequestDataSilos(client, {\n requestId,\n dataSiloId,\n });\n if (nodes.length !== 1) {\n throw new Error(\n `Failed to find RequestDataSilo with requestId:${requestId},dataSiloId:${dataSiloId}`,\n );\n }\n\n return nodes[0];\n}\n"],"mappings":"oGA+BA,eAAsB,EACpB,EACA,CAAE,YAAW,aAAY,kBAAiB,YACzB,CACjB,GAAM,CACJ,iBAAkB,CAAE,eAClB,MAAM,EAQP,EAAQ,EAAoB,CAC7B,MAAO,EACP,OAAQ,EACR,SAAU,CACR,aACA,YACA,OAAQ,EACR,cAAe,EAChB,CACF,CAAC,CAEF,OAAO,EAYT,eAAsB,EACpB,EACA,CACE,YACA,aACA,kBACA,WACA,QACA,cAiB0B,CAC5B,IAAM,EAAsC,EAAE,CAC1C,EAAS,EAGT,EAAiB,GACrB,EAAG,CACD,GAAM,CACJ,iBAAkB,CAAE,UAClB,MAAM,EAQP,EAAQ,EAAoB,CAC7B,MAAO,IACP,SACA,SAAU,CACR,aACA,YACA,OAAQ,EACR,cAAe,EAChB,CACF,CAAC,CACF,EAAiB,KAAK,GAAG,EAAM,CAE/B,GAAU,IACV,EAAiB,EAAM,SAAW,IAClC,IAAa,EAAM,OAAO,OACnB,IAAmB,CAAC,GAAS,EAAS,IAE/C,OAAO,EAUT,eAAsB,EACpB,EACA,CACE,YACA,cAOwB,CAC1B,IAAM,EAAQ,MAAM,EAAsB,EAAQ,CAChD,YACA,aACD,CAAC,CACF,GAAI,EAAM,SAAW,EACnB,MAAU,MACR,iDAAiD,EAAU,cAAc,IAC1E,CAGH,OAAO,EAAM"}
@@ -0,0 +1,33 @@
1
+ import{t as e}from"./makeGraphQLRequest-G078PsEL.mjs";import{gql as t}from"graphql-request";const n=t`
2
+ query TranscendCliRequestFiles($first: Int!, $offset: Int!, $filterBy: RequestFileFiltersInput!) {
3
+ requestFiles(
4
+ filterBy: $filterBy
5
+ first: $first
6
+ offset: $offset
7
+ orderBy: [{ field: createdAt, direction: ASC }, { field: id, direction: ASC }]
8
+ ) {
9
+ nodes {
10
+ remoteId
11
+ fileName
12
+ }
13
+ }
14
+ }
15
+ `,r=t`
16
+ query TranscendCliBulkRequestFiles(
17
+ $filterBy: BulkRequestFilesFiltersInput!
18
+ $first: Int!
19
+ $after: String
20
+ ) {
21
+ bulkRequestFiles(filterBy: $filterBy, first: $first, after: $after) {
22
+ nodes {
23
+ remoteId
24
+ fileName
25
+ }
26
+ pageInfo {
27
+ hasNextPage
28
+ endCursor
29
+ }
30
+ }
31
+ }
32
+ `;async function i(t,n,i){let a=[],o=null,s=!1;do{let{bulkRequestFiles:{nodes:c,pageInfo:l}}=await e(t,r,{filterBy:{...i},first:n,after:o??void 0});a.push(...c),s=l.hasNextPage,o=l.endCursor}while(s);return a.sort((e,t)=>e.remoteId.localeCompare(t.remoteId))}export{r as n,n as r,i as t};
33
+ //# sourceMappingURL=fetchRequestFilesForRequest-DrHGOdih.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchRequestFilesForRequest-DrHGOdih.mjs","names":[],"sources":["../src/lib/graphql/gqls/requestFile.ts","../src/lib/graphql/fetchRequestFilesForRequest.ts"],"sourcesContent":["import { gql } from 'graphql-request';\n\n// TODO: https://transcend.height.app/T-27909 - enable optimizations\n// isExportCsv: true\n// useMaster: false\nexport const REQUEST_FILES = gql`\n query TranscendCliRequestFiles($first: Int!, $offset: Int!, $filterBy: RequestFileFiltersInput!) {\n requestFiles(\n filterBy: $filterBy\n first: $first\n offset: $offset\n orderBy: [{ field: createdAt, direction: ASC }, { field: id, direction: ASC }]\n ) {\n nodes {\n remoteId\n fileName\n }\n }\n }\n`;\n\nexport const BULK_REQUEST_FILES = gql`\n query TranscendCliBulkRequestFiles(\n $filterBy: BulkRequestFilesFiltersInput!\n $first: Int!\n $after: String\n ) {\n bulkRequestFiles(filterBy: $filterBy, first: $first, after: $after) {\n nodes {\n remoteId\n fileName\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n`;\n","import { GraphQLClient } from 'graphql-request';\n\nimport { BULK_REQUEST_FILES } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface RequestFileCursor {\n /** The ID of the request file */\n id: string;\n /** The created at timestamp */\n createdAt: string;\n}\n\nexport interface RequestFile {\n /** The remote ID */\n remoteId: string;\n /** The file name */\n fileName: string;\n}\n\nexport interface RequestFileResponse {\n /** RequestFiles */\n bulkRequestFiles: {\n /** List */\n nodes: RequestFile[];\n /** The page info */\n pageInfo: {\n /** Whether there is a next page */\n hasNextPage: boolean;\n /** The end cursor */\n endCursor: string;\n };\n };\n}\n\n/**\n * Fetch all RequestFiles for a single request\n *\n * @param client - GraphQL client\n * @param pageSize - How many request files to fetch per API call\n * @param filterBy - Filter by\n * @returns All RequestFiles in the organization\n */\nexport async function fetchRequestFilesForRequest(\n client: GraphQLClient,\n /** How many request files to fetch per API call */\n pageSize: number,\n filterBy: {\n /** Filter by request IDs */\n requestIds: string[];\n /** Filter by data silo ID */\n dataSiloIds: string[];\n },\n): Promise<RequestFile[]> {\n const requestFiles: RequestFile[] = [];\n let cursor: string | null = null;\n\n // Whether to continue looping\n let shouldContinue = false;\n do {\n const response: RequestFileResponse = await makeGraphQLRequest<RequestFileResponse>(\n client,\n BULK_REQUEST_FILES,\n {\n filterBy: {\n ...filterBy,\n },\n first: pageSize,\n after: cursor ?? undefined,\n },\n );\n const {\n bulkRequestFiles: { nodes, pageInfo },\n } = response;\n requestFiles.push(...nodes);\n shouldContinue = pageInfo.hasNextPage;\n cursor = pageInfo.endCursor;\n } while (shouldContinue);\n\n return requestFiles.sort((a, b) => a.remoteId.localeCompare(b.remoteId));\n}\n"],"mappings":"4FAKA,MAAa,EAAgB,CAAG;;;;;;;;;;;;;;EAgBnB,EAAqB,CAAG;;;;;;;;;;;;;;;;;ECqBrC,eAAsB,EACpB,EAEA,EACA,EAMwB,CACxB,IAAM,EAA8B,EAAE,CAClC,EAAwB,KAGxB,EAAiB,GACrB,EAAG,CAYD,GAAM,CACJ,iBAAkB,CAAE,QAAO,aAZS,MAAM,EAC1C,EACA,EACA,CACE,SAAU,CACR,GAAG,EACJ,CACD,MAAO,EACP,MAAO,GAAU,IAAA,GAClB,CACF,CAID,EAAa,KAAK,GAAG,EAAM,CAC3B,EAAiB,EAAS,YAC1B,EAAS,EAAS,gBACX,GAET,OAAO,EAAa,MAAM,EAAG,IAAM,EAAE,SAAS,cAAc,EAAE,SAAS,CAAC"}
@@ -0,0 +1,33 @@
1
+ import{a as e}from"./constants-CeMiHaHx.mjs";import{t}from"./logger-B-LXIf3U.mjs";import{n}from"./bluebird-CUitXgsY.mjs";import{a as r,i,t as a}from"./fetchApiKeys-DkBco7W0.mjs";import{i as o,t as s}from"./makeGraphQLRequest-G078PsEL.mjs";import c from"colors";import{gql as l}from"graphql-request";const u=l`
2
+ mutation TranscendCliDetermineLoginMethod($email: String!) {
3
+ determineLoginMethod(input: { email: $email }) {
4
+ loginMethod {
5
+ email
6
+ sombraPublicKey
7
+ }
8
+ }
9
+ }
10
+ `,d=l`
11
+ mutation TranscendCliLogin($email: String!, $password: String!, $publicKey: String!) {
12
+ login(input: { email: $email, password: $password }, publicKey: $publicKey) {
13
+ user {
14
+ roles {
15
+ id
16
+ organization {
17
+ name
18
+ id
19
+ uri
20
+ parentOrganizationId
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }
26
+ `,f=l`
27
+ mutation TranscendCliAssumeRole($id: ID!, $publicKey: String!) {
28
+ assumeRole(id: $id, publicKey: $publicKey) {
29
+ clientMutationId
30
+ }
31
+ }
32
+ `;async function p(e,{email:t,password:n}){let{determineLoginMethod:{loginMethod:r}}=await s(e,u,{email:t}),i=await e.rawRequest(d,{email:t,password:n,publicKey:r.sombraPublicKey}),{login:{user:a}}=i.data,o=i.headers.get(`set-cookie`);if(!o||!o.includes(`laravel`))throw Error(`Failed to get login cookie in response`);return{roles:a.roles,loginCookie:o}}async function m(e,{email:t,roleId:n}){let{determineLoginMethod:{loginMethod:r}}=await s(e,u,{email:t,userId:n});await e.rawRequest(f,{id:n,publicKey:r.sombraPublicKey})}async function h(e,t){let{createApiKey:{apiKey:n}}=await s(e,i,{input:t});return n}async function g(e,t){await s(e,r,{id:t})}async function _({email:r,password:i,scopes:s,apiKeyTitle:l,parentOrganizationId:u,deleteExistingApiKey:d=!0,createNewApiKey:f=!0,transcendUrl:_=e}){let v=await o(_,{});t.info(c.magenta(`Logging in using email and password.`));let{roles:y,loginCookie:b}=await p(v,{email:r,password:i});t.info(c.green(`Successfully logged in and found ${y.length} role${y.length===1?``:`s`}!`));let x=u?y.filter(e=>e.organization.id===u||e.organization.parentOrganizationId===u):y;v.setHeaders({Cookie:b});let S=[],C=[];return t.info(c.magenta(`Generating API keys with title: ${l}, scopes: ${s.join(`,`)}.`)),await n(x,async e=>{try{await m(v,{roleId:e.id,email:r}),t.info(c.magenta(`Checking if API key already exists in organization "${e.organization.name}" with title: "${l}".`));let[n]=await a(v,[l]);if(n&&d)t.info(c.yellow(`Deleting existing API key in "${e.organization.name}" with title: "${l}".`)),await g(v,n.id),t.info(c.green(`Successfully deleted API key in "${e.organization.name}" with title: "${l}".`));else if(n)throw Error(`API key already exists with title: "${l}"`);if(f){t.info(c.magenta(`Creating API key in "${e.organization.name}" with title: "${l}".`));let{apiKey:n}=await h(v,{title:l,scopes:s});S.push({organizationName:e.organization.name,organizationId:e.organization.id,apiKey:n}),t.info(c.green(`Successfully created API key in "${e.organization.name}" with title: "${l}".`))}else S.push({organizationName:e.organization.name,organizationId:e.organization.id,apiKey:``})}catch(n){t.error(c.red(`Failed to create API key in organization "${e.organization.name}"! - ${n.message}`)),C.push({organizationName:e.organization.name,organizationId:e.organization.id,error:n.message})}}),t.info(c.green(`Successfully created ${S.length} API key${S.length===1?``:`s`}`)),C.length>0&&t.error(c.red(`Failed to create ${C.length} API key${C.length===1?``:`s`}!`)),{errors:C,apiKeys:S}}export{p as a,d as c,m as i,h as n,f as o,g as r,u as s,_ as t};
33
+ //# sourceMappingURL=generateCrossAccountApiKeys-F11uqpc5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateCrossAccountApiKeys-F11uqpc5.mjs","names":[],"sources":["../src/lib/graphql/gqls/auth.ts","../src/lib/graphql/loginUser.ts","../src/lib/graphql/manageApiKeys.ts","../src/lib/api-keys/generateCrossAccountApiKeys.ts"],"sourcesContent":["import { gql } from 'graphql-request';\n\nexport const DETERMINE_LOGIN_METHOD = gql`\n mutation TranscendCliDetermineLoginMethod($email: String!) {\n determineLoginMethod(input: { email: $email }) {\n loginMethod {\n email\n sombraPublicKey\n }\n }\n }\n`;\n\nexport const LOGIN = gql`\n mutation TranscendCliLogin($email: String!, $password: String!, $publicKey: String!) {\n login(input: { email: $email, password: $password }, publicKey: $publicKey) {\n user {\n roles {\n id\n organization {\n name\n id\n uri\n parentOrganizationId\n }\n }\n }\n }\n }\n`;\n\nexport const ASSUME_ROLE = gql`\n mutation TranscendCliAssumeRole($id: ID!, $publicKey: String!) {\n assumeRole(id: $id, publicKey: $publicKey) {\n clientMutationId\n }\n }\n`;\n","import { GraphQLClient } from 'graphql-request';\n\nimport { DETERMINE_LOGIN_METHOD, ASSUME_ROLE, LOGIN } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface OrganizationPreview {\n /** Name of organization */\n name: string;\n /** Id of organization */\n id: string;\n /** uri of organization */\n uri: string;\n /** ID of parent organization */\n parentOrganizationId?: string;\n}\n\nexport interface UserRole {\n /** ID of role */\n id: string;\n /** Related organization */\n organization: OrganizationPreview;\n}\n\n/**\n * Log in as a user\n *\n * @param client - GraphQL client\n * @param options - Email/password\n * @returns Cookie and roles\n */\nexport async function loginUser(\n client: GraphQLClient,\n {\n email,\n password,\n }: {\n /** Email of user */\n email: string;\n /** Password of user */\n password: string;\n },\n): Promise<{\n /** Cookie to be used to make subsequent requests */\n loginCookie: string;\n /** Roles of the user */\n roles: UserRole[];\n}> {\n const {\n determineLoginMethod: { loginMethod },\n } = await makeGraphQLRequest<{\n /** Determine login method */\n determineLoginMethod: {\n /** Login method info */\n loginMethod: {\n /** Email being logged in */\n email: string;\n /** Sombra public key */\n sombraPublicKey: string;\n };\n };\n }>(client, DETERMINE_LOGIN_METHOD, {\n email,\n });\n\n const res = await client.rawRequest<{\n /** Login */\n login: {\n /** User */\n user: {\n /** Roles of user */\n roles: UserRole[];\n };\n };\n }>(LOGIN, {\n email,\n password,\n publicKey: loginMethod.sombraPublicKey,\n });\n const {\n login: { user },\n } = res.data;\n\n // Get login cookie from response\n const loginCookie = res.headers.get('set-cookie');\n if (!loginCookie || !loginCookie.includes('laravel')) {\n throw new Error('Failed to get login cookie in response');\n }\n\n return {\n roles: user.roles,\n loginCookie,\n };\n}\n\n/**\n * Assume role for user into another organization\n *\n * @param client - GraphQL client\n * @param options - Email/password\n */\nexport async function assumeRole(\n client: GraphQLClient,\n {\n email,\n roleId,\n }: {\n /** Email of user */\n email: string;\n /** Role of user assuming into */\n roleId: string;\n },\n): Promise<void> {\n const {\n determineLoginMethod: { loginMethod },\n } = await makeGraphQLRequest<{\n /** Determine login method */\n determineLoginMethod: {\n /** Login method info */\n loginMethod: {\n /** Email being logged in */\n email: string;\n /** Sombra public key */\n sombraPublicKey: string;\n };\n };\n }>(client, DETERMINE_LOGIN_METHOD, {\n email,\n userId: roleId,\n });\n\n await client.rawRequest<{\n /** Assume role */\n assumeRole: {\n /** Mutation ID */\n clientMutationId: string;\n };\n }>(ASSUME_ROLE, {\n id: roleId,\n publicKey: loginMethod.sombraPublicKey,\n });\n}\n","import { ScopeName } from '@transcend-io/privacy-types';\nimport { GraphQLClient } from 'graphql-request';\n\nimport { CREATE_API_KEY, DELETE_API_KEY } from './gqls/index.js';\nimport { makeGraphQLRequest } from './makeGraphQLRequest.js';\n\nexport interface CreatedApiKey {\n /** ID of API key */\n id: string;\n /** Actual API key */\n apiKey: string;\n /** Title of the API key */\n title: string;\n}\n\n/**\n * Create an API key\n *\n * @param client - GraphQL client\n * @param input - Input\n * @returns The API key\n */\nexport async function createApiKey(\n client: GraphQLClient,\n input: {\n /** Title of API key */\n title: string;\n /** Scopes for API key */\n scopes: ScopeName[];\n },\n): Promise<CreatedApiKey> {\n const {\n createApiKey: { apiKey },\n } = await makeGraphQLRequest<{\n /** Create API key */\n createApiKey: {\n /** API key */\n apiKey: CreatedApiKey;\n };\n }>(client, CREATE_API_KEY, { input });\n\n return apiKey;\n}\n\n/**\n * Delete an API key\n *\n * @param client - GraphQL client\n * @param id - API key Id\n */\nexport async function deleteApiKey(client: GraphQLClient, id: string): Promise<void> {\n await makeGraphQLRequest(client, DELETE_API_KEY, { id });\n}\n","import { ScopeName } from '@transcend-io/privacy-types';\nimport colors from 'colors';\n\nimport { StoredApiKey } from '../../codecs.js';\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { mapSeries } from '../bluebird.js';\nimport {\n buildTranscendGraphQLClientGeneric,\n loginUser,\n createApiKey,\n fetchAllApiKeys,\n deleteApiKey,\n assumeRole,\n} from '../graphql/index.js';\n\nexport interface ApiKeyGenerateError {\n /** Name of instance */\n organizationName: string;\n /** Error */\n error: string;\n /** Organization ID API key is for */\n organizationId: string;\n}\n\n/**\n * Generate API keys across multiple transcend accounts\n *\n * @param options - Options\n * @returns Number of API keys created\n */\nexport async function generateCrossAccountApiKeys({\n email,\n password,\n scopes,\n apiKeyTitle,\n parentOrganizationId,\n deleteExistingApiKey = true,\n createNewApiKey = true,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** Email address of user generating API keys */\n email: string;\n /** Password of user generating API keys */\n password: string;\n /** Filter for organizations that match this parent organization ID */\n parentOrganizationId?: string;\n /** Title of the API create to create */\n apiKeyTitle: string;\n /** Title of the API create to create */\n scopes: ScopeName[];\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** When true delete existing API keys with that title, if set to false an API key exists with that title, an error is thrown */\n deleteExistingApiKey?: boolean;\n /** When true, generate new API keys, otherwise only will delete past API keys */\n createNewApiKey?: boolean;\n}): Promise<{\n /** Successfully generated */\n apiKeys: StoredApiKey[];\n /** Error results */\n errors: ApiKeyGenerateError[];\n}> {\n // Create GraphQL client\n const client = await buildTranscendGraphQLClientGeneric(transcendUrl, {});\n\n // Login the user\n logger.info(colors.magenta('Logging in using email and password.'));\n const { roles, loginCookie } = await loginUser(client, { email, password });\n logger.info(\n colors.green(\n `Successfully logged in and found ${roles.length} role${roles.length === 1 ? '' : 's'}!`,\n ),\n );\n\n // Filter down by parentOrganizationId\n const filteredRoles = parentOrganizationId\n ? roles.filter(\n (role) =>\n role.organization.id === parentOrganizationId ||\n role.organization.parentOrganizationId === parentOrganizationId,\n )\n : roles;\n\n // Save cookie to call route subsequent times\n client.setHeaders({\n Cookie: loginCookie,\n });\n\n // Save the resulting API keys\n const results: StoredApiKey[] = [];\n const errors: ApiKeyGenerateError[] = [];\n\n // Generate API keys\n logger.info(\n colors.magenta(`Generating API keys with title: ${apiKeyTitle}, scopes: ${scopes.join(',')}.`),\n );\n\n // Map over each role\n await mapSeries(filteredRoles, async (role) => {\n try {\n // Log into the other instance\n await assumeRole(client, { roleId: role.id, email });\n\n // Grab API keys with that title\n logger.info(\n colors.magenta(\n `Checking if API key already exists in organization \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n\n // Delete existing API key\n const [apiKeyWithTitle] = await fetchAllApiKeys(client, [apiKeyTitle]);\n if (apiKeyWithTitle && deleteExistingApiKey) {\n logger.info(\n colors.yellow(\n `Deleting existing API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n await deleteApiKey(client, apiKeyWithTitle.id);\n logger.info(\n colors.green(\n `Successfully deleted API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n } else if (apiKeyWithTitle) {\n // throw error if one exists but not configured to delete\n throw new Error(`API key already exists with title: \"${apiKeyTitle}\"`);\n }\n\n // Create the API key\n if (createNewApiKey) {\n logger.info(\n colors.magenta(\n `Creating API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n const { apiKey } = await createApiKey(client, {\n title: apiKeyTitle,\n scopes,\n });\n results.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n apiKey,\n });\n logger.info(\n colors.green(\n `Successfully created API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n } else {\n // Delete only\n results.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n apiKey: '',\n });\n }\n } catch (err) {\n logger.error(\n colors.red(\n `Failed to create API key in organization \"${role.organization.name}\"! - ${err.message}`,\n ),\n );\n errors.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n error: err.message,\n });\n }\n });\n logger.info(\n colors.green(\n `Successfully created ${results.length} API key${results.length === 1 ? '' : 's'}`,\n ),\n );\n\n if (errors.length > 0) {\n logger.error(\n colors.red(`Failed to create ${errors.length} API key${errors.length === 1 ? '' : 's'}!`),\n );\n }\n\n return { errors, apiKeys: results };\n}\n"],"mappings":"2SAEA,MAAa,EAAyB,CAAG;;;;;;;;;EAW5B,EAAQ,CAAG;;;;;;;;;;;;;;;;EAkBX,EAAc,CAAG;;;;;;ECD9B,eAAsB,EACpB,EACA,CACE,QACA,YAYD,CACD,GAAM,CACJ,qBAAsB,CAAE,gBACtB,MAAM,EAWP,EAAQ,EAAwB,CACjC,QACD,CAAC,CAEI,EAAM,MAAM,EAAO,WAStB,EAAO,CACR,QACA,WACA,UAAW,EAAY,gBACxB,CAAC,CACI,CACJ,MAAO,CAAE,SACP,EAAI,KAGF,EAAc,EAAI,QAAQ,IAAI,aAAa,CACjD,GAAI,CAAC,GAAe,CAAC,EAAY,SAAS,UAAU,CAClD,MAAU,MAAM,yCAAyC,CAG3D,MAAO,CACL,MAAO,EAAK,MACZ,cACD,CASH,eAAsB,EACpB,EACA,CACE,QACA,UAOa,CACf,GAAM,CACJ,qBAAsB,CAAE,gBACtB,MAAM,EAWP,EAAQ,EAAwB,CACjC,QACA,OAAQ,EACT,CAAC,CAEF,MAAM,EAAO,WAMV,EAAa,CACd,GAAI,EACJ,UAAW,EAAY,gBACxB,CAAC,CCrHJ,eAAsB,EACpB,EACA,EAMwB,CACxB,GAAM,CACJ,aAAc,CAAE,WACd,MAAM,EAMP,EAAQ,EAAgB,CAAE,QAAO,CAAC,CAErC,OAAO,EAST,eAAsB,EAAa,EAAuB,EAA2B,CACnF,MAAM,EAAmB,EAAQ,EAAgB,CAAE,KAAI,CAAC,CCpB1D,eAAsB,EAA4B,CAChD,QACA,WACA,SACA,cACA,uBACA,uBAAuB,GACvB,kBAAkB,GAClB,eAAe,GAuBd,CAED,IAAM,EAAS,MAAM,EAAmC,EAAc,EAAE,CAAC,CAGzE,EAAO,KAAK,EAAO,QAAQ,uCAAuC,CAAC,CACnE,GAAM,CAAE,QAAO,eAAgB,MAAM,EAAU,EAAQ,CAAE,QAAO,WAAU,CAAC,CAC3E,EAAO,KACL,EAAO,MACL,oCAAoC,EAAM,OAAO,OAAO,EAAM,SAAW,EAAI,GAAK,IAAI,GACvF,CACF,CAGD,IAAM,EAAgB,EAClB,EAAM,OACH,GACC,EAAK,aAAa,KAAO,GACzB,EAAK,aAAa,uBAAyB,EAC9C,CACD,EAGJ,EAAO,WAAW,CAChB,OAAQ,EACT,CAAC,CAGF,IAAM,EAA0B,EAAE,CAC5B,EAAgC,EAAE,CA6FxC,OA1FA,EAAO,KACL,EAAO,QAAQ,mCAAmC,EAAY,YAAY,EAAO,KAAK,IAAI,CAAC,GAAG,CAC/F,CAGD,MAAM,EAAU,EAAe,KAAO,IAAS,CAC7C,GAAI,CAEF,MAAM,EAAW,EAAQ,CAAE,OAAQ,EAAK,GAAI,QAAO,CAAC,CAGpD,EAAO,KACL,EAAO,QACL,uDAAuD,EAAK,aAAa,KAAK,iBAAiB,EAAY,IAC5G,CACF,CAGD,GAAM,CAAC,GAAmB,MAAM,EAAgB,EAAQ,CAAC,EAAY,CAAC,CACtE,GAAI,GAAmB,EACrB,EAAO,KACL,EAAO,OACL,iCAAiC,EAAK,aAAa,KAAK,iBAAiB,EAAY,IACtF,CACF,CACD,MAAM,EAAa,EAAQ,EAAgB,GAAG,CAC9C,EAAO,KACL,EAAO,MACL,oCAAoC,EAAK,aAAa,KAAK,iBAAiB,EAAY,IACzF,CACF,SACQ,EAET,MAAU,MAAM,uCAAuC,EAAY,GAAG,CAIxE,GAAI,EAAiB,CACnB,EAAO,KACL,EAAO,QACL,wBAAwB,EAAK,aAAa,KAAK,iBAAiB,EAAY,IAC7E,CACF,CACD,GAAM,CAAE,UAAW,MAAM,EAAa,EAAQ,CAC5C,MAAO,EACP,SACD,CAAC,CACF,EAAQ,KAAK,CACX,iBAAkB,EAAK,aAAa,KACpC,eAAgB,EAAK,aAAa,GAClC,SACD,CAAC,CACF,EAAO,KACL,EAAO,MACL,oCAAoC,EAAK,aAAa,KAAK,iBAAiB,EAAY,IACzF,CACF,MAGD,EAAQ,KAAK,CACX,iBAAkB,EAAK,aAAa,KACpC,eAAgB,EAAK,aAAa,GAClC,OAAQ,GACT,CAAC,OAEG,EAAK,CACZ,EAAO,MACL,EAAO,IACL,6CAA6C,EAAK,aAAa,KAAK,OAAO,EAAI,UAChF,CACF,CACD,EAAO,KAAK,CACV,iBAAkB,EAAK,aAAa,KACpC,eAAgB,EAAK,aAAa,GAClC,MAAO,EAAI,QACZ,CAAC,GAEJ,CACF,EAAO,KACL,EAAO,MACL,wBAAwB,EAAQ,OAAO,UAAU,EAAQ,SAAW,EAAI,GAAK,MAC9E,CACF,CAEG,EAAO,OAAS,GAClB,EAAO,MACL,EAAO,IAAI,oBAAoB,EAAO,OAAO,UAAU,EAAO,SAAW,EAAI,GAAK,IAAI,GAAG,CAC1F,CAGI,CAAE,SAAQ,QAAS,EAAS"}
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./pullManualEnrichmentIdentifiersToCsv-DA_4rIzW.mjs";import{t}from"./done-input-validation-DLR0-MJ7.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--Lmj1RHh2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impl--Lmj1RHh2.mjs","names":[],"sources":["../src/commands/request/preflight/pull-identifiers/impl.ts"],"sourcesContent":["import type { RequestAction } from '@transcend-io/privacy-types';\n\nimport type { LocalContext } from '../../../../context.js';\nimport { doneInputValidation } from '../../../../lib/cli/done-input-validation.js';\nimport { pullManualEnrichmentIdentifiersToCsv } from '../../../../lib/manual-enrichment/index.js';\n\nexport interface PullIdentifiersCommandFlags {\n auth: string;\n sombraAuth?: string;\n transcendUrl: string;\n file: string;\n actions?: RequestAction[];\n concurrency: number;\n}\n\nexport async function pullIdentifiers(\n this: LocalContext,\n { auth, transcendUrl, file, concurrency, actions, sombraAuth }: PullIdentifiersCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n await pullManualEnrichmentIdentifiersToCsv({\n file,\n transcendUrl,\n concurrency,\n requestActions: actions,\n auth,\n sombraAuth,\n });\n}\n"],"mappings":"4HAeA,eAAsB,EAEpB,CAAE,OAAM,eAAc,OAAM,cAAa,UAAS,cACnC,CACf,EAAoB,KAAK,QAAQ,KAAK,CAEtC,MAAM,EAAqC,CACzC,OACA,eACA,cACA,eAAgB,EAChB,OACA,aACD,CAAC"}