@transcend-io/cli 10.23.0 → 10.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -86
- package/dist/app-BJ1QlNA0.mjs +131 -0
- package/dist/app-BJ1QlNA0.mjs.map +1 -0
- package/dist/{approvePrivacyRequests-BMa5P15R.mjs → approvePrivacyRequests-C2EflZEJ.mjs} +2 -2
- package/dist/{approvePrivacyRequests-BMa5P15R.mjs.map → approvePrivacyRequests-C2EflZEJ.mjs.map} +1 -1
- package/dist/bin/bash-complete.mjs +1 -1
- package/dist/bin/cli.mjs +1 -1
- package/dist/bin/deprecated-command.mjs +1 -1
- package/dist/{buildExamples-C1d7A08r.mjs → buildExamples-DnV_tVZt.mjs} +2 -2
- package/dist/{buildExamples-C1d7A08r.mjs.map → buildExamples-DnV_tVZt.mjs.map} +1 -1
- package/dist/{buildXdiSyncEndpoint-CZmu6rbU.mjs → buildXdiSyncEndpoint-BYtXQ3Um.mjs} +2 -2
- package/dist/{buildXdiSyncEndpoint-CZmu6rbU.mjs.map → buildXdiSyncEndpoint-BYtXQ3Um.mjs.map} +1 -1
- package/dist/{bulkRestartRequests-Bt1ywbss.mjs → bulkRestartRequests-DROZyl0s.mjs} +2 -2
- package/dist/{bulkRestartRequests-Bt1ywbss.mjs.map → bulkRestartRequests-DROZyl0s.mjs.map} +1 -1
- package/dist/{bulkRetryEnrichers-B42uPqju.mjs → bulkRetryEnrichers-DHIt_YpU.mjs} +2 -2
- package/dist/{bulkRetryEnrichers-B42uPqju.mjs.map → bulkRetryEnrichers-DHIt_YpU.mjs.map} +1 -1
- package/dist/{cancelPrivacyRequests-BLWlXNF5.mjs → cancelPrivacyRequests-DUmxmMsv.mjs} +2 -2
- package/dist/{cancelPrivacyRequests-BLWlXNF5.mjs.map → cancelPrivacyRequests-DUmxmMsv.mjs.map} +1 -1
- package/dist/{codecs-DH-hZonL.mjs → codecs-Dch3sv5m.mjs} +1 -1
- package/dist/{codecs-DH-hZonL.mjs.map → codecs-Dch3sv5m.mjs.map} +1 -1
- package/dist/{collectCsvFilesOrExit-BQdnr-m2.mjs → collectCsvFilesOrExit-C8-Pr9Hr.mjs} +2 -2
- package/dist/{collectCsvFilesOrExit-BQdnr-m2.mjs.map → collectCsvFilesOrExit-C8-Pr9Hr.mjs.map} +1 -1
- package/dist/{collectParquetFilesOrExit-BJ-GciNy.mjs → collectParquetFilesOrExit-DyZISY9X.mjs} +2 -2
- package/dist/{collectParquetFilesOrExit-BJ-GciNy.mjs.map → collectParquetFilesOrExit-DyZISY9X.mjs.map} +1 -1
- package/dist/{command-DSEJjlWi.mjs → command-DsPVpqxX.mjs} +2 -2
- package/dist/{command-DSEJjlWi.mjs.map → command-DsPVpqxX.mjs.map} +1 -1
- package/dist/commands/admin/chunk-csv/worker.mjs +1 -1
- package/dist/commands/admin/parquet-to-csv/worker.mjs +1 -1
- package/dist/{consentManagersToBusinessEntities-l8jRfpYN.mjs → consentManagersToBusinessEntities-DGzryQ3W.mjs} +2 -2
- package/dist/{consentManagersToBusinessEntities-l8jRfpYN.mjs.map → consentManagersToBusinessEntities-DGzryQ3W.mjs.map} +1 -1
- package/dist/{constants-DXUo-hl3.mjs → constants-B44yUGaB.mjs} +2 -2
- package/dist/{constants-DXUo-hl3.mjs.map → constants-B44yUGaB.mjs.map} +1 -1
- package/dist/constants-CEPYyv4h.mjs +2 -0
- package/dist/constants-CEPYyv4h.mjs.map +1 -0
- package/dist/{constants-BhZIv-FP.mjs → constants-FbK2iR--.mjs} +1 -1
- package/dist/{constants-BhZIv-FP.mjs.map → constants-FbK2iR--.mjs.map} +1 -1
- package/dist/{constants-KYaYveEQ.mjs → constants-ykNINvFg.mjs} +1 -1
- package/dist/{constants-KYaYveEQ.mjs.map → constants-ykNINvFg.mjs.map} +1 -1
- package/dist/{context-CdSyuBlf.mjs → context-Br0NHHOk.mjs} +1 -1
- package/dist/{context-CdSyuBlf.mjs.map → context-Br0NHHOk.mjs.map} +1 -1
- package/dist/{createExtraKeyHandler-BdxKFYkG.mjs → createExtraKeyHandler-CJRmK224.mjs} +2 -2
- package/dist/{createExtraKeyHandler-BdxKFYkG.mjs.map → createExtraKeyHandler-CJRmK224.mjs.map} +1 -1
- package/dist/{dataFlowsToDataSilos-Blo6-adp.mjs → dataFlowsToDataSilos-DRGrUosf.mjs} +1 -1
- package/dist/{dataFlowsToDataSilos-Blo6-adp.mjs.map → dataFlowsToDataSilos-DRGrUosf.mjs.map} +1 -1
- package/dist/{done-input-validation-CvwjeRWr.mjs → done-input-validation-uqIgnJcw.mjs} +1 -1
- package/dist/{done-input-validation-CvwjeRWr.mjs.map → done-input-validation-uqIgnJcw.mjs.map} +1 -1
- package/dist/{downloadPrivacyRequestFiles-B_Hj7D8R.mjs → downloadPrivacyRequestFiles-BX85Pey2.mjs} +2 -2
- package/dist/{downloadPrivacyRequestFiles-B_Hj7D8R.mjs.map → downloadPrivacyRequestFiles-BX85Pey2.mjs.map} +1 -1
- package/dist/{extractClientError-CaF_Kj-f.mjs → extractClientError-X9wJVqGq.mjs} +1 -1
- package/dist/{extractClientError-CaF_Kj-f.mjs.map → extractClientError-X9wJVqGq.mjs.map} +1 -1
- package/dist/{fetchAllRequests-BCHpCeFo.mjs → fetchAllRequests-Bya6iwzL.mjs} +2 -2
- package/dist/{fetchAllRequests-BCHpCeFo.mjs.map → fetchAllRequests-Bya6iwzL.mjs.map} +1 -1
- package/dist/{formatPolicyBundleVersionSummary-DvxPXykZ.mjs → formatPolicyBundleVersionSummary-Bo7DYxoy.mjs} +1 -1
- package/dist/{formatPolicyBundleVersionSummary-DvxPXykZ.mjs.map → formatPolicyBundleVersionSummary-Bo7DYxoy.mjs.map} +1 -1
- package/dist/{fuzzyMatchColumns-Dym9eeQe.mjs → fuzzyMatchColumns-Ds0TqtJ5.mjs} +2 -2
- package/dist/{fuzzyMatchColumns-Dym9eeQe.mjs.map → fuzzyMatchColumns-Ds0TqtJ5.mjs.map} +1 -1
- package/dist/{generateCrossAccountApiKeys-C8ZFxpdg.mjs → generateCrossAccountApiKeys-DELmDKBr.mjs} +2 -2
- package/dist/{generateCrossAccountApiKeys-C8ZFxpdg.mjs.map → generateCrossAccountApiKeys-DELmDKBr.mjs.map} +1 -1
- package/dist/{impl-DkwbYk5g.mjs → impl-1y382i4y.mjs} +2 -2
- package/dist/{impl-DkwbYk5g.mjs.map → impl-1y382i4y.mjs.map} +1 -1
- package/dist/impl-3kG5jsbx.mjs +2 -0
- package/dist/{impl-CPSwCOH3.mjs.map → impl-3kG5jsbx.mjs.map} +1 -1
- package/dist/{impl-CoaEY_Xu.mjs → impl-6M90fU9c.mjs} +2 -2
- package/dist/{impl-CoaEY_Xu.mjs.map → impl-6M90fU9c.mjs.map} +1 -1
- package/dist/impl-B0AKcSoy.mjs +2 -0
- package/dist/impl-B0AKcSoy.mjs.map +1 -0
- package/dist/{impl-D1qyAnzc.mjs → impl-B2Um3cCa.mjs} +2 -2
- package/dist/{impl-D1qyAnzc.mjs.map → impl-B2Um3cCa.mjs.map} +1 -1
- package/dist/impl-BCEw1fsj.mjs +3 -0
- package/dist/impl-BCEw1fsj.mjs.map +1 -0
- package/dist/{impl-CcuqNyVQ2.mjs → impl-BHKNOzzl2.mjs} +2 -2
- package/dist/{impl-CcuqNyVQ2.mjs.map → impl-BHKNOzzl2.mjs.map} +1 -1
- package/dist/impl-BTp6QWcY.mjs +3 -0
- package/dist/impl-BTp6QWcY.mjs.map +1 -0
- package/dist/{impl-BMU2cg0K.mjs → impl-BWenu3QG.mjs} +2 -2
- package/dist/{impl-BMU2cg0K.mjs.map → impl-BWenu3QG.mjs.map} +1 -1
- package/dist/{impl-CoLm9Dhn.mjs → impl-BZ0aEWLg.mjs} +2 -2
- package/dist/{impl-CoLm9Dhn.mjs.map → impl-BZ0aEWLg.mjs.map} +1 -1
- package/dist/{impl-sEqlxROi2.mjs → impl-BZXxpO912.mjs} +2 -2
- package/dist/{impl-sEqlxROi2.mjs.map → impl-BZXxpO912.mjs.map} +1 -1
- package/dist/impl-B_4_7a-i.mjs +3 -0
- package/dist/impl-B_4_7a-i.mjs.map +1 -0
- package/dist/{impl-CqAhgJRN.mjs → impl-BbIP694E.mjs} +2 -2
- package/dist/{impl-CqAhgJRN.mjs.map → impl-BbIP694E.mjs.map} +1 -1
- package/dist/{impl-BeWMuac5.mjs → impl-BnJiEB-x.mjs} +2 -2
- package/dist/{impl-BeWMuac5.mjs.map → impl-BnJiEB-x.mjs.map} +1 -1
- package/dist/{impl-D-0T5fxa2.mjs → impl-Bxbu4It12.mjs} +2 -2
- package/dist/{impl-D-0T5fxa2.mjs.map → impl-Bxbu4It12.mjs.map} +1 -1
- package/dist/{impl-DPAGD55t.mjs → impl-BzyN0wbS2.mjs} +2 -2
- package/dist/impl-BzyN0wbS2.mjs.map +1 -0
- package/dist/impl-C5RWQxAV.mjs +3 -0
- package/dist/{impl-BU5epQoJ.mjs.map → impl-C5RWQxAV.mjs.map} +1 -1
- package/dist/{impl-BqBydC_y.mjs → impl-C69Nh_YS.mjs} +2 -2
- package/dist/{impl-BqBydC_y.mjs.map → impl-C69Nh_YS.mjs.map} +1 -1
- package/dist/impl-C7Xp0Txd.mjs +3 -0
- package/dist/impl-C7Xp0Txd.mjs.map +1 -0
- package/dist/impl-CEkTnggY2.mjs +2 -0
- package/dist/impl-CEkTnggY2.mjs.map +1 -0
- package/dist/{impl-ozhL5VUB2.mjs → impl-CLhItW5v2.mjs} +2 -2
- package/dist/{impl-ozhL5VUB2.mjs.map → impl-CLhItW5v2.mjs.map} +1 -1
- package/dist/{impl-MJ89a6cJ.mjs → impl-CdZ-nr1b.mjs} +2 -2
- package/dist/{impl-MJ89a6cJ.mjs.map → impl-CdZ-nr1b.mjs.map} +1 -1
- package/dist/{impl-X-lj6p6X.mjs → impl-Ce4Ua3nx.mjs} +3 -3
- package/dist/{impl-X-lj6p6X.mjs.map → impl-Ce4Ua3nx.mjs.map} +1 -1
- package/dist/{impl-D7ke0Gwy2.mjs → impl-ChO9Br2_2.mjs} +2 -2
- package/dist/{impl-D7ke0Gwy2.mjs.map → impl-ChO9Br2_2.mjs.map} +1 -1
- package/dist/{impl-DOQ5bwXl.mjs → impl-CiA-v1ol.mjs} +2 -2
- package/dist/{impl-DOQ5bwXl.mjs.map → impl-CiA-v1ol.mjs.map} +1 -1
- package/dist/impl-CjsLPYCP2.mjs +2 -0
- package/dist/impl-CjsLPYCP2.mjs.map +1 -0
- package/dist/{impl-DKzkdLQN.mjs → impl-CpGmNKVh.mjs} +2 -2
- package/dist/{impl-DKzkdLQN.mjs.map → impl-CpGmNKVh.mjs.map} +1 -1
- package/dist/{impl-D1y8T-ku2.mjs → impl-CsFbPjie2.mjs} +2 -2
- package/dist/{impl-D1y8T-ku2.mjs.map → impl-CsFbPjie2.mjs.map} +1 -1
- package/dist/{impl-Dt0HArIu.mjs → impl-CuAUD_Ij2.mjs} +2 -2
- package/dist/impl-CuAUD_Ij2.mjs.map +1 -0
- package/dist/impl-CwJx90K82.mjs +2 -0
- package/dist/impl-CwJx90K82.mjs.map +1 -0
- package/dist/{impl-mDm2_MJM.mjs → impl-D0rQ-_u_.mjs} +2 -2
- package/dist/{impl-mDm2_MJM.mjs.map → impl-D0rQ-_u_.mjs.map} +1 -1
- package/dist/impl-D6rMK5Us.mjs +2 -0
- package/dist/{impl-CwBLpuAJ.mjs.map → impl-D6rMK5Us.mjs.map} +1 -1
- package/dist/{impl-D-kVJk0V.mjs → impl-DF8-QsO52.mjs} +2 -2
- package/dist/impl-DF8-QsO52.mjs.map +1 -0
- package/dist/impl-DGQW5mVR.mjs +2 -0
- package/dist/impl-DGQW5mVR.mjs.map +1 -0
- package/dist/{impl-cIT5ehpg2.mjs → impl-DJFPeUq32.mjs} +2 -2
- package/dist/{impl-cIT5ehpg2.mjs.map → impl-DJFPeUq32.mjs.map} +1 -1
- package/dist/impl-DLNk5Voe.mjs +4 -0
- package/dist/{impl-Qkau85p_.mjs.map → impl-DLNk5Voe.mjs.map} +1 -1
- package/dist/{impl-BAcwgZfx.mjs → impl-DMtn2boK.mjs} +2 -2
- package/dist/{impl-BAcwgZfx.mjs.map → impl-DMtn2boK.mjs.map} +1 -1
- package/dist/{impl-DbW8OPcD.mjs → impl-DQ-kymSs.mjs} +2 -2
- package/dist/{impl-DbW8OPcD.mjs.map → impl-DQ-kymSs.mjs.map} +1 -1
- package/dist/{impl-CXXgArMZ.mjs → impl-D_Zke9vp.mjs} +2 -2
- package/dist/{impl-CXXgArMZ.mjs.map → impl-D_Zke9vp.mjs.map} +1 -1
- package/dist/{impl-qqLyjAc_.mjs → impl-DvrO6Zrd.mjs} +2 -2
- package/dist/{impl-qqLyjAc_.mjs.map → impl-DvrO6Zrd.mjs.map} +1 -1
- package/dist/{impl-BaeIbfQe2.mjs → impl-E0CjQexl2.mjs} +2 -2
- package/dist/{impl-BaeIbfQe2.mjs.map → impl-E0CjQexl2.mjs.map} +1 -1
- package/dist/{impl-BFCZDhHg.mjs → impl-EmiQDBEx2.mjs} +2 -2
- package/dist/impl-EmiQDBEx2.mjs.map +1 -0
- package/dist/{impl-BOCQpFcO.mjs → impl-IT4hoGkx.mjs} +2 -2
- package/dist/{impl-BOCQpFcO.mjs.map → impl-IT4hoGkx.mjs.map} +1 -1
- package/dist/{impl-DQGV2G5v.mjs → impl-NUMkBg7d.mjs} +2 -2
- package/dist/{impl-DQGV2G5v.mjs.map → impl-NUMkBg7d.mjs.map} +1 -1
- package/dist/{impl-C-bO3-ZT2.mjs → impl-ToUQkHVL2.mjs} +2 -2
- package/dist/{impl-C-bO3-ZT2.mjs.map → impl-ToUQkHVL2.mjs.map} +1 -1
- package/dist/impl-WHaoeim8.mjs +2 -0
- package/dist/{impl-DgUf3gA3.mjs.map → impl-WHaoeim8.mjs.map} +1 -1
- package/dist/{impl-Bq3ZIpcG.mjs → impl-Zjvt9J28.mjs} +2 -2
- package/dist/{impl-Bq3ZIpcG.mjs.map → impl-Zjvt9J28.mjs.map} +1 -1
- package/dist/{impl-g_xHoYv8.mjs → impl-_HlLHVRO.mjs} +2 -2
- package/dist/{impl-g_xHoYv8.mjs.map → impl-_HlLHVRO.mjs.map} +1 -1
- package/dist/{impl-BoHg4UN1.mjs → impl-cMFtIJUY2.mjs} +2 -2
- package/dist/impl-cMFtIJUY2.mjs.map +1 -0
- package/dist/impl-fiK_rZ7c.mjs +2 -0
- package/dist/{impl-C0n31a_O.mjs.map → impl-fiK_rZ7c.mjs.map} +1 -1
- package/dist/{impl-BHisOrKX.mjs → impl-rKM9h7Vg.mjs} +2 -2
- package/dist/{impl-BHisOrKX.mjs.map → impl-rKM9h7Vg.mjs.map} +1 -1
- package/dist/{impl-BFZWp3UU2.mjs → impl-x_rM8yTw.mjs} +2 -2
- package/dist/impl-x_rM8yTw.mjs.map +1 -0
- package/dist/{impl-C515J-j7.mjs → impl-z5dBnPm5.mjs} +3 -3
- package/dist/{impl-C515J-j7.mjs.map → impl-z5dBnPm5.mjs.map} +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/{inquirer-CXl1YWCs.mjs → inquirer-AEchly0b.mjs} +2 -2
- package/dist/{inquirer-CXl1YWCs.mjs.map → inquirer-AEchly0b.mjs.map} +1 -1
- package/dist/{listFiles-B1GqyM33.mjs → listFiles-BPx3iDV6.mjs} +1 -1
- package/dist/{listFiles-B1GqyM33.mjs.map → listFiles-BPx3iDV6.mjs.map} +1 -1
- package/dist/{logger-B-LXIf3U.mjs → logger-Ckep4QXn.mjs} +1 -1
- package/dist/{logger-B-LXIf3U.mjs.map → logger-Ckep4QXn.mjs.map} +1 -1
- package/dist/{markRequestDataSiloIdsCompleted-CB_yZAXh.mjs → markRequestDataSiloIdsCompleted-zFRxJN8D.mjs} +2 -2
- package/dist/{markRequestDataSiloIdsCompleted-CB_yZAXh.mjs.map → markRequestDataSiloIdsCompleted-zFRxJN8D.mjs.map} +1 -1
- package/dist/{markSilentPrivacyRequests-cfNU6f9-.mjs → markSilentPrivacyRequests-t65ShOrn.mjs} +2 -2
- package/dist/{markSilentPrivacyRequests-cfNU6f9-.mjs.map → markSilentPrivacyRequests-t65ShOrn.mjs.map} +1 -1
- package/dist/{notifyPrivacyRequestsAdditionalTime-DYWo4N8w.mjs → notifyPrivacyRequestsAdditionalTime-C7v7zo8q.mjs} +2 -2
- package/dist/{notifyPrivacyRequestsAdditionalTime-DYWo4N8w.mjs.map → notifyPrivacyRequestsAdditionalTime-C7v7zo8q.mjs.map} +1 -1
- package/dist/{parquetToCsvOneFile-DuyOOzqQ.mjs → parquetToCsvOneFile-13GirFzy.mjs} +2 -2
- package/dist/{parquetToCsvOneFile-DuyOOzqQ.mjs.map → parquetToCsvOneFile-13GirFzy.mjs.map} +1 -1
- package/dist/{parseAttributesFromString-ByzY22WY.mjs → parseAttributesFromString-CYcxsS3n.mjs} +2 -2
- package/dist/{parseAttributesFromString-ByzY22WY.mjs.map → parseAttributesFromString-CYcxsS3n.mjs.map} +1 -1
- package/dist/{parseVariablesFromString-BH2VIMis.mjs → parseVariablesFromString-RM3zV9Av.mjs} +2 -2
- package/dist/{parseVariablesFromString-BH2VIMis.mjs.map → parseVariablesFromString-RM3zV9Av.mjs.map} +1 -1
- package/dist/policyEngineCliError-BnBghLd1.mjs +3 -0
- package/dist/policyEngineCliError-BnBghLd1.mjs.map +1 -0
- package/dist/printResult-oXnpZu_9.mjs +33 -0
- package/dist/printResult-oXnpZu_9.mjs.map +1 -0
- package/dist/{pullAllDatapoints-D8mTXHun.mjs → pullAllDatapoints-Bvv9KRR5.mjs} +2 -2
- package/dist/{pullAllDatapoints-D8mTXHun.mjs.map → pullAllDatapoints-Bvv9KRR5.mjs.map} +1 -1
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-Czdfe35L.mjs → pullChunkedCustomSiloOutstandingIdentifiers-io0k95RW.mjs} +2 -2
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-Czdfe35L.mjs.map → pullChunkedCustomSiloOutstandingIdentifiers-io0k95RW.mjs.map} +1 -1
- package/dist/{pullConsentManagerMetrics-Cma2auCK.mjs → pullConsentManagerMetrics-CR4WwUt6.mjs} +2 -2
- package/dist/{pullConsentManagerMetrics-Cma2auCK.mjs.map → pullConsentManagerMetrics-CR4WwUt6.mjs.map} +1 -1
- package/dist/{pullManualEnrichmentIdentifiersToCsv-MCAxey_B.mjs → pullManualEnrichmentIdentifiersToCsv-CzhDjPw2.mjs} +2 -2
- package/dist/{pullManualEnrichmentIdentifiersToCsv-MCAxey_B.mjs.map → pullManualEnrichmentIdentifiersToCsv-CzhDjPw2.mjs.map} +1 -1
- package/dist/{pullTranscendConfiguration-BQCO6G7Z.mjs → pullTranscendConfiguration-C2LAOKG4.mjs} +2 -2
- package/dist/{pullTranscendConfiguration-BQCO6G7Z.mjs.map → pullTranscendConfiguration-C2LAOKG4.mjs.map} +1 -1
- package/dist/{pullUnstructuredSubDataPointRecommendations-DkQMoo7S.mjs → pullUnstructuredSubDataPointRecommendations-B9xIDPf2.mjs} +2 -2
- package/dist/{pullUnstructuredSubDataPointRecommendations-DkQMoo7S.mjs.map → pullUnstructuredSubDataPointRecommendations-B9xIDPf2.mjs.map} +1 -1
- package/dist/{pushCronIdentifiersFromCsv-Bp93Ba9h.mjs → pushCronIdentifiersFromCsv-CehtFgXS.mjs} +2 -2
- package/dist/{pushCronIdentifiersFromCsv-Bp93Ba9h.mjs.map → pushCronIdentifiersFromCsv-CehtFgXS.mjs.map} +1 -1
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-n1WyKiBi.mjs → pushManualEnrichmentIdentifiersFromCsv-CAl_kfHY.mjs} +2 -2
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-n1WyKiBi.mjs.map → pushManualEnrichmentIdentifiersFromCsv-CAl_kfHY.mjs.map} +1 -1
- package/dist/{readCsv-D1e7WRTc.mjs → readCsv-C84Jhrzx.mjs} +1 -1
- package/dist/{readCsv-D1e7WRTc.mjs.map → readCsv-C84Jhrzx.mjs.map} +1 -1
- package/dist/{readTranscendYaml-CVbI1N8S.mjs → readTranscendYaml-dI3G3Og9.mjs} +2 -2
- package/dist/{readTranscendYaml-CVbI1N8S.mjs.map → readTranscendYaml-dI3G3Og9.mjs.map} +1 -1
- package/dist/{removeUnverifiedRequestIdentifiers-CllBM6yg.mjs → removeUnverifiedRequestIdentifiers-CApHXROq.mjs} +2 -2
- package/dist/{removeUnverifiedRequestIdentifiers-CllBM6yg.mjs.map → removeUnverifiedRequestIdentifiers-CApHXROq.mjs.map} +1 -1
- package/dist/{renderTable-BgjVr6ch.mjs → renderTable-DKXvortp.mjs} +1 -1
- package/dist/{renderTable-BgjVr6ch.mjs.map → renderTable-DKXvortp.mjs.map} +1 -1
- package/dist/{request-C4gYxn1p.mjs → request-BIplTb3L.mjs} +1 -1
- package/dist/{request-C4gYxn1p.mjs.map → request-BIplTb3L.mjs.map} +1 -1
- package/dist/resolveBundleIdByName-By5Vl8Iz.mjs +2 -0
- package/dist/resolveBundleIdByName-By5Vl8Iz.mjs.map +1 -0
- package/dist/resolvePolicyBundleVersion-DO7IvEwb.mjs +2 -0
- package/dist/resolvePolicyBundleVersion-DO7IvEwb.mjs.map +1 -0
- package/dist/{retryRequestDataSilos-Bmh5RtDW.mjs → retryRequestDataSilos-Tou-97EC.mjs} +2 -2
- package/dist/{retryRequestDataSilos-Bmh5RtDW.mjs.map → retryRequestDataSilos-Tou-97EC.mjs.map} +1 -1
- package/dist/{runOpa-DGUkXzFZ.mjs → runOpa-D511z37u.mjs} +2 -2
- package/dist/{runOpa-DGUkXzFZ.mjs.map → runOpa-D511z37u.mjs.map} +1 -1
- package/dist/{skipPreflightJobs-5PcntUk7.mjs → skipPreflightJobs-TL4bpgJ5.mjs} +2 -2
- package/dist/{skipPreflightJobs-5PcntUk7.mjs.map → skipPreflightJobs-TL4bpgJ5.mjs.map} +1 -1
- package/dist/{skipRequestDataSilos-GA77Dtwe.mjs → skipRequestDataSilos-D4DQNs2F.mjs} +2 -2
- package/dist/{skipRequestDataSilos-GA77Dtwe.mjs.map → skipRequestDataSilos-D4DQNs2F.mjs.map} +1 -1
- package/dist/{streamPrivacyRequestsToCsv-DgvBRjF-.mjs → streamPrivacyRequestsToCsv-BW7LayDe.mjs} +2 -2
- package/dist/{streamPrivacyRequestsToCsv-DgvBRjF-.mjs.map → streamPrivacyRequestsToCsv-BW7LayDe.mjs.map} +1 -1
- package/dist/{syncCodePackages-CwPtA473.mjs → syncCodePackages-Dhm5jI6B.mjs} +2 -2
- package/dist/{syncCodePackages-CwPtA473.mjs.map → syncCodePackages-Dhm5jI6B.mjs.map} +1 -1
- package/dist/{updateConsentManagerVersionToLatest-Db_3rBVb.mjs → updateConsentManagerVersionToLatest-D22lm-RZ.mjs} +2 -2
- package/dist/{updateConsentManagerVersionToLatest-Db_3rBVb.mjs.map → updateConsentManagerVersionToLatest-D22lm-RZ.mjs.map} +1 -1
- package/dist/{uploadConsents-DYRO1JJQ.mjs → uploadConsents-7V2GfdKQ.mjs} +2 -2
- package/dist/{uploadConsents-DYRO1JJQ.mjs.map → uploadConsents-7V2GfdKQ.mjs.map} +1 -1
- package/dist/{uploadCookiesFromCsv-D-b7vR50.mjs → uploadCookiesFromCsv-AyQGnKOP.mjs} +2 -2
- package/dist/{uploadCookiesFromCsv-D-b7vR50.mjs.map → uploadCookiesFromCsv-AyQGnKOP.mjs.map} +1 -1
- package/dist/{uploadDataFlowsFromCsv-DSuBhPT4.mjs → uploadDataFlowsFromCsv-4Uw_-6pw.mjs} +2 -2
- package/dist/{uploadDataFlowsFromCsv-DSuBhPT4.mjs.map → uploadDataFlowsFromCsv-4Uw_-6pw.mjs.map} +1 -1
- package/dist/{uploadPrivacyRequestsFromCsv-BcrzcKIL.mjs → uploadPrivacyRequestsFromCsv-DuDL3uOz.mjs} +2 -2
- package/dist/{uploadPrivacyRequestsFromCsv-BcrzcKIL.mjs.map → uploadPrivacyRequestsFromCsv-DuDL3uOz.mjs.map} +1 -1
- package/dist/{validateTranscendAuth-Bxc1ETtl.mjs → validateTranscendAuth-DhzCBA3F.mjs} +2 -2
- package/dist/{validateTranscendAuth-Bxc1ETtl.mjs.map → validateTranscendAuth-DhzCBA3F.mjs.map} +1 -1
- package/dist/{writeCsv-DDKM_rAU.mjs → writeCsv-BMVkiMHM.mjs} +1 -1
- package/dist/{writeCsv-DDKM_rAU.mjs.map → writeCsv-BMVkiMHM.mjs.map} +1 -1
- package/package.json +2 -2
- package/dist/app-C9JuEKbr.mjs +0 -131
- package/dist/app-C9JuEKbr.mjs.map +0 -1
- package/dist/constants-CgI8_Rfc.mjs +0 -2
- package/dist/constants-CgI8_Rfc.mjs.map +0 -1
- package/dist/formatPolicyEngineRequestError-Dn_VYIIj.mjs +0 -2
- package/dist/formatPolicyEngineRequestError-Dn_VYIIj.mjs.map +0 -1
- package/dist/impl-BFCZDhHg.mjs.map +0 -1
- package/dist/impl-BFZWp3UU2.mjs.map +0 -1
- package/dist/impl-BMteSe3O.mjs +0 -3
- package/dist/impl-BMteSe3O.mjs.map +0 -1
- package/dist/impl-BU5epQoJ.mjs +0 -3
- package/dist/impl-BoHg4UN1.mjs.map +0 -1
- package/dist/impl-C0n31a_O.mjs +0 -2
- package/dist/impl-C2ZIXwmT.mjs +0 -2
- package/dist/impl-C2ZIXwmT.mjs.map +0 -1
- package/dist/impl-C930divP.mjs +0 -2
- package/dist/impl-C930divP.mjs.map +0 -1
- package/dist/impl-CEQNDwPb.mjs +0 -2
- package/dist/impl-CEQNDwPb.mjs.map +0 -1
- package/dist/impl-CPSwCOH3.mjs +0 -2
- package/dist/impl-CwBLpuAJ.mjs +0 -2
- package/dist/impl-D-kVJk0V.mjs.map +0 -1
- package/dist/impl-DFfc5HBk.mjs +0 -3
- package/dist/impl-DFfc5HBk.mjs.map +0 -1
- package/dist/impl-DPAGD55t.mjs.map +0 -1
- package/dist/impl-DfUBAl_6.mjs +0 -2
- package/dist/impl-DfUBAl_6.mjs.map +0 -1
- package/dist/impl-DgUf3gA3.mjs +0 -2
- package/dist/impl-Dt0HArIu.mjs.map +0 -1
- package/dist/impl-DxkQuCp8.mjs +0 -2
- package/dist/impl-DxkQuCp8.mjs.map +0 -1
- package/dist/impl-JU14ujB0.mjs +0 -3
- package/dist/impl-JU14ujB0.mjs.map +0 -1
- package/dist/impl-Qkau85p_.mjs +0 -4
- package/dist/impl-ouNg4TVN.mjs +0 -2
- package/dist/impl-ouNg4TVN.mjs.map +0 -1
- package/dist/printResult-DdSpAx6T.mjs +0 -2
- package/dist/printResult-DdSpAx6T.mjs.map +0 -1
- package/dist/resolveBundleIdByName-C-M1UT8E.mjs +0 -2
- package/dist/resolveBundleIdByName-C-M1UT8E.mjs.map +0 -1
- package/dist/resolvePolicyBundleVersion-HwUipJxP.mjs +0 -2
- package/dist/resolvePolicyBundleVersion-HwUipJxP.mjs.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./constants-
|
|
2
|
-
//# sourceMappingURL=bulkRestartRequests-
|
|
1
|
+
import{a as e}from"./constants-CEPYyv4h.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{s as n,u as r}from"./constants-ykNINvFg.mjs";import{r as i}from"./fetchAllRequests-Bya6iwzL.mjs";import{n as a,t as o}from"./extractClientError-X9wJVqGq.mjs";import{IdentifierType as s}from"@transcend-io/privacy-types";import{difference as c,groupBy as l}from"lodash-es";import{apply as u,decodeCodec as d}from"@transcend-io/type-utils";import{join as f,resolve as p}from"node:path";import m from"colors";import*as h from"io-ts";import{buildTranscendGraphQLClient as g,createSombraGotInstance as _,fetchAllRequestIdentifiers as v,validateSombraVersion as y}from"@transcend-io/sdk";import{map as b}from"@transcend-io/utils";import x from"cli-progress";import{PersistedState as S}from"@transcend-io/persisted-state";async function C(e,t,{sendEmailReceipt:r=!1,skipWaitingPeriod:i=!1,emailIsVerified:o=!0,requestIdentifiers:c=[],restartIdentifierStrategy:f}={}){let p=await e.post(`v1/data-subject-request`,{json:{type:t.type,subject:{coreIdentifier:t.coreIdentifier,email:t.email,emailIsVerified:o,...c.length>0?{attestedExtraIdentifiers:u(l(c.filter(e=>!(e.name===`email`&&e.value===t.email)&&!n.includes(e.name)).map(e=>({...e,type:Object.values(s).includes(e.name)?e.name:s.Custom})),`type`),(e,t)=>e.map(({name:e,value:n})=>({...t===s.Custom?{name:e}:{},value:n})))}:{}},requestId:t.id,subjectType:t.subjectType,isSilent:t.isSilent,isTest:t.isTest,locale:t.locale,skipWaitingPeriod:i,createdAt:t.createdAt,details:`Restarted by Transcend cli: "tr-request-restart" - ${t.details}`,skipSendingReceipt:!r,...f?{restartIdentifierStrategy:f}:{}}}).json(),{request:m}=d(h.type({request:a}),p);return m}const w=h.intersection([r,h.type({error:h.string})]),T=h.type({restartedRequests:h.array(r),failingRequests:h.array(w)});async function E({requestReceiptFolder:n,auth:r,sombraAuth:a,requestActions:s,requestStatuses:l,createdAtBefore:u,createdAtAfter:d,updatedAtBefore:h,updatedAtAfter:w,transcendUrl:E=e,requestIds:D=[],createdAt:O=new Date,silentModeBefore:k,sendEmailReceipt:A=!1,emailIsVerified:j=!0,copyIdentifiers:M=!1,restartIdentifierStrategy:N,skipWaitingPeriod:P=!1,concurrency:F=20}){let I=new Date().getTime(),L=new x.SingleBar({},x.Presets.shades_classic),R=f(n,`tr-request-restart-${new Date().toISOString().replace(/:/g,`-`)}.json`),z=new S(R,T,{restartedRequests:[],failingRequests:[]}),B=await _(E,r,{logger:t,sombraApiKey:a,sombraUrl:process.env.SOMBRA_URL}),V=g(E,r),H=(await i(V,{requestIds:D,actions:s,statuses:l,createdAtBefore:u,createdAtAfter:d,updatedAtBefore:h,updatedAtAfter:w})).filter(e=>new Date(e.createdAt)<O);if(t.info(`Found ${H.length} requests to restart`),M&&t.info(`copyIdentifiers detected - All Identifiers will be copied.`),N&&t.info(`restartIdentifierStrategy detected - Using "${N}" strategy.`),A&&t.info(`sendEmailReceipt detected - Email receipts will be sent.`),P&&t.info(`skipWaitingPeriod detected - Waiting period will be skipped.`),D.length>0&&D.length!==H.length){let e=c(D,H.map(({id:e})=>e));e.length>0&&(t.error(m.red(`Failed to find the following requests by ID: ${e.join(`,`)}.`)),process.exit(1))}M&&await y(V,{logger:t});let U=0;L.start(H.length,0),await b(H,async(e,n)=>{try{let r=M?await v(V,B,{filterBy:{requestId:e.id},skipSombraCheck:!0,logger:t}):[],i=await C(B,{...e,isSilent:k&&new Date(e.createdAt)<k?!0:e.isSilent},{requestIdentifiers:r,skipWaitingPeriod:P,sendEmailReceipt:A,emailIsVerified:j,restartIdentifierStrategy:N}),a=z.getValue(`restartedRequests`);a.push({id:i.id,link:i.link,rowIndex:n,coreIdentifier:i.coreIdentifier,attemptedAt:new Date().toISOString()}),await z.setValue(a,`restartedRequests`)}catch(t){let r=`${t.message} - ${JSON.stringify(t.response?.body,null,2)}`,i=o(r),a=z.getValue(`failingRequests`);a.push({id:e.id,link:e.link,rowIndex:n,coreIdentifier:e.coreIdentifier,attemptedAt:new Date().toISOString(),error:i||r}),await z.setValue(a,`failingRequests`)}U+=1,L.update(U)},{concurrency:F}),L.stop();let W=new Date().getTime()-I;t.info(m.green(`Completed restarting of requests in "${W/1e3}" seconds.`)),z.getValue(`failingRequests`).length>0&&(t.error(m.red(`Encountered "${z.getValue(`failingRequests`).length}" errors. See "${p(R)}" to review the error messages and inputs.`)),process.exit(1))}export{C as n,E as t};
|
|
2
|
+
//# sourceMappingURL=bulkRestartRequests-DROZyl0s.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulkRestartRequests-Bt1ywbss.mjs","names":[],"sources":["../src/lib/requests/restartPrivacyRequest.ts","../src/lib/requests/bulkRestartRequests.ts"],"sourcesContent":["import { IdentifierType, RestartIdentifierStrategy } from '@transcend-io/privacy-types';\nimport type { RequestIdentifier } from '@transcend-io/sdk';\nimport { apply, decodeCodec } from '@transcend-io/type-utils';\nimport type { Got } from 'got';\nimport * as t from 'io-ts';\nimport { groupBy } from 'lodash-es';\n\nimport type { PrivacyRequest } from '../graphql/index.js';\nimport { IDENTIFIER_BLOCK_LIST } from './constants.js';\nimport { PrivacyRequestResponse } from './submitPrivacyRequest.js';\n\n/**\n * Restart a privacy request to the Transcend API\n *\n * @param sombra - Sombra instance configured to make requests\n * @param request - Request to restart\n * @param input - Request input\n * @returns Successfully submitted request\n */\nexport async function restartPrivacyRequest(\n sombra: Got,\n request: PrivacyRequest,\n {\n sendEmailReceipt = false,\n skipWaitingPeriod = false,\n emailIsVerified = true,\n requestIdentifiers = [],\n restartIdentifierStrategy,\n }: {\n /** List of request identifiers to include */\n requestIdentifiers?: RequestIdentifier[];\n /** When true, send an email receipt to data subject */\n sendEmailReceipt?: boolean;\n /** Whether the email is verified */\n emailIsVerified?: boolean;\n /** Whether to skip waiting period */\n skipWaitingPeriod?: boolean;\n /** How request identifiers should be handled when restarting */\n restartIdentifierStrategy?: RestartIdentifierStrategy;\n } = {},\n): Promise<PrivacyRequestResponse> {\n // Make the GraphQL request\n const response = await sombra\n .post('v1/data-subject-request', {\n json: {\n type: request.type,\n subject: {\n coreIdentifier: request.coreIdentifier,\n email: request.email,\n emailIsVerified,\n ...(requestIdentifiers.length > 0\n ? {\n attestedExtraIdentifiers: apply(\n groupBy(\n requestIdentifiers\n .filter(\n (ri) =>\n // these are already submitted above\n !(ri.name === 'email' && ri.value === request.email) &&\n !IDENTIFIER_BLOCK_LIST.includes(ri.name),\n )\n .map((ri) => ({\n ...ri,\n type: Object.values(IdentifierType).includes(\n ri.name as any, // eslint-disable-line @typescript-eslint/no-explicit-any\n )\n ? ri.name\n : IdentifierType.Custom,\n })),\n 'type',\n ),\n (values, type) =>\n values.map(({ name, value }) => ({\n ...(type === IdentifierType.Custom ? { name } : {}),\n value,\n })),\n ),\n }\n : {}),\n },\n requestId: request.id,\n subjectType: request.subjectType,\n isSilent: request.isSilent,\n isTest: request.isTest,\n locale: request.locale,\n skipWaitingPeriod,\n createdAt: request.createdAt,\n details: `Restarted by Transcend cli: \"tr-request-restart\" - ${request.details}`,\n skipSendingReceipt: !sendEmailReceipt,\n ...(restartIdentifierStrategy ? { restartIdentifierStrategy } : {}),\n },\n })\n .json();\n\n const { request: requestResponse } = decodeCodec(\n t.type({\n request: PrivacyRequestResponse,\n }),\n response,\n );\n return requestResponse;\n}\n","import { join, resolve } from 'node:path';\n\nimport { PersistedState } from '@transcend-io/persisted-state';\nimport {\n RequestAction,\n RequestStatus,\n RestartIdentifierStrategy,\n} from '@transcend-io/privacy-types';\nimport {\n buildTranscendGraphQLClient,\n createSombraGotInstance,\n fetchAllRequestIdentifiers,\n validateSombraVersion,\n} from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport cliProgress from 'cli-progress';\nimport colors from 'colors';\nimport * as t from 'io-ts';\nimport { difference } from 'lodash-es';\n\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { fetchAllRequests } from '../graphql/index.js';\nimport { SuccessfulRequest } from './constants.js';\nimport { extractClientError } from './extractClientError.js';\nimport { restartPrivacyRequest } from './restartPrivacyRequest.js';\n\n/** Minimal state we need to keep a list of requests */\nconst ErrorRequest = t.intersection([\n SuccessfulRequest,\n t.type({\n error: t.string,\n }),\n]);\n\n/** Type override */\ntype ErrorRequest = t.TypeOf<typeof ErrorRequest>;\n\n/** Persist this data between runs of the script */\nconst CachedRequestState = t.type({\n restartedRequests: t.array(SuccessfulRequest),\n failingRequests: t.array(ErrorRequest),\n});\n\n/**\n * Upload a set of privacy requests from CSV\n *\n * @param options - Options\n */\nexport async function bulkRestartRequests({\n requestReceiptFolder,\n auth,\n sombraAuth,\n requestActions,\n requestStatuses,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n transcendUrl = DEFAULT_TRANSCEND_API,\n requestIds = [],\n createdAt = new Date(),\n silentModeBefore,\n sendEmailReceipt = false,\n emailIsVerified = true,\n copyIdentifiers = false,\n restartIdentifierStrategy,\n skipWaitingPeriod = false,\n concurrency = 20,\n}: {\n /** Actions to filter for */\n requestActions: RequestAction[];\n /** Statues to filter for */\n requestStatuses: RequestStatus[];\n /** File where request receipts are stored */\n requestReceiptFolder: string;\n /** Transcend API key authentication */\n auth: string;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Sombra API key authentication */\n sombraAuth?: string;\n /** Request IDs to filter for */\n requestIds?: string[];\n /** Whether to re-verify the email when restarting the request */\n emailIsVerified?: boolean;\n /** Filter for requests that were submitted before this date */\n createdAt?: Date;\n /** Requests that have been open for this length of time should be marked as silent mode */\n silentModeBefore?: Date;\n /** Send an email receipt to the restarted requests */\n sendEmailReceipt?: boolean;\n /** Copy over all identifiers rather than restarting the request only with the core identifier */\n copyIdentifiers?: boolean;\n /** How request identifiers should be handled when restarting */\n restartIdentifierStrategy?: RestartIdentifierStrategy;\n /** Skip the waiting period when restarting requests */\n skipWaitingPeriod?: boolean;\n /** Filter for requests created before this date */\n createdAtBefore?: Date;\n /** Filter for requests created after this date */\n createdAtAfter?: Date;\n /** Filter for requests updated before this date */\n updatedAtBefore?: Date;\n /** Filter for requests updated after this date */\n updatedAtAfter?: Date;\n /** Concurrency to upload requests at */\n concurrency?: number;\n}): Promise<void> {\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\n // Create a new state file to store the requests from this run.\n // `toISOString()` contains colons (e.g. 2026-07-06T04:33:12.345Z) which are\n // illegal characters in Windows filenames, so strip them out to keep the\n // auto-generated receipt filename cross-platform.\n const cacheFile = join(\n requestReceiptFolder,\n `tr-request-restart-${new Date().toISOString().replace(/:/g, '-')}.json`,\n );\n const state = new PersistedState(cacheFile, CachedRequestState, {\n restartedRequests: [],\n failingRequests: [],\n });\n\n // Create sombra instance to communicate with\n const sombra = await createSombraGotInstance(transcendUrl, auth, {\n logger,\n sombraApiKey: sombraAuth,\n sombraUrl: process.env.SOMBRA_URL,\n });\n\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n const allRequests = await fetchAllRequests(client, {\n requestIds,\n actions: requestActions,\n statuses: requestStatuses,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n });\n const requests = allRequests.filter((request) => new Date(request.createdAt) < createdAt);\n logger.info(`Found ${requests.length} requests to restart`);\n\n if (copyIdentifiers) {\n logger.info('copyIdentifiers detected - All Identifiers will be copied.');\n }\n if (restartIdentifierStrategy) {\n logger.info(\n `restartIdentifierStrategy detected - Using \"${restartIdentifierStrategy}\" strategy.`,\n );\n }\n if (sendEmailReceipt) {\n logger.info('sendEmailReceipt detected - Email receipts will be sent.');\n }\n if (skipWaitingPeriod) {\n logger.info('skipWaitingPeriod detected - Waiting period will be skipped.');\n }\n\n // Validate request IDs\n if (requestIds.length > 0 && requestIds.length !== requests.length) {\n const missingRequests = difference(\n requestIds,\n requests.map(({ id }) => id),\n );\n if (missingRequests.length > 0) {\n logger.error(\n colors.red(`Failed to find the following requests by ID: ${missingRequests.join(',')}.`),\n );\n process.exit(1);\n }\n }\n\n if (copyIdentifiers) {\n await validateSombraVersion(client, { logger });\n }\n\n // Map over the requests\n let total = 0;\n progressBar.start(requests.length, 0);\n await map(\n requests,\n async (request, ind) => {\n try {\n // Pull the request identifiers\n const requestIdentifiers = copyIdentifiers\n ? await fetchAllRequestIdentifiers(client, sombra, {\n filterBy: { requestId: request.id },\n skipSombraCheck: true,\n logger,\n })\n : [];\n\n // Make the GraphQL request to restart the request\n const requestResponse = await restartPrivacyRequest(\n sombra,\n {\n ...request,\n // override silent mode\n isSilent:\n !!silentModeBefore && new Date(request.createdAt) < silentModeBefore\n ? true\n : request.isSilent,\n },\n {\n requestIdentifiers,\n skipWaitingPeriod,\n sendEmailReceipt,\n emailIsVerified,\n restartIdentifierStrategy,\n },\n );\n\n // Cache successful upload\n const restartedRequests = state.getValue('restartedRequests');\n restartedRequests.push({\n id: requestResponse.id,\n link: requestResponse.link,\n rowIndex: ind,\n coreIdentifier: requestResponse.coreIdentifier,\n attemptedAt: new Date().toISOString(),\n });\n await state.setValue(restartedRequests, 'restartedRequests');\n } catch (err) {\n const msg = `${err.message} - ${JSON.stringify(err.response?.body, null, 2)}`;\n const clientError = extractClientError(msg);\n\n const failingRequests = state.getValue('failingRequests');\n failingRequests.push({\n id: request.id,\n link: request.link,\n rowIndex: ind,\n coreIdentifier: request.coreIdentifier,\n attemptedAt: new Date().toISOString(),\n error: clientError || msg,\n });\n await state.setValue(failingRequests, 'failingRequests');\n }\n total += 1;\n progressBar.update(total);\n },\n { concurrency },\n );\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n // Log completion time\n logger.info(colors.green(`Completed restarting of requests in \"${totalTime / 1000}\" seconds.`));\n\n // Log errors\n if (state.getValue('failingRequests').length > 0) {\n logger.error(\n colors.red(\n `Encountered \"${state.getValue('failingRequests').length}\" errors. ` +\n `See \"${resolve(cacheFile)}\" to review the error messages and inputs.`,\n ),\n );\n process.exit(1);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bulkRestartRequests-DROZyl0s.mjs","names":[],"sources":["../src/lib/requests/restartPrivacyRequest.ts","../src/lib/requests/bulkRestartRequests.ts"],"sourcesContent":["import { IdentifierType, RestartIdentifierStrategy } from '@transcend-io/privacy-types';\nimport type { RequestIdentifier } from '@transcend-io/sdk';\nimport { apply, decodeCodec } from '@transcend-io/type-utils';\nimport type { Got } from 'got';\nimport * as t from 'io-ts';\nimport { groupBy } from 'lodash-es';\n\nimport type { PrivacyRequest } from '../graphql/index.js';\nimport { IDENTIFIER_BLOCK_LIST } from './constants.js';\nimport { PrivacyRequestResponse } from './submitPrivacyRequest.js';\n\n/**\n * Restart a privacy request to the Transcend API\n *\n * @param sombra - Sombra instance configured to make requests\n * @param request - Request to restart\n * @param input - Request input\n * @returns Successfully submitted request\n */\nexport async function restartPrivacyRequest(\n sombra: Got,\n request: PrivacyRequest,\n {\n sendEmailReceipt = false,\n skipWaitingPeriod = false,\n emailIsVerified = true,\n requestIdentifiers = [],\n restartIdentifierStrategy,\n }: {\n /** List of request identifiers to include */\n requestIdentifiers?: RequestIdentifier[];\n /** When true, send an email receipt to data subject */\n sendEmailReceipt?: boolean;\n /** Whether the email is verified */\n emailIsVerified?: boolean;\n /** Whether to skip waiting period */\n skipWaitingPeriod?: boolean;\n /** How request identifiers should be handled when restarting */\n restartIdentifierStrategy?: RestartIdentifierStrategy;\n } = {},\n): Promise<PrivacyRequestResponse> {\n // Make the GraphQL request\n const response = await sombra\n .post('v1/data-subject-request', {\n json: {\n type: request.type,\n subject: {\n coreIdentifier: request.coreIdentifier,\n email: request.email,\n emailIsVerified,\n ...(requestIdentifiers.length > 0\n ? {\n attestedExtraIdentifiers: apply(\n groupBy(\n requestIdentifiers\n .filter(\n (ri) =>\n // these are already submitted above\n !(ri.name === 'email' && ri.value === request.email) &&\n !IDENTIFIER_BLOCK_LIST.includes(ri.name),\n )\n .map((ri) => ({\n ...ri,\n type: Object.values(IdentifierType).includes(\n ri.name as any, // eslint-disable-line @typescript-eslint/no-explicit-any\n )\n ? ri.name\n : IdentifierType.Custom,\n })),\n 'type',\n ),\n (values, type) =>\n values.map(({ name, value }) => ({\n ...(type === IdentifierType.Custom ? { name } : {}),\n value,\n })),\n ),\n }\n : {}),\n },\n requestId: request.id,\n subjectType: request.subjectType,\n isSilent: request.isSilent,\n isTest: request.isTest,\n locale: request.locale,\n skipWaitingPeriod,\n createdAt: request.createdAt,\n details: `Restarted by Transcend cli: \"tr-request-restart\" - ${request.details}`,\n skipSendingReceipt: !sendEmailReceipt,\n ...(restartIdentifierStrategy ? { restartIdentifierStrategy } : {}),\n },\n })\n .json();\n\n const { request: requestResponse } = decodeCodec(\n t.type({\n request: PrivacyRequestResponse,\n }),\n response,\n );\n return requestResponse;\n}\n","import { join, resolve } from 'node:path';\n\nimport { PersistedState } from '@transcend-io/persisted-state';\nimport {\n RequestAction,\n RequestStatus,\n RestartIdentifierStrategy,\n} from '@transcend-io/privacy-types';\nimport {\n buildTranscendGraphQLClient,\n createSombraGotInstance,\n fetchAllRequestIdentifiers,\n validateSombraVersion,\n} from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport cliProgress from 'cli-progress';\nimport colors from 'colors';\nimport * as t from 'io-ts';\nimport { difference } from 'lodash-es';\n\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { fetchAllRequests } from '../graphql/index.js';\nimport { SuccessfulRequest } from './constants.js';\nimport { extractClientError } from './extractClientError.js';\nimport { restartPrivacyRequest } from './restartPrivacyRequest.js';\n\n/** Minimal state we need to keep a list of requests */\nconst ErrorRequest = t.intersection([\n SuccessfulRequest,\n t.type({\n error: t.string,\n }),\n]);\n\n/** Type override */\ntype ErrorRequest = t.TypeOf<typeof ErrorRequest>;\n\n/** Persist this data between runs of the script */\nconst CachedRequestState = t.type({\n restartedRequests: t.array(SuccessfulRequest),\n failingRequests: t.array(ErrorRequest),\n});\n\n/**\n * Upload a set of privacy requests from CSV\n *\n * @param options - Options\n */\nexport async function bulkRestartRequests({\n requestReceiptFolder,\n auth,\n sombraAuth,\n requestActions,\n requestStatuses,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n transcendUrl = DEFAULT_TRANSCEND_API,\n requestIds = [],\n createdAt = new Date(),\n silentModeBefore,\n sendEmailReceipt = false,\n emailIsVerified = true,\n copyIdentifiers = false,\n restartIdentifierStrategy,\n skipWaitingPeriod = false,\n concurrency = 20,\n}: {\n /** Actions to filter for */\n requestActions: RequestAction[];\n /** Statues to filter for */\n requestStatuses: RequestStatus[];\n /** File where request receipts are stored */\n requestReceiptFolder: string;\n /** Transcend API key authentication */\n auth: string;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Sombra API key authentication */\n sombraAuth?: string;\n /** Request IDs to filter for */\n requestIds?: string[];\n /** Whether to re-verify the email when restarting the request */\n emailIsVerified?: boolean;\n /** Filter for requests that were submitted before this date */\n createdAt?: Date;\n /** Requests that have been open for this length of time should be marked as silent mode */\n silentModeBefore?: Date;\n /** Send an email receipt to the restarted requests */\n sendEmailReceipt?: boolean;\n /** Copy over all identifiers rather than restarting the request only with the core identifier */\n copyIdentifiers?: boolean;\n /** How request identifiers should be handled when restarting */\n restartIdentifierStrategy?: RestartIdentifierStrategy;\n /** Skip the waiting period when restarting requests */\n skipWaitingPeriod?: boolean;\n /** Filter for requests created before this date */\n createdAtBefore?: Date;\n /** Filter for requests created after this date */\n createdAtAfter?: Date;\n /** Filter for requests updated before this date */\n updatedAtBefore?: Date;\n /** Filter for requests updated after this date */\n updatedAtAfter?: Date;\n /** Concurrency to upload requests at */\n concurrency?: number;\n}): Promise<void> {\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\n // Create a new state file to store the requests from this run.\n // `toISOString()` contains colons (e.g. 2026-07-06T04:33:12.345Z) which are\n // illegal characters in Windows filenames, so strip them out to keep the\n // auto-generated receipt filename cross-platform.\n const cacheFile = join(\n requestReceiptFolder,\n `tr-request-restart-${new Date().toISOString().replace(/:/g, '-')}.json`,\n );\n const state = new PersistedState(cacheFile, CachedRequestState, {\n restartedRequests: [],\n failingRequests: [],\n });\n\n // Create sombra instance to communicate with\n const sombra = await createSombraGotInstance(transcendUrl, auth, {\n logger,\n sombraApiKey: sombraAuth,\n sombraUrl: process.env.SOMBRA_URL,\n });\n\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n const allRequests = await fetchAllRequests(client, {\n requestIds,\n actions: requestActions,\n statuses: requestStatuses,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n });\n const requests = allRequests.filter((request) => new Date(request.createdAt) < createdAt);\n logger.info(`Found ${requests.length} requests to restart`);\n\n if (copyIdentifiers) {\n logger.info('copyIdentifiers detected - All Identifiers will be copied.');\n }\n if (restartIdentifierStrategy) {\n logger.info(\n `restartIdentifierStrategy detected - Using \"${restartIdentifierStrategy}\" strategy.`,\n );\n }\n if (sendEmailReceipt) {\n logger.info('sendEmailReceipt detected - Email receipts will be sent.');\n }\n if (skipWaitingPeriod) {\n logger.info('skipWaitingPeriod detected - Waiting period will be skipped.');\n }\n\n // Validate request IDs\n if (requestIds.length > 0 && requestIds.length !== requests.length) {\n const missingRequests = difference(\n requestIds,\n requests.map(({ id }) => id),\n );\n if (missingRequests.length > 0) {\n logger.error(\n colors.red(`Failed to find the following requests by ID: ${missingRequests.join(',')}.`),\n );\n process.exit(1);\n }\n }\n\n if (copyIdentifiers) {\n await validateSombraVersion(client, { logger });\n }\n\n // Map over the requests\n let total = 0;\n progressBar.start(requests.length, 0);\n await map(\n requests,\n async (request, ind) => {\n try {\n // Pull the request identifiers\n const requestIdentifiers = copyIdentifiers\n ? await fetchAllRequestIdentifiers(client, sombra, {\n filterBy: { requestId: request.id },\n skipSombraCheck: true,\n logger,\n })\n : [];\n\n // Make the GraphQL request to restart the request\n const requestResponse = await restartPrivacyRequest(\n sombra,\n {\n ...request,\n // override silent mode\n isSilent:\n !!silentModeBefore && new Date(request.createdAt) < silentModeBefore\n ? true\n : request.isSilent,\n },\n {\n requestIdentifiers,\n skipWaitingPeriod,\n sendEmailReceipt,\n emailIsVerified,\n restartIdentifierStrategy,\n },\n );\n\n // Cache successful upload\n const restartedRequests = state.getValue('restartedRequests');\n restartedRequests.push({\n id: requestResponse.id,\n link: requestResponse.link,\n rowIndex: ind,\n coreIdentifier: requestResponse.coreIdentifier,\n attemptedAt: new Date().toISOString(),\n });\n await state.setValue(restartedRequests, 'restartedRequests');\n } catch (err) {\n const msg = `${err.message} - ${JSON.stringify(err.response?.body, null, 2)}`;\n const clientError = extractClientError(msg);\n\n const failingRequests = state.getValue('failingRequests');\n failingRequests.push({\n id: request.id,\n link: request.link,\n rowIndex: ind,\n coreIdentifier: request.coreIdentifier,\n attemptedAt: new Date().toISOString(),\n error: clientError || msg,\n });\n await state.setValue(failingRequests, 'failingRequests');\n }\n total += 1;\n progressBar.update(total);\n },\n { concurrency },\n );\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n // Log completion time\n logger.info(colors.green(`Completed restarting of requests in \"${totalTime / 1000}\" seconds.`));\n\n // Log errors\n if (state.getValue('failingRequests').length > 0) {\n logger.error(\n colors.red(\n `Encountered \"${state.getValue('failingRequests').length}\" errors. ` +\n `See \"${resolve(cacheFile)}\" to review the error messages and inputs.`,\n ),\n );\n process.exit(1);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./constants-
|
|
2
|
-
//# sourceMappingURL=bulkRetryEnrichers-
|
|
1
|
+
import{a as e}from"./constants-CEPYyv4h.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{r as n}from"./fetchAllRequests-Bya6iwzL.mjs";import{RequestEnricherStatus as r,RequestStatus as i}from"@transcend-io/privacy-types";import{difference as a}from"lodash-es";import o from"colors";import{buildTranscendGraphQLClient as s,fetchAllRequestEnrichers as c,retryRequestEnricher as l}from"@transcend-io/sdk";import{map as u}from"@transcend-io/utils";import d from"cli-progress";async function f({auth:f,requestActions:p=[],createdAtBefore:m,createdAtAfter:h,updatedAtBefore:g,updatedAtAfter:_,transcendUrl:v=e,requestEnricherStatuses:y=Object.values(r),requestIds:b=[],enricherId:x,concurrency:S=20}){let C=new Date().getTime(),w=new d.SingleBar({},d.Presets.shades_classic),T=s(v,f);t.info(o.magenta(`Fetching requests to restart...`));let E=await n(T,{actions:p,statuses:[i.Enriching],createdAtBefore:m,createdAtAfter:h,updatedAtBefore:g,updatedAtAfter:_,requestIds:b}),D=0;if(b.length>0&&b.length!==E.length){let e=a(b,E.map(({id:e})=>e));e.length>0&&(t.error(o.red(`Failed to find the following requests by ID: ${e.join(`,`)}.`)),process.exit(1))}let O=0;w.start(E.length,0),await u(E,async e=>{await u((await c(T,{filterBy:{requestId:e.id},logger:t})).filter(e=>e.enricher.id===x&&y.includes(e.status)),async e=>{await l(T,{id:e.id,logger:t}),D+=1}),O+=1,w.update(O)},{concurrency:S}),w.stop();let k=new Date().getTime()-C;t.info(o.green(`Completed restarting of ${E.length} requests and ${D} enrichers in "${k/1e3}" seconds.`))}export{f as t};
|
|
2
|
+
//# sourceMappingURL=bulkRetryEnrichers-DHIt_YpU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulkRetryEnrichers-
|
|
1
|
+
{"version":3,"file":"bulkRetryEnrichers-DHIt_YpU.mjs","names":[],"sources":["../src/lib/requests/bulkRetryEnrichers.ts"],"sourcesContent":["import { RequestAction, RequestEnricherStatus, RequestStatus } from '@transcend-io/privacy-types';\nimport {\n buildTranscendGraphQLClient,\n fetchAllRequestEnrichers,\n retryRequestEnricher,\n} from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport cliProgress from 'cli-progress';\nimport colors from 'colors';\nimport { difference } from 'lodash-es';\n\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport { fetchAllRequests } from '../graphql/index.js';\n\n/**\n * Restart a bunch of request enrichers\n *\n * @param options - Options\n */\nexport async function bulkRetryEnrichers({\n auth,\n requestActions = [],\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n transcendUrl = DEFAULT_TRANSCEND_API,\n requestEnricherStatuses = Object.values(RequestEnricherStatus),\n requestIds = [],\n enricherId,\n concurrency = 20,\n}: {\n /** Actions to filter for */\n requestActions?: RequestAction[];\n /** Request enricher statuses to restart - defaults to all statuses */\n requestEnricherStatuses?: RequestEnricherStatus[];\n /** Transcend API key authentication */\n auth: string;\n /** The ID of the enricher to restart */\n enricherId: string;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Request IDs to filter for */\n requestIds?: string[];\n /** Filter for requests created before this date */\n createdAtBefore?: Date;\n /** Filter for requests created after this date */\n createdAtAfter?: Date;\n /** Filter for requests updated before this date */\n updatedAtBefore?: Date;\n /** Filter for requests updated after this date */\n updatedAtAfter?: Date;\n /** Concurrency to upload requests at */\n concurrency?: number;\n}): Promise<void> {\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n logger.info(colors.magenta('Fetching requests to restart...'));\n\n const requests = await fetchAllRequests(client, {\n actions: requestActions,\n statuses: [RequestStatus.Enriching],\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n requestIds,\n });\n\n let totalRestarted = 0;\n\n // Validate request IDs\n if (requestIds.length > 0 && requestIds.length !== requests.length) {\n const missingRequests = difference(\n requestIds,\n requests.map(({ id }) => id),\n );\n if (missingRequests.length > 0) {\n logger.error(\n colors.red(`Failed to find the following requests by ID: ${missingRequests.join(',')}.`),\n );\n process.exit(1);\n }\n }\n\n // Map over the requests\n let total = 0;\n progressBar.start(requests.length, 0);\n await map(\n requests,\n async (request) => {\n // Pull the request identifiers\n const requestEnrichers = await fetchAllRequestEnrichers(client, {\n filterBy: { requestId: request.id },\n logger,\n });\n const requestEnrichersToRestart = requestEnrichers.filter(\n (requestEnricher) =>\n requestEnricher.enricher.id === enricherId &&\n requestEnricherStatuses.includes(requestEnricher.status),\n );\n await map(requestEnrichersToRestart, async (requestEnricher) => {\n await retryRequestEnricher(client, { id: requestEnricher.id, logger });\n totalRestarted += 1;\n });\n\n // Cache successful upload\n total += 1;\n progressBar.update(total);\n },\n { concurrency },\n );\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n // Log completion time\n logger.info(\n colors.green(\n `Completed restarting of ${requests.length} requests and ${totalRestarted} enrichers in \"${\n totalTime / 1000\n }\" seconds.`,\n ),\n );\n}\n"],"mappings":"wdAoBA,eAAsB,EAAmB,CACvC,OACA,iBAAiB,EAAE,CACnB,kBACA,iBACA,kBACA,iBACA,eAAe,EACf,0BAA0B,OAAO,OAAO,EAAsB,CAC9D,aAAa,EAAE,CACf,aACA,cAAc,IAwBE,CAEhB,IAAM,EAAK,IAAI,MAAM,CAAC,SAAS,CAEzB,EAAc,IAAI,EAAY,UAAU,EAAE,CAAE,EAAY,QAAQ,eAAe,CAG/E,EAAS,EAA4B,EAAc,EAAK,CAE9D,EAAO,KAAK,EAAO,QAAQ,kCAAkC,CAAC,CAE9D,IAAM,EAAW,MAAM,EAAiB,EAAQ,CAC9C,QAAS,EACT,SAAU,CAAC,EAAc,UAAU,CACnC,kBACA,iBACA,kBACA,iBACA,aACD,CAAC,CAEE,EAAiB,EAGrB,GAAI,EAAW,OAAS,GAAK,EAAW,SAAW,EAAS,OAAQ,CAClE,IAAM,EAAkB,EACtB,EACA,EAAS,KAAK,CAAE,QAAS,EAAG,CAC7B,CACG,EAAgB,OAAS,IAC3B,EAAO,MACL,EAAO,IAAI,gDAAgD,EAAgB,KAAK,IAAI,CAAC,GAAG,CACzF,CACD,QAAQ,KAAK,EAAE,EAKnB,IAAI,EAAQ,EACZ,EAAY,MAAM,EAAS,OAAQ,EAAE,CACrC,MAAM,EACJ,EACA,KAAO,IAAY,CAWjB,MAAM,GAL4B,MAJH,EAAyB,EAAQ,CAC9D,SAAU,CAAE,UAAW,EAAQ,GAAI,CACnC,SACD,CAAC,EACiD,OAChD,GACC,EAAgB,SAAS,KAAO,GAChC,EAAwB,SAAS,EAAgB,OAAO,CAEzB,CAAE,KAAO,IAAoB,CAC9D,MAAM,EAAqB,EAAQ,CAAE,GAAI,EAAgB,GAAI,SAAQ,CAAC,CACtE,GAAkB,GAClB,CAGF,GAAS,EACT,EAAY,OAAO,EAAM,EAE3B,CAAE,cAAa,CAChB,CAED,EAAY,MAAM,CAElB,IAAM,EADK,IAAI,MAAM,CAAC,SACF,CAAG,EAGvB,EAAO,KACL,EAAO,MACL,2BAA2B,EAAS,OAAO,gBAAgB,EAAe,iBACxE,EAAY,IACb,YACF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./constants-
|
|
2
|
-
//# sourceMappingURL=cancelPrivacyRequests-
|
|
1
|
+
import{a as e}from"./constants-CEPYyv4h.mjs";import{t}from"./logger-Ckep4QXn.mjs";import{n,o as r}from"./request-BIplTb3L.mjs";import{r as i}from"./fetchAllRequests-Bya6iwzL.mjs";import{RequestStatus as a}from"@transcend-io/privacy-types";import o from"colors";import{buildTranscendGraphQLClient as s,fetchAllTemplates as c,makeGraphQLRequest as l}from"@transcend-io/sdk";import{map as u}from"@transcend-io/utils";import d from"cli-progress";async function f({requestActions:f,cancellationTitle:p,auth:m,requestIds:h,silentModeBefore:g,createdAtBefore:_,createdAtAfter:v,updatedAtBefore:y,updatedAtAfter:b,statuses:x=[a.Compiling,a.RequestMade,a.Delayed,a.Approving,a.Secondary,a.Enriching,a.Waiting,a.SecondaryApproving],concurrency:S=50,transcendUrl:C=e}){let w=s(C,m),T=new Date().getTime(),E=new d.SingleBar({},d.Presets.shades_classic),D;if(p){let e=(await c(w,{logger:t,filterBy:{title:p}})).find(e=>e.title===p);if(!e)throw Error(`Failed to find a template with title: "${p}"`);D=e}let O=await i(w,{actions:f,createdAtBefore:_,createdAtAfter:v,updatedAtBefore:y,updatedAtAfter:b,statuses:x,requestIds:h});t.info(o.magenta(`Canceling "${O.length}" requests${D?` Using template: ${D.title}`:``}.`));let k=0;E.start(O.length,0),await u(O,async e=>{g&&new Date(g)>new Date(e.createdAt)&&await l(w,r,{variables:{input:{id:e.id,isSilent:!0}},logger:t}),await l(w,n,{variables:{input:{requestId:e.id,...D?{subject:`Re: ${D.subject.defaultMessage}`,template:D.template.defaultMessage}:{}}},logger:t}),k+=1,E.update(k)},{concurrency:S}),E.stop();let A=new Date().getTime()-T;return t.info(o.green(`Successfully canceled ${k} requests in "${A/1e3}" seconds!`)),O.length}export{f as t};
|
|
2
|
+
//# sourceMappingURL=cancelPrivacyRequests-DUmxmMsv.mjs.map
|
package/dist/{cancelPrivacyRequests-BLWlXNF5.mjs.map → cancelPrivacyRequests-DUmxmMsv.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancelPrivacyRequests-
|
|
1
|
+
{"version":3,"file":"cancelPrivacyRequests-DUmxmMsv.mjs","names":[],"sources":["../src/lib/requests/cancelPrivacyRequests.ts"],"sourcesContent":["import { RequestAction, RequestStatus } from '@transcend-io/privacy-types';\nimport {\n buildTranscendGraphQLClient,\n fetchAllTemplates,\n makeGraphQLRequest,\n type Template,\n} from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport cliProgress from 'cli-progress';\nimport colors from 'colors';\n\nimport { DEFAULT_TRANSCEND_API } from '../../constants.js';\nimport { logger } from '../../logger.js';\nimport {\n UPDATE_PRIVACY_REQUEST,\n fetchAllRequests,\n CANCEL_PRIVACY_REQUEST,\n} from '../graphql/index.js';\n\n/**\n * Cancel a set of privacy requests\n *\n * @param options - Options\n * @returns The number of requests canceled\n */\nexport async function cancelPrivacyRequests({\n requestActions,\n cancellationTitle,\n auth,\n requestIds,\n silentModeBefore,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n statuses = [\n RequestStatus.Compiling,\n RequestStatus.RequestMade,\n RequestStatus.Delayed,\n RequestStatus.Approving,\n RequestStatus.Secondary,\n RequestStatus.Enriching,\n RequestStatus.Waiting,\n RequestStatus.SecondaryApproving,\n ],\n concurrency = 50,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** The request actions that should be restarted */\n requestActions: RequestAction[];\n /** Transcend API key authentication */\n auth: string;\n /** Concurrency limit for approving */\n concurrency?: number;\n /** The request statuses to cancel */\n statuses?: RequestStatus[];\n /** The set of privacy requests to cancel */\n requestIds?: string[];\n /** Mark these requests as silent mode if they were created before this date */\n silentModeBefore?: Date;\n /** Filter for requests created before this date */\n createdAtBefore?: Date;\n /** Filter for requests created after this date */\n createdAtAfter?: Date;\n /** Filter for requests updated before this date */\n updatedAtBefore?: Date;\n /** Filter for requests updated after this date */\n updatedAtAfter?: Date;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** The email template to use when canceling the requests */\n cancellationTitle?: string;\n}): Promise<number> {\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\n // Grab the template with that title\n let cancelationTemplate: Template | undefined;\n if (cancellationTitle) {\n const matchingTemplates = await fetchAllTemplates(client, {\n logger,\n filterBy: { title: cancellationTitle },\n });\n const exactTitleMatch = matchingTemplates.find(\n (template) => template.title === cancellationTitle,\n );\n if (!exactTitleMatch) {\n throw new Error(`Failed to find a template with title: \"${cancellationTitle}\"`);\n }\n cancelationTemplate = exactTitleMatch;\n }\n\n // Pull in the requests\n const allRequests = await fetchAllRequests(client, {\n actions: requestActions,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n statuses,\n requestIds,\n });\n\n // Notify Transcend\n logger.info(\n colors.magenta(\n `Canceling \"${allRequests.length}\" requests${\n cancelationTemplate ? ` Using template: ${cancelationTemplate.title}` : ''\n }.`,\n ),\n );\n\n let total = 0;\n progressBar.start(allRequests.length, 0);\n await map(\n allRequests,\n async (requestToCancel) => {\n // update request to silent mode if silentModeBefore is defined\n // and the request was created before silentModeBefore\n if (silentModeBefore && new Date(silentModeBefore) > new Date(requestToCancel.createdAt)) {\n await makeGraphQLRequest(client, UPDATE_PRIVACY_REQUEST, {\n variables: {\n input: {\n id: requestToCancel.id,\n isSilent: true,\n },\n },\n logger,\n });\n }\n\n // cancel the request\n await makeGraphQLRequest(client, CANCEL_PRIVACY_REQUEST, {\n variables: {\n input: {\n requestId: requestToCancel.id,\n ...(cancelationTemplate\n ? {\n subject: `Re: ${cancelationTemplate.subject.defaultMessage}`,\n template: cancelationTemplate.template.defaultMessage,\n }\n : {}),\n },\n },\n logger,\n });\n\n total += 1;\n progressBar.update(total);\n },\n { concurrency },\n );\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n logger.info(\n colors.green(`Successfully canceled ${total} requests in \"${totalTime / 1000}\" seconds!`),\n );\n return allRequests.length;\n}\n"],"mappings":"0bAyBA,eAAsB,EAAsB,CAC1C,iBACA,oBACA,OACA,aACA,mBACA,kBACA,iBACA,kBACA,iBACA,WAAW,CACT,EAAc,UACd,EAAc,YACd,EAAc,QACd,EAAc,UACd,EAAc,UACd,EAAc,UACd,EAAc,QACd,EAAc,mBACf,CACD,cAAc,GACd,eAAe,GA0BG,CAElB,IAAM,EAAS,EAA4B,EAAc,EAAK,CAGxD,EAAK,IAAI,MAAM,CAAC,SAAS,CAEzB,EAAc,IAAI,EAAY,UAAU,EAAE,CAAE,EAAY,QAAQ,eAAe,CAGjF,EACJ,GAAI,EAAmB,CAKrB,IAAM,GAAkB,MAJQ,EAAkB,EAAQ,CACxD,SACA,SAAU,CAAE,MAAO,EAAmB,CACvC,CAAC,EACwC,KACvC,GAAa,EAAS,QAAU,EAClC,CACD,GAAI,CAAC,EACH,MAAU,MAAM,0CAA0C,EAAkB,GAAG,CAEjF,EAAsB,EAIxB,IAAM,EAAc,MAAM,EAAiB,EAAQ,CACjD,QAAS,EACT,kBACA,iBACA,kBACA,iBACA,WACA,aACD,CAAC,CAGF,EAAO,KACL,EAAO,QACL,cAAc,EAAY,OAAO,YAC/B,EAAsB,oBAAoB,EAAoB,QAAU,GACzE,GACF,CACF,CAED,IAAI,EAAQ,EACZ,EAAY,MAAM,EAAY,OAAQ,EAAE,CACxC,MAAM,EACJ,EACA,KAAO,IAAoB,CAGrB,GAAoB,IAAI,KAAK,EAAiB,CAAG,IAAI,KAAK,EAAgB,UAAU,EACtF,MAAM,EAAmB,EAAQ,EAAwB,CACvD,UAAW,CACT,MAAO,CACL,GAAI,EAAgB,GACpB,SAAU,GACX,CACF,CACD,SACD,CAAC,CAIJ,MAAM,EAAmB,EAAQ,EAAwB,CACvD,UAAW,CACT,MAAO,CACL,UAAW,EAAgB,GAC3B,GAAI,EACA,CACE,QAAS,OAAO,EAAoB,QAAQ,iBAC5C,SAAU,EAAoB,SAAS,eACxC,CACD,EAAE,CACP,CACF,CACD,SACD,CAAC,CAEF,GAAS,EACT,EAAY,OAAO,EAAM,EAE3B,CAAE,cAAa,CAChB,CAED,EAAY,MAAM,CAElB,IAAM,EADK,IAAI,MAAM,CAAC,SACF,CAAG,EAKvB,OAHA,EAAO,KACL,EAAO,MAAM,yBAAyB,EAAM,gBAAgB,EAAY,IAAK,YAAY,CAC1F,CACM,EAAY"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{a as e,i as t}from"./enums-BymyVyqr.mjs";import{ActionItemCode as ee,ActionItemPriorityOverride as te,AssessmentFormStatus as ne,AssessmentFormTemplateSource as re,AssessmentFormTemplateStatus as ie,AssessmentQuestionSubType as ae,AssessmentQuestionType as oe,AssessmentSyncColumn as se,AssessmentSyncModel as ce,AssessmentsDisplayLogicAction as le,AttributeKeyType as ue,AttributeSupportedResourceType as n,BrowserTimeZone as de,CodePackageType as fe,CollectDataSubjectRegions as pe,ComparisonOperator as me,ConfigurableColorPaletteColor as he,ConsentBundleType as ge,ConsentPrecedenceOption as _e,ConsentThemeInput as ve,ConsentTrackerStatus as r,ConsentVariantInput as ye,Controllership as be,DataCategoryType as i,DataFlowScope as a,DataProtectionImpactAssessmentStatus as xe,DefaultConsentOption as Se,EnricherType as Ce,IsoCountryCode as o,IsoCountrySubdivisionCode as s,LargeLanguageModelClient as we,LogicOperator as Te,PolicyType as Ee,PreferenceStoreAuthLevel as De,PreferenceTopicType as Oe,PreflightRequestStatus as ke,PrivacyCenterComponentStyles as Ae,PrivacyCenterFooterLayout as je,PrivacyCenterTextStyles as Me,ProcessingPurpose as c,PromptAVendorEmailCompletionLinkType as Ne,PromptAVendorEmailSendType as Pe,PromptFilePurpose as Fe,RegionDetectionMethod as Ie,RegionsOperator as Le,RequestAction as l,RequestActionObjectResolver as u,RetentionScheduleOperation as Re,RetentionScheduleType as ze,RetentionType as Be,ScopeName as Ve,SignedIabAgreementOption as He,SubDataPointDataSubCategoryGuessStatus as Ue,TelemetryPartitionStrategy as We,TranscendProduct as Ge,UnknownRequestPolicy as d,UnstructuredSubDataPointRecommendationStatus as Ke,WorkflowConfigType as qe,WorkflowConfigVisibility as Je}from"@transcend-io/privacy-types";import{applyEnum as f,valuesOf as p}from"@transcend-io/type-utils";import{BrowserLanguage as Ye,InitialViewState as Xe,OnConsentExpiry as Ze,UserPrivacySignalEnum as Qe}from"@transcend-io/airgap.js-types";import{LOCALE_KEY as m}from"@transcend-io/internationalization";import*as h from"io-ts";const g=({TEnabledRoutes:e})=>h.type({enabledRoutes:e}),_=({TRouteName:t})=>h.type({routeName:t,enabledPolicies:h.array(p(e))}),v=h.type({title:h.string}),y=h.intersection([h.type({name:h.string,value:h.string}),h.partial({isSecret:h.boolean})]),b=h.type({title:h.string}),x=h.intersection([h.type({name:h.string,description:h.string}),h.partial({"sso-department":h.string,"sso-group":h.string,"sso-title":h.string,"parent-team-name":h.string,users:h.array(h.string),scopes:h.array(p(Ve))})]),S=h.intersection([h.type({title:h.string,"output-identifiers":h.array(h.string)}),h.partial({description:h.string,url:h.string,type:p(Ce),"input-identifier":h.string,testRegex:h.string,lookerQueryTitle:h.string,expirationDuration:h.number,transitionRequestStatus:p(ke),phoneNumbers:h.array(h.string),regionList:h.array(p({...o,...s})),"data-subjects":h.array(h.string),headers:h.array(y),"privacy-actions":h.array(p(l))})]),C=h.intersection([h.type({purpose:p(c)}),h.partial({name:h.string})]),w=h.intersection([h.type({category:p(i)}),h.partial({name:h.string})]),T=h.intersection([h.type({category:w,status:p(Ue),confidence:h.number}),h.partial({classifierVersion:h.number})]),$e=h.intersection([h.type({category:w,status:p(Ke),confidence:h.number}),h.partial({classifierVersion:h.number})]),E=h.intersection([h.type({name:h.string}),h.partial({description:h.string,color:h.string})]),D=h.intersection([h.type({name:h.string,type:p(ue)}),h.partial({description:h.string,resources:h.array(p(n)),values:h.array(E)})]),O=h.type({key:h.string,values:h.array(h.string)}),k=h.intersection([h.type({name:h.string,instructions:h.string,agentId:h.string,codeInterpreterEnabled:h.boolean,retrievalEnabled:h.boolean,"large-language-model":h.type({name:h.string,client:p(we)})}),h.partial({description:h.string,prompt:h.string,owners:h.array(h.string),teams:h.array(h.string),"agent-functions":h.array(h.string),"agent-files":h.array(h.string)})]),A=h.type({name:h.string,description:h.string,parameters:h.string}),j=h.intersection([h.type({name:h.string,fileId:h.string,size:h.number,purpose:p(Fe)}),h.partial({description:h.string})]),M=h.intersection([h.type({title:h.string}),h.partial({description:h.string,dataProcessingAgreementLink:h.string,contactName:h.string,contactPhone:h.string,address:h.string,headquarterCountry:p(o),headquarterSubDivision:p(s),websiteUrl:h.string,businessEntity:h.string,owners:h.array(h.string),teams:h.array(h.string),attributes:h.array(O)})]),N=h.intersection([h.type({name:h.string,category:p(i)}),h.partial({description:h.string,regex:h.string,owners:h.array(h.string),teams:h.array(h.string),attributes:h.array(O)})]),P=h.intersection([h.type({name:h.string,purpose:p(c)}),h.partial({description:h.string,owners:h.array(h.string),teams:h.array(h.string),attributes:h.array(O)})]),F=h.type({title:h.string,content:h.string}),I=h.type({title:h.string,content:h.string}),L=h.type({title:h.string,description:h.string,prompts:h.array(h.string)}),R=h.intersection([h.type({key:h.string}),h.partial({title:h.string,description:h.union([h.string,h.null]),purposes:h.array(C),categories:h.array(w),"guessed-categories":h.array(T),"access-request-visibility-enabled":h.boolean,"erasure-request-redaction-enabled":h.boolean,attributes:h.array(O)})]),z=h.intersection([h.type({key:h.string}),h.partial({path:h.array(h.string),title:h.string,description:h.string,"data-collection-tag":h.string,"privacy-action-queries":h.partial(f(u,()=>h.string)),"privacy-actions":h.array(p(u)),fields:h.array(R),owners:h.array(h.string),teams:h.array(h.string)})]),B=h.partial({"notify-email-address":h.string,"send-frequency":h.number,"send-type":p(Pe),"include-identifiers-attachment":h.boolean,"completion-link-type":p(Ne),"manual-work-retry-frequency":h.string}),V=h.intersection([h.type({title:h.string}),h.partial({description:h.string,address:h.string,headquarterCountry:p(o),headquarterSubDivision:p(s),dataProtectionOfficerName:h.string,dataProtectionOfficerEmail:h.string,attributes:h.array(O),owners:h.array(h.string),teams:h.array(h.string)})]),H=h.partial({country:p(o),countrySubDivision:p(s)}),U=h.intersection([h.type({title:h.string}),h.partial({description:h.string,securityMeasureDetails:h.string,controllerships:h.array(p(be)),storageRegions:h.array(H),transferRegions:h.array(H),retentionType:p(Be),retentionPeriod:h.number,dataProtectionImpactAssessmentLink:h.string,dataProtectionImpactAssessmentStatus:p(xe),attributes:h.array(O),dataSiloTitles:h.array(h.string),dataSubjectTypes:h.array(h.string),teamNames:h.array(h.string),ownerEmails:h.array(h.string),processingSubPurposes:h.array(C),dataSubCategories:h.array(w),saaSCategories:h.array(h.string)})]),et=h.intersection([h.type({name:h.string,codePackageType:p(fe)}),h.partial({description:h.string,repositoryUrl:h.string,catalogIntegrationName:h.string,documentationLinks:h.array(h.string),ownerEmails:h.array(h.string),teamNames:h.array(h.string)})]),W=h.intersection([h.type({name:h.string}),h.partial({version:h.string,isDevDependency:h.boolean})]),tt=h.intersection([h.type({name:h.string,type:p(fe),relativePath:h.string,repositoryName:h.string}),h.partial({description:h.string,softwareDevelopmentKits:h.array(W),teamNames:h.array(h.string),ownerEmails:h.array(h.string)})]),nt=h.intersection([h.type({name:h.string,url:h.string}),h.partial({description:h.string,teamNames:h.array(h.string),ownerEmails:h.array(h.string)})]),G=h.intersection([h.type({type:h.string}),h.partial({active:h.boolean,title:h.string,adminDashboardDefaultSilentMode:h.boolean,supportsAuthorizedAgent:h.boolean,actions:h.array(p(l))})]),K=h.intersection([h.type({type:p(l)}),h.partial({skipSecondaryIfNoFiles:h.boolean,skipDownloadableStep:h.boolean,requiresReview:h.boolean,waitingPeriod:h.number,regionDetectionMethod:p(Ie),regionList:h.array(p({...o,...s})),regionBlockList:h.array(p({...o,...s}))})]),q=h.intersection([h.type({name:h.string,type:h.string}),h.partial({regex:h.string,selectOptions:h.array(h.string),privacyCenterVisibility:h.array(p(l)),dataSubjects:h.array(h.string),isRequiredInForm:h.boolean,placeholder:h.string,displayTitle:h.string,displayDescription:h.string,displayOrder:h.number,isUniqueOnPreferenceStore:h.boolean})]),rt=h.intersection([h.type({value:h.string,type:p(a)}),h.partial({description:h.string,trackingPurposes:h.array(h.string),service:h.string,status:p(r),owners:h.array(h.string),teams:h.array(h.string),attributes:h.array(O)})]),it=h.intersection([h.type({name:h.string}),h.partial({isRegex:h.boolean,description:h.string,trackingPurposes:h.array(h.string),service:h.string,status:p(r),owners:h.array(h.string),teams:h.array(h.string),attributes:h.array(O)})]),at=h.intersection([h.type({name:h.string}),h.partial({displayName:h.string,regions:h.array(H),onConsentExpiry:p(Ze),consentExpiry:h.number,operator:p(Le),displayPriority:h.number,viewState:p(Xe),purposes:h.array(h.type({trackingType:h.string})),optedOutPurposes:h.array(h.type({trackingType:h.string})),browserLanguages:h.array(p(Ye)),browserTimeZones:h.array(p(de)),consentUiVariantSlug:h.string})]),ot=h.intersection([h.type({name:h.string}),h.partial({partition:h.string})]),st=h.partial({version:h.string,bundleUrls:h.record(p(ge),h.string),domains:h.array(h.string),partition:h.string,consentPrecedence:p(_e),unknownRequestPolicy:p(d),unknownCookiePolicy:p(d),syncEndpoint:h.string,telemetryPartitioning:p(We),signedIabAgreement:p(He),experiences:h.array(at),theme:h.partial({primaryColor:h.string,fontColor:h.string,privacyPolicy:h.string,prompt:h.number}),syncGroups:h.string,consentVariants:h.array(ye),consentThemes:h.array(ve)}),ct=h.partial({isDisabled:h.boolean,showPrivacyRequestButton:h.boolean,showPolicies:h.boolean,showTrackingTechnologies:h.boolean,showCookies:h.boolean,showDataFlows:h.boolean,showConsentManager:h.boolean,showManageYourPrivacy:h.boolean,showMarketingPreferences:h.boolean,locales:h.array(p(m)),defaultLocale:p(m),preferBrowserDefaultLocale:h.boolean,supportEmail:h.string,replyToEmail:h.string,useNoReplyEmailAddress:h.boolean,useCustomEmailDomain:h.boolean,transformAccessReportJsonToCsv:h.boolean,home:h.string,expandSideMenuByDefault:h.boolean,workflowsCustomFieldsRequired:h.boolean,displayedChildOrganizationUris:h.array(h.string),footerLayout:p(je),footerLinks:h.array(h.intersection([h.type({title:h.string}),h.partial({url:h.string,iconOnly:h.boolean})])),theme:h.partial({colors:h.partial(f(he,()=>h.string)),componentStyles:Ae,textStyles:Me})}),lt=h.intersection([h.type({title:h.string}),h.partial({type:p(Ee),effectiveOn:h.string,disableEffectiveOn:h.boolean,content:h.string,disabledLocales:h.array(p(m))})]),ut=h.intersection([h.type({id:h.string}),h.partial({targetReactIntlId:h.string,description:h.string,defaultMessage:h.string,translations:h.partial(f(m,()=>h.string))})]),dt=h.intersection([h.type({title:h.string,integrationName:h.string}),h.partial({"outer-type":h.string,description:h.string,url:h.string,"api-key-title":h.string,"sombra-id":h.string,headers:h.array(y),"data-subjects":h.array(h.string),"identity-keys":h.array(h.string),"deletion-dependencies":h.array(h.string),owners:h.array(h.string),teams:h.array(h.string),disabled:h.boolean,datapoints:h.array(z),"email-settings":B,country:p(o),countrySubDivision:p(s),attributes:h.array(O),businessEntityTitles:h.array(h.string)})]),ft=h.intersection([h.type({title:h.string,productLine:p(Ge)}),h.partial({description:h.string,hidden:h.boolean})]),pt=h.intersection([h.type({title:h.string,type:p(ee),collections:h.array(h.string)}),h.partial({priority:p(te),customerExperienceActionItemId:h.string,dueDate:h.string,resolved:h.boolean,notes:h.string,link:h.string,users:h.array(h.string),teams:h.array(h.string),attributes:h.array(O)})]),J=h.intersection([h.type({"depends-on-question-reference-id":h.string,"comparison-operator":p(me)}),h.partial({"comparison-operands":h.array(h.string)})]),mt=h.recursion(`AssessmentNestedRuleInput`,e=>h.intersection([h.type({"logic-operator":p(Te)}),h.partial({rules:h.array(J),"nested-rules":h.array(e)})])),ht=h.intersection([h.type({action:p(le)}),h.partial({rule:J,"nested-rule":mt})]),gt=h.partial({"risk-level":h.string,"risk-matrix-column":h.string,"risk-matrix-row":h.string}),_t=h.intersection([h.type({"comparison-operands":h.array(h.string),"comparison-operator":p(me)}),h.partial({"risk-level":h.string,"risk-matrix-column":h.string,"risk-matrix-row":h.string})]),vt=h.type({value:h.string}),yt=h.intersection([h.type({title:h.string,type:p(oe)}),h.partial({"sub-type":p(ae),placeholder:h.string,description:h.string,"is-required":h.boolean,"reference-id":h.string,"display-logic":ht,"risk-logic":h.array(_t),"risk-categories":h.array(h.string),"risk-framework":h.string,"answer-options":h.array(vt),"selected-answers":h.array(h.string),"allowed-mime-types":h.array(h.string),"allow-select-other":h.boolean,"sync-model":p(ce),"sync-column":p(se),"attribute-key":h.string,"require-risk-evaluation":h.boolean,"require-risk-matrix-evaluation":h.boolean})]),Y=h.intersection([h.type({title:h.string,questions:h.array(yt)}),h.partial({assignees:h.array(h.string),"external-assignees":h.array(h.string),status:h.string,"is-reviewed":h.boolean})]),X=h.type({type:p(ze),"duration-days":h.number,operand:p(Re)}),bt=h.intersection([h.type({title:h.string}),h.partial({sections:h.array(Y),description:h.string,status:p(ie),source:p(re),creator:h.string,locked:h.boolean,"parent-id":h.string,archived:h.boolean,"created-at":h.string,"attribute-keys":h.array(h.string),"retention-schedule":X,templates:h.array(h.string)})]),Z=h.type({title:h.string,type:p(n)}),xt=h.intersection([h.type({title:h.string,group:h.string}),h.partial({sections:h.array(Y),creator:h.string,description:h.string,status:p(ne),assignees:h.array(h.string),"external-assignees":h.array(h.string),reviewers:h.array(h.string),locked:h.boolean,archived:h.boolean,external:h.boolean,"title-is-internal":h.boolean,"due-date":h.string,"created-at":h.string,"assigned-at":h.string,"submitted-at":h.string,"approved-at":h.string,"rejected-at":h.string,resources:h.array(Z),rows:h.array(Z),"retention-schedule":X,attributes:h.array(O)})]),Q=h.type({title:h.string,slug:h.string}),St=h.intersection([h.type({type:p(Oe),title:h.string,description:h.string,slug:h.string}),h.partial({color:h.string,"default-configuration":h.string,"show-in-privacy-center":h.boolean,options:h.array(Q)})]),Ct=h.intersection([h.type({trackingType:h.string,title:h.string,name:h.string}),h.partial({description:h.string,"is-active":h.boolean,configurable:h.boolean,"display-order":h.number,"show-in-privacy-center":h.boolean,"show-in-consent-manager":h.boolean,"preference-topics":h.array(St),"auth-level":p(De),"opt-out-signals":h.array(p(Qe)),"default-consent":p(Se)})]),wt=h.type({"tracking-type":h.string,"matching-state":h.boolean}),Tt=h.intersection([h.type({name:h.string,purposes:h.array(wt)}),h.partial({"workflow-title":h.string,"action-type":p(l),"data-subject-type":h.string,"is-silent":h.boolean,"allow-unauthenticated":h.boolean,"is-active":h.boolean,"data-silo-titles":h.array(h.string)})]),Et=h.intersection([h.type({title:h.string,"action-type":p(l)}),h.partial({"internal-name":h.string,subtitle:h.string,description:h.string,"data-subject-type":h.string,visibility:p(Je),type:p(qe),"collect-data-subject-regions":p(pe),"region-list":h.array(p({...o,...s})),"expiry-time":h.array(h.type({region:p({default:`default`,...o,...s}),value:h.number})),"attribute-keys":h.array(h.string)})]),Dt=h.intersection([h.type({resourceId:h.string,plugin:h.string,suggestedCatalog:h.string,containsSensitiveData:h.string,status:h.string}),h.partial({country:p(o),countrySubDivision:p(s),plaintextContext:h.string,title:h.union([h.string,h.null])})]),Ot=h.partial({"action-items":h.array(pt),"action-item-collections":h.array(ft),"api-keys":h.array(b),teams:h.array(x),templates:h.array(v),enrichers:h.array(S),attributes:h.array(D),"business-entities":h.array(V),vendors:h.array(M),"data-categories":h.array(N),"processing-purposes":h.array(P),"data-subjects":h.array(G),actions:h.array(K),identifiers:h.array(q),"data-silos":h.array(dt),"data-flows":h.array(rt),cookies:h.array(it),"consent-manager":st,prompts:h.array(F),"prompt-partials":h.array(I),"prompt-groups":h.array(L),agents:h.array(k),"agent-functions":h.array(A),"agent-files":h.array(j),"privacy-center":ct,policies:h.array(lt),messages:h.array(ut),partitions:h.array(ot),"assessment-templates":h.array(bt),assessments:h.array(xt),"processing-activities":h.array(U),purposes:h.array(Ct),"system-discovery":h.array(Dt),"preference-workflow-configs":h.array(Tt),"workflow-configs":h.array(Et),"preference-options":h.array(Q)}),kt=h.type({organizationName:h.string,apiKey:h.string,organizationId:h.string}),At=h.intersection([h.type({"Connections Made To":h.string,Type:p(a),Purpose:h.string}),h.partial({Service:h.string,Notes:h.string,Owners:h.string,Teams:h.string,Status:p(r)}),h.record(h.string,h.string)]),jt=h.intersection([h.type({Name:h.string,Purpose:h.string}),h.partial({Service:h.string,Notes:h.string,Owners:h.string,Teams:h.string,Status:p(r)}),h.record(h.string,h.string)]),Mt=h.type({title:h.string,description:h.string,cookies:h.array(h.type({name:h.string,trackingPurposes:h.array(h.string)})),dataFlows:h.array(h.type({value:h.string,type:p(a),trackingPurposes:h.array(h.string)}))}),Nt=p(e),Pt=_({TRouteName:p(t)});p(t);const Ft=h.array(Pt),$=g({TEnabledRoutes:Ft}),It=h.partial({enabledIntegrations:h.partial({openAI:$})}),Lt=h.partial({promptRunName:h.string,promptId:h.string,promptTitle:h.string,promptGroupId:h.string,promptGroupTitle:h.string,runByEmployeeEmail:h.string,applicationId:h.string,applicationName:h.string,codePackageName:h.string,repositoryName:h.string,applicationUserCoreIdentifier:h.string,applicationUserName:h.string,slackMessageTs:h.string,slackTeamId:h.string,slackChannelId:h.string,slackChannelName:h.string}),Rt=h.intersection([h.type({title:h.string}),h.partial({value:h.string})]),zt=h.type({columns:h.array(Rt)}),Bt=h.partial({rows:h.array(zt),json:h.string});export{lt as $,jt as A,z as B,W as C,_ as Ct,St as D,Mt as E,$e as F,ut as G,R as H,At as I,$ as J,Pt as K,rt as L,T as M,N,Q as O,w as P,Lt as Q,dt as R,tt as S,Et as St,st as T,q as U,S as V,Bt as W,It as X,ot as Y,Nt as Z,bt as _,x as _t,A as a,C as at,E as b,M as bt,vt as c,F as ct,mt as d,nt as dt,Tt as et,Z as f,gt as ft,yt as g,kt as gt,Y as h,et as ht,j as i,P as it,it as j,Ct as k,ht as l,I as lt,J as m,Dt as mt,ft as n,ct as nt,k as o,B as ot,X as p,_t as pt,Ft as q,pt as r,U as rt,b as s,L as st,K as t,wt as tt,xt as u,H as ut,D as v,v as vt,at as w,g as wt,V as x,y as xt,O as y,Ot as yt,G as z};
|
|
2
|
-
//# sourceMappingURL=codecs-
|
|
2
|
+
//# sourceMappingURL=codecs-Dch3sv5m.mjs.map
|