@transcend-io/cli 10.2.2 → 10.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{app-DcwjuHHn.mjs → app-YxBonXRu.mjs} +16 -16
- package/dist/{app-DcwjuHHn.mjs.map → app-YxBonXRu.mjs.map} +1 -1
- package/dist/{approvePrivacyRequests-vTXeO7hC.mjs → approvePrivacyRequests-CHcoHhXJ.mjs} +2 -2
- package/dist/{approvePrivacyRequests-vTXeO7hC.mjs.map → approvePrivacyRequests-CHcoHhXJ.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/{buildXdiSyncEndpoint-Bd9SRD1A.mjs → buildXdiSyncEndpoint-hkf0Y30p.mjs} +2 -2
- package/dist/{buildXdiSyncEndpoint-Bd9SRD1A.mjs.map → buildXdiSyncEndpoint-hkf0Y30p.mjs.map} +1 -1
- package/dist/{bulkRestartRequests-BvURrcOl.mjs → bulkRestartRequests-DH9Jp_RK.mjs} +2 -2
- package/dist/{bulkRestartRequests-BvURrcOl.mjs.map → bulkRestartRequests-DH9Jp_RK.mjs.map} +1 -1
- package/dist/{bulkRetryEnrichers-CTbBdTEm.mjs → bulkRetryEnrichers-DkSvtdEl.mjs} +2 -2
- package/dist/{bulkRetryEnrichers-CTbBdTEm.mjs.map → bulkRetryEnrichers-DkSvtdEl.mjs.map} +1 -1
- package/dist/{cancelPrivacyRequests-p9OEzUXv.mjs → cancelPrivacyRequests-BFQB2ULz.mjs} +2 -2
- package/dist/{cancelPrivacyRequests-p9OEzUXv.mjs.map → cancelPrivacyRequests-BFQB2ULz.mjs.map} +1 -1
- package/dist/{command-CuxgABlk.mjs → command-CN5em6gV.mjs} +2 -2
- package/dist/{command-CuxgABlk.mjs.map → command-CN5em6gV.mjs.map} +1 -1
- package/dist/{constants-D22_ckyl.mjs → constants-3jGxMMU0.mjs} +2 -2
- package/dist/{constants-D22_ckyl.mjs.map → constants-3jGxMMU0.mjs.map} +1 -1
- package/dist/{createExtraKeyHandler-BkfSV_aF.mjs → createExtraKeyHandler-BvRHTB7t.mjs} +2 -2
- package/dist/{createExtraKeyHandler-BkfSV_aF.mjs.map → createExtraKeyHandler-BvRHTB7t.mjs.map} +1 -1
- package/dist/{downloadPrivacyRequestFiles-CqHT6HSU.mjs → downloadPrivacyRequestFiles-D01oQwPh.mjs} +2 -2
- package/dist/{downloadPrivacyRequestFiles-CqHT6HSU.mjs.map → downloadPrivacyRequestFiles-D01oQwPh.mjs.map} +1 -1
- package/dist/{generateCrossAccountApiKeys-Cj3YCdZN.mjs → generateCrossAccountApiKeys-ByoSllWf.mjs} +2 -2
- package/dist/{generateCrossAccountApiKeys-Cj3YCdZN.mjs.map → generateCrossAccountApiKeys-ByoSllWf.mjs.map} +1 -1
- package/dist/{impl-C-1-lvCm.mjs → impl-6RiD21Sa.mjs} +2 -2
- package/dist/{impl-C-1-lvCm.mjs.map → impl-6RiD21Sa.mjs.map} +1 -1
- package/dist/{impl-BzWh_Xg7.mjs → impl-B-KkG8sL.mjs} +2 -2
- package/dist/{impl-BzWh_Xg7.mjs.map → impl-B-KkG8sL.mjs.map} +1 -1
- package/dist/{impl-B1YGN9Iu.mjs → impl-B21yeOPo.mjs} +2 -2
- package/dist/{impl-B1YGN9Iu.mjs.map → impl-B21yeOPo.mjs.map} +1 -1
- package/dist/{impl-CXBLyoPL.mjs → impl-BHnK3YzA.mjs} +2 -2
- package/dist/{impl-CXBLyoPL.mjs.map → impl-BHnK3YzA.mjs.map} +1 -1
- package/dist/{impl-56wfH4jn.mjs → impl-BL_svHBA.mjs} +2 -2
- package/dist/{impl-56wfH4jn.mjs.map → impl-BL_svHBA.mjs.map} +1 -1
- package/dist/{impl-122G24x5.mjs → impl-BT8xHWcp.mjs} +2 -2
- package/dist/{impl-122G24x5.mjs.map → impl-BT8xHWcp.mjs.map} +1 -1
- package/dist/{impl-BJTCOmGC.mjs → impl-BTJ9Ax9U.mjs} +2 -2
- package/dist/{impl-BJTCOmGC.mjs.map → impl-BTJ9Ax9U.mjs.map} +1 -1
- package/dist/{impl-7rVYG2LQ.mjs → impl-BUqLJMMe.mjs} +2 -2
- package/dist/{impl-7rVYG2LQ.mjs.map → impl-BUqLJMMe.mjs.map} +1 -1
- package/dist/{impl-DJFLycxa.mjs → impl-BgsG_OyW.mjs} +2 -2
- package/dist/{impl-DJFLycxa.mjs.map → impl-BgsG_OyW.mjs.map} +1 -1
- package/dist/{impl-BF0jh34q.mjs → impl-Bqu5Lx4P.mjs} +2 -2
- package/dist/{impl-BF0jh34q.mjs.map → impl-Bqu5Lx4P.mjs.map} +1 -1
- package/dist/{impl-BPqs_ltg.mjs → impl-BxfU1aWb.mjs} +2 -2
- package/dist/{impl-BPqs_ltg.mjs.map → impl-BxfU1aWb.mjs.map} +1 -1
- package/dist/{impl-gSRG1ELM.mjs → impl-C-te3aG1.mjs} +2 -2
- package/dist/{impl-gSRG1ELM.mjs.map → impl-C-te3aG1.mjs.map} +1 -1
- package/dist/{impl-D50QXpV8.mjs → impl-C0MQfgew.mjs} +2 -2
- package/dist/{impl-D50QXpV8.mjs.map → impl-C0MQfgew.mjs.map} +1 -1
- package/dist/{impl-CZrCBjBJ.mjs → impl-CIy0FJDu.mjs} +2 -2
- package/dist/{impl-CZrCBjBJ.mjs.map → impl-CIy0FJDu.mjs.map} +1 -1
- package/dist/{impl-Cziyty3N.mjs → impl-CLomU95E.mjs} +2 -2
- package/dist/{impl-Cziyty3N.mjs.map → impl-CLomU95E.mjs.map} +1 -1
- package/dist/{impl-Bu8p8dqt.mjs → impl-CR6ZJWOv.mjs} +2 -2
- package/dist/{impl-Bu8p8dqt.mjs.map → impl-CR6ZJWOv.mjs.map} +1 -1
- package/dist/{impl-SEFLf4jX.mjs → impl-Cd9M2W17.mjs} +2 -2
- package/dist/{impl-SEFLf4jX.mjs.map → impl-Cd9M2W17.mjs.map} +1 -1
- package/dist/{impl-DCS69D4u.mjs → impl-CgP0n0wd.mjs} +2 -2
- package/dist/{impl-DCS69D4u.mjs.map → impl-CgP0n0wd.mjs.map} +1 -1
- package/dist/{impl-0w7yd5pK.mjs → impl-D5XV5PNK.mjs} +2 -2
- package/dist/{impl-0w7yd5pK.mjs.map → impl-D5XV5PNK.mjs.map} +1 -1
- package/dist/{impl-Ozxwpuoj.mjs → impl-DLoHcNEh.mjs} +2 -2
- package/dist/{impl-Ozxwpuoj.mjs.map → impl-DLoHcNEh.mjs.map} +1 -1
- package/dist/{impl-Ci8n7Ohd.mjs → impl-DODB4fy7.mjs} +2 -2
- package/dist/{impl-Ci8n7Ohd.mjs.map → impl-DODB4fy7.mjs.map} +1 -1
- package/dist/{impl-D3XO6Mas.mjs → impl-D_rqNrpu.mjs} +2 -2
- package/dist/{impl-D3XO6Mas.mjs.map → impl-D_rqNrpu.mjs.map} +1 -1
- package/dist/{impl-DCqgx2-j.mjs → impl-DkbTOHQu.mjs} +2 -2
- package/dist/{impl-DCqgx2-j.mjs.map → impl-DkbTOHQu.mjs.map} +1 -1
- package/dist/{impl-Di_93pXw.mjs → impl-DrnKD83Y.mjs} +2 -2
- package/dist/{impl-Di_93pXw.mjs.map → impl-DrnKD83Y.mjs.map} +1 -1
- package/dist/{impl-BdafaDmy.mjs → impl-DtozRl7B.mjs} +2 -2
- package/dist/{impl-BdafaDmy.mjs.map → impl-DtozRl7B.mjs.map} +1 -1
- package/dist/{impl-CruHl43V.mjs → impl-DzQom8Ac.mjs} +2 -2
- package/dist/{impl-CruHl43V.mjs.map → impl-DzQom8Ac.mjs.map} +1 -1
- package/dist/{impl-FIRoVM7G.mjs → impl-TiSebcGV.mjs} +2 -2
- package/dist/{impl-FIRoVM7G.mjs.map → impl-TiSebcGV.mjs.map} +1 -1
- package/dist/{impl-BnRNJ3pm.mjs → impl-U4BtI50x.mjs} +2 -2
- package/dist/{impl-BnRNJ3pm.mjs.map → impl-U4BtI50x.mjs.map} +1 -1
- package/dist/{impl-jXl2dlnG.mjs → impl-a3kmDc3F.mjs} +2 -2
- package/dist/{impl-jXl2dlnG.mjs.map → impl-a3kmDc3F.mjs.map} +1 -1
- package/dist/{impl-Wbg70K6q.mjs → impl-ofnzAOCQ.mjs} +2 -2
- package/dist/{impl-Wbg70K6q.mjs.map → impl-ofnzAOCQ.mjs.map} +1 -1
- package/dist/{impl-NkVnS7sH.mjs → impl-p5wX1pxV.mjs} +2 -2
- package/dist/{impl-NkVnS7sH.mjs.map → impl-p5wX1pxV.mjs.map} +1 -1
- package/dist/{impl-HoctnN3Y.mjs → impl-pLA7nRs7.mjs} +2 -2
- package/dist/{impl-HoctnN3Y.mjs.map → impl-pLA7nRs7.mjs.map} +1 -1
- package/dist/{impl-Cf-R4Ale.mjs → impl-s3_G2nu4.mjs} +2 -2
- package/dist/{impl-Cf-R4Ale.mjs.map → impl-s3_G2nu4.mjs.map} +1 -1
- package/dist/index.d.mts +24 -9
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{markRequestDataSiloIdsCompleted-DTfOjCUB.mjs → markRequestDataSiloIdsCompleted-CrvirN7Y.mjs} +2 -2
- package/dist/{markRequestDataSiloIdsCompleted-DTfOjCUB.mjs.map → markRequestDataSiloIdsCompleted-CrvirN7Y.mjs.map} +1 -1
- package/dist/{markSilentPrivacyRequests-DWyW4Ndj.mjs → markSilentPrivacyRequests-CmRNzmjg.mjs} +2 -2
- package/dist/{markSilentPrivacyRequests-DWyW4Ndj.mjs.map → markSilentPrivacyRequests-CmRNzmjg.mjs.map} +1 -1
- package/dist/{notifyPrivacyRequestsAdditionalTime-BIr4P7lx.mjs → notifyPrivacyRequestsAdditionalTime-B22rtY99.mjs} +2 -2
- package/dist/{notifyPrivacyRequestsAdditionalTime-BIr4P7lx.mjs.map → notifyPrivacyRequestsAdditionalTime-B22rtY99.mjs.map} +1 -1
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-Cb7HbDD8.mjs → pullChunkedCustomSiloOutstandingIdentifiers-DRKraWKp.mjs} +2 -2
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-Cb7HbDD8.mjs.map → pullChunkedCustomSiloOutstandingIdentifiers-DRKraWKp.mjs.map} +1 -1
- package/dist/{pullManualEnrichmentIdentifiersToCsv-WvXvuTGM.mjs → pullManualEnrichmentIdentifiersToCsv-B7thv3KR.mjs} +2 -2
- package/dist/{pullManualEnrichmentIdentifiersToCsv-WvXvuTGM.mjs.map → pullManualEnrichmentIdentifiersToCsv-B7thv3KR.mjs.map} +1 -1
- package/dist/{pushCronIdentifiersFromCsv-DJywyHYU.mjs → pushCronIdentifiersFromCsv-C5lVs27y.mjs} +2 -2
- package/dist/{pushCronIdentifiersFromCsv-DJywyHYU.mjs.map → pushCronIdentifiersFromCsv-C5lVs27y.mjs.map} +1 -1
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-DT4-FUe0.mjs → pushManualEnrichmentIdentifiersFromCsv-BTAVIBR0.mjs} +2 -2
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-DT4-FUe0.mjs.map → pushManualEnrichmentIdentifiersFromCsv-BTAVIBR0.mjs.map} +1 -1
- package/dist/{removeUnverifiedRequestIdentifiers-Dt5hvhtq.mjs → removeUnverifiedRequestIdentifiers-DwjMcxXT.mjs} +2 -2
- package/dist/{removeUnverifiedRequestIdentifiers-Dt5hvhtq.mjs.map → removeUnverifiedRequestIdentifiers-DwjMcxXT.mjs.map} +1 -1
- package/dist/{retryRequestDataSilos-Ds3bF0yd.mjs → retryRequestDataSilos-B-0QLwFk.mjs} +2 -2
- package/dist/{retryRequestDataSilos-Ds3bF0yd.mjs.map → retryRequestDataSilos-B-0QLwFk.mjs.map} +1 -1
- package/dist/{skipPreflightJobs-h8H7ZEX6.mjs → skipPreflightJobs-qwmjRAwj.mjs} +2 -2
- package/dist/{skipPreflightJobs-h8H7ZEX6.mjs.map → skipPreflightJobs-qwmjRAwj.mjs.map} +1 -1
- package/dist/{skipRequestDataSilos-C8y5PYaZ.mjs → skipRequestDataSilos-BCTEwFwj.mjs} +2 -2
- package/dist/{skipRequestDataSilos-C8y5PYaZ.mjs.map → skipRequestDataSilos-BCTEwFwj.mjs.map} +1 -1
- package/dist/{streamPrivacyRequestsToCsv-CipyYYbS.mjs → streamPrivacyRequestsToCsv-DXvqlXBS.mjs} +2 -2
- package/dist/{streamPrivacyRequestsToCsv-CipyYYbS.mjs.map → streamPrivacyRequestsToCsv-DXvqlXBS.mjs.map} +1 -1
- package/dist/{updateConsentManagerVersionToLatest-F6ywYQg4.mjs → updateConsentManagerVersionToLatest-CvQ7QOp0.mjs} +2 -2
- package/dist/{updateConsentManagerVersionToLatest-F6ywYQg4.mjs.map → updateConsentManagerVersionToLatest-CvQ7QOp0.mjs.map} +1 -1
- package/dist/{uploadConsents-C6gFr33S.mjs → uploadConsents-C04e-MdM.mjs} +2 -2
- package/dist/{uploadConsents-C6gFr33S.mjs.map → uploadConsents-C04e-MdM.mjs.map} +1 -1
- package/dist/{uploadCookiesFromCsv-DydhyjYq.mjs → uploadCookiesFromCsv-Cj6q_TXf.mjs} +2 -2
- package/dist/{uploadCookiesFromCsv-DydhyjYq.mjs.map → uploadCookiesFromCsv-Cj6q_TXf.mjs.map} +1 -1
- package/dist/{uploadDataFlowsFromCsv-BDs2jS3I.mjs → uploadDataFlowsFromCsv-CJmOUYY0.mjs} +2 -2
- package/dist/{uploadDataFlowsFromCsv-BDs2jS3I.mjs.map → uploadDataFlowsFromCsv-CJmOUYY0.mjs.map} +1 -1
- package/dist/{uploadPrivacyRequestsFromCsv-oVE4Am-C.mjs → uploadPrivacyRequestsFromCsv-BxznEuMq.mjs} +2 -2
- package/dist/{uploadPrivacyRequestsFromCsv-oVE4Am-C.mjs.map → uploadPrivacyRequestsFromCsv-BxznEuMq.mjs.map} +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-DzQom8Ac.mjs","names":[],"sources":["../src/commands/admin/parquet-to-csv/ui/plugin.ts","../src/commands/admin/parquet-to-csv/impl.ts"],"sourcesContent":["import {\n makeHeader,\n makeWorkerRows,\n type ChunkSlotProgress,\n type CommonCtx,\n type DashboardPlugin,\n} from '../../../../lib/pooling/index.js';\n\n/**\n * Header for parquet-to-csv (no extra totals block).\n *\n * @param ctx - Dashboard context.\n * @returns Header lines.\n */\nfunction renderHeader<TTotals>(ctx: CommonCtx<TTotals, ChunkSlotProgress>): string[] {\n // no extra lines — reuse the shared header as-is\n return makeHeader(ctx);\n}\n\n/**\n * Worker rows for parquet-to-csv — share the generic row renderer.\n *\n * @param ctx - Dashboard context.\n * @returns Array of strings, each representing one worker row.\n */\nfunction renderWorkers<TTotals>(ctx: CommonCtx<TTotals, ChunkSlotProgress>): string[] {\n return makeWorkerRows(ctx);\n}\n\nexport const parquetToCsvPlugin: DashboardPlugin<unknown, ChunkSlotProgress> = {\n renderHeader,\n renderWorkers,\n // no extras\n};\n","import {\n CHILD_FLAG,\n type PoolHooks,\n runPool,\n computePoolSize,\n PoolCancelledError,\n resolveWorkerPath,\n} from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport type { LocalContext } from '../../../context.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { collectParquetFilesOrExit } from '../../../lib/helpers/index.js';\nimport {\n createExtraKeyHandler,\n dashboardPlugin,\n installInteractiveSwitcher,\n} from '../../../lib/pooling/index.js';\nimport { logger } from '../../../logger.js';\nimport { parquetToCsvPlugin } from './ui/index.js';\nimport type { ParquetProgress, ParquetResult, ParquetTask } from './worker.js';\n\n/** No custom totals for the header; the runner’s built-ins suffice. */\ntype Totals = Record<string, never>;\n\nexport type ParquetToCsvCommandFlags = {\n directory: string;\n outputDir?: string;\n clearOutputDir: boolean;\n concurrency?: number;\n viewerMode: boolean;\n};\n\n/**\n * Convert all Parquet files in a directory to CSV, in parallel.\n *\n * @param flags - The command flags.\n */\nexport async function parquetToCsv(\n this: LocalContext,\n flags: ParquetToCsvCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n const { directory, outputDir, clearOutputDir, concurrency, viewerMode } = flags;\n\n /* 1) Discover .parquet inputs */\n const files = collectParquetFilesOrExit(directory, this);\n\n /* 2) Size the pool */\n const { poolSize, cpuCount } = computePoolSize(concurrency, files.length);\n\n logger.info(\n colors.green(\n `Converting ${files.length} Parquet file(s) → CSV with pool size ${poolSize} (CPU=${cpuCount})`,\n ),\n );\n\n /* 3) Build FIFO queue of tasks (one per file) */\n const queue = files.map<ParquetTask>((filePath) => ({\n filePath,\n options: { outputDir, clearOutputDir },\n }));\n\n /* 4) Pool hooks */\n const hooks: PoolHooks<ParquetTask, ParquetProgress, ParquetResult, Totals> = {\n nextTask: () => queue.shift(),\n taskLabel: (t) => t.filePath,\n initTotals: () => ({}) as Totals,\n initSlotProgress: () => undefined,\n onProgress: (totals) => totals,\n onResult: (totals, res) => ({ totals, ok: !!res.ok }),\n postProcess: async () => {\n // nothing special post-run\n },\n };\n\n /* 5) Launch the pool runner with custom dashboard plugin */\n await runPool({\n title: `Parquet → CSV - ${directory}`,\n baseDir: directory || outputDir || process.cwd(),\n childFlag: CHILD_FLAG,\n childModulePath: resolveWorkerPath(import.meta.url, 'commands/admin/parquet-to-csv/worker.mjs'),\n poolSize,\n cpuCount,\n filesTotal: files.length,\n hooks,\n viewerMode,\n render: (input) => dashboardPlugin(input, parquetToCsvPlugin, viewerMode),\n installInteractiveSwitcher: viewerMode\n ? undefined\n : ({\n workers,\n onCtrlC,\n getLogPaths,\n replayBytes: rb,\n replayWhich: rw,\n setPaused,\n repaint: rp,\n }) =>\n installInteractiveSwitcher({\n workers,\n onCtrlC,\n getLogPaths,\n replayBytes: rb,\n replayWhich: rw,\n onAttach: () => setPaused(true),\n onDetach: () => {\n setPaused(false);\n rp();\n },\n onEnterAttachScreen: (id) => {\n setPaused(true);\n process.stdout.write('\\x1b[2J\\x1b[H');\n process.stdout.write(\n `Attached to worker ${id}. (Esc/Ctrl+] detach \\u2022 Ctrl+D EOF \\u2022 Ctrl+C SIGINT)\\n`,\n );\n },\n }),\n extraKeyHandler: ({ logsBySlot, repaint, setPaused }) =>\n createExtraKeyHandler({ logsBySlot, repaint, setPaused }),\n }).catch((err) => {\n if (err instanceof PoolCancelledError) {\n process.exit(130);\n }\n throw err;\n });\n}\n"],"mappings":"mYAcA,SAAS,EAAsB,EAAsD,CAEnF,OAAO,EAAW,EAAI,CASxB,SAAS,EAAuB,EAAsD,CACpF,OAAO,EAAe,EAAI,CAG5B,MAAa,EAAkE,CAC7E,eACA,gBAED,CCKD,eAAsB,EAEpB,EACe,CACf,EAAoB,KAAK,QAAQ,KAAK,CAEtC,GAAM,CAAE,YAAW,YAAW,iBAAgB,cAAa,cAAe,EAGpE,EAAQ,EAA0B,EAAW,KAAK,CAGlD,CAAE,WAAU,YAAa,EAAgB,EAAa,EAAM,OAAO,CAEzE,EAAO,KACL,EAAO,MACL,cAAc,EAAM,OAAO,wCAAwC,EAAS,QAAQ,EAAS,GAC9F,CACF,CAGD,IAAM,EAAQ,EAAM,IAAkB,IAAc,CAClD,WACA,QAAS,CAAE,YAAW,iBAAgB,CACvC,EAAE,CAgBH,MAAM,EAAQ,CACZ,MAAO,mBAAmB,IAC1B,QAAS,GAAa,GAAa,QAAQ,KAAK,CAChD,UAAW,EACX,gBAAiB,EAAkB,OAAO,KAAK,IAAK,2CAA2C,CAC/F,WACA,WACA,WAAY,EAAM,OAClB,MArB4E,CAC5E,aAAgB,EAAM,OAAO,CAC7B,UAAY,GAAM,EAAE,SACpB,gBAAmB,EAAE,EACrB,qBAAwB,IAAA,GACxB,WAAa,GAAW,EACxB,UAAW,EAAQ,KAAS,CAAE,SAAQ,GAAI,CAAC,CAAC,EAAI,GAAI,EACpD,YAAa,SAAY,GAG1B,CAYC,aACA,OAAS,GAAU,EAAgB,EAAO,EAAoB,EAAW,CACzE,2BAA4B,EACxB,IAAA,IACC,CACC,UACA,UACA,cACA,YAAa,EACb,YAAa,EACb,YACA,QAAS,KAET,EAA2B,CACzB,UACA,UACA,cACA,YAAa,EACb,YAAa,EACb,aAAgB,EAAU,GAAK,CAC/B,aAAgB,CACd,EAAU,GAAM,CAChB,GAAI,EAEN,oBAAsB,GAAO,CAC3B,EAAU,GAAK,CACf,QAAQ,OAAO,MAAM,gBAAgB,CACrC,QAAQ,OAAO,MACb,sBAAsB,EAAG,gEAC1B,EAEJ,CAAC,CACR,iBAAkB,CAAE,aAAY,UAAS,eACvC,EAAsB,CAAE,aAAY,UAAS,YAAW,CAAC,CAC5D,CAAC,CAAC,MAAO,GAAQ,CAIhB,MAHI,aAAe,GACjB,QAAQ,KAAK,IAAI,CAEb,GACN"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./logger-Bj782ZYD.mjs";import{t}from"./pullChunkedCustomSiloOutstandingIdentifiers-
|
|
2
|
-
//# sourceMappingURL=impl-
|
|
1
|
+
import{t as e}from"./logger-Bj782ZYD.mjs";import{t}from"./pullChunkedCustomSiloOutstandingIdentifiers-DRKraWKp.mjs";import{i as n,s as r}from"./writeCsv-C4pjXGsD.mjs";import{t as i}from"./done-input-validation-BcNBxhEs.mjs";import{chunk as a,uniq as o}from"lodash-es";import s from"colors";import{buildTranscendGraphQLClient as c,fetchRequestFilesForRequest as l}from"@transcend-io/sdk";import{map as u}from"@transcend-io/utils";async function d({file:d,fileTarget:f,transcendUrl:p,auth:m,sombraAuth:h,cronDataSiloId:g,targetDataSiloId:_,actions:v,skipRequestCount:y,pageLimit:b,chunkSize:x}){y&&e.info(s.yellow(`Skipping request count as requested. This may help speed up the call.`)),(Number.isNaN(x)||x<=0||x%b!==0)&&(e.error(s.red(`Invalid chunk size: "${x}". Must be a positive integer that is a multiple of ${b}.`)),this.process.exit(1)),i(this.process.exit);let S=c(p,m),{baseName:C,extension:w}=n(d),{baseName:T,extension:E}=n(f),D=0,O=0,k=0;await t({dataSiloId:g,auth:m,sombraAuth:h,actions:v,apiPageSize:b,savePageSize:x,onSave:async t=>{D+=t.length;let n=await u(a(o(t.map(e=>e.requestId)),b),async t=>(e.info(s.magenta(`Fetching target identifiers for ${t.length} requests`)),(await l(S,{logger:e,pageSize:b*2,filterBy:{requestIds:t,dataSiloIds:[_]}})).map(({fileName:e,remoteId:t})=>{if(!t)throw Error(`Failed to find remoteId for ${e}`);return{RecordId:t,Object:e.replace(`.json`,``).split(`/`).pop()?.replace(` Information`,``),Comment:`Customer data deletion request submitted via transcend.io`}})),{concurrency:1});O+=n.flat().length;let i=o(t.map(e=>Object.keys(e)).flat()),c=`${C}-${k}${w}`,p=`${T}-${k}${E}`;await r(c,t,i),e.info(s.green(`Successfully wrote ${t.length} identifiers to file "${d}"`));let m=n.flat();await r(p,m,o(m.map(e=>Object.keys(e)).flat())),e.info(s.green(`Successfully wrote ${m.length} identifiers to file "${f}"`)),e.info(s.blue(`Processed chunk of ${a.length} identifiers, found ${m.length} target identifiers`)),k+=1},transcendUrl:p,skipRequestCount:y}),e.info(s.green(`Successfully wrote ${D} identifiers to file "${d}"`)),e.info(s.green(`Successfully wrote ${O} identifiers to file "${f}"`))}export{d as pullProfiles};
|
|
2
|
+
//# sourceMappingURL=impl-TiSebcGV.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-TiSebcGV.mjs","names":[],"sources":["../src/commands/request/cron/pull-profiles/impl.ts"],"sourcesContent":["import type { RequestAction } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, fetchRequestFilesForRequest } from '@transcend-io/sdk';\nimport { map } from '@transcend-io/utils';\nimport colors from 'colors';\nimport { uniq, chunk } from 'lodash-es';\n\nimport type { LocalContext } from '../../../../context.js';\nimport { doneInputValidation } from '../../../../lib/cli/done-input-validation.js';\nimport {\n pullChunkedCustomSiloOutstandingIdentifiers,\n type CsvFormattedIdentifier,\n} from '../../../../lib/cron/index.js';\nimport { parseFilePath, writeLargeCsv } from '../../../../lib/helpers/index.js';\nimport { logger } from '../../../../logger.js';\n\nexport interface PullProfilesCommandFlags {\n file: string;\n fileTarget: string;\n transcendUrl: string;\n auth: string;\n sombraAuth?: string;\n cronDataSiloId: string;\n targetDataSiloId: string;\n actions: RequestAction[];\n skipRequestCount: boolean;\n pageLimit: number;\n chunkSize: number;\n}\n\nexport async function pullProfiles(\n this: LocalContext,\n {\n file,\n fileTarget,\n transcendUrl,\n auth,\n sombraAuth,\n cronDataSiloId,\n targetDataSiloId,\n actions,\n skipRequestCount,\n pageLimit,\n chunkSize,\n }: PullProfilesCommandFlags,\n): Promise<void> {\n if (skipRequestCount) {\n logger.info(\n colors.yellow('Skipping request count as requested. This may help speed up the call.'),\n );\n }\n\n if (Number.isNaN(chunkSize) || chunkSize <= 0 || chunkSize % pageLimit !== 0) {\n logger.error(\n colors.red(\n `Invalid chunk size: \"${chunkSize}\". Must be a positive integer that is a multiple of ${pageLimit}.`,\n ),\n );\n this.process.exit(1);\n }\n\n doneInputValidation(this.process.exit);\n\n // Create GraphQL client to connect to Transcend backend\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n const { baseName, extension } = parseFilePath(file);\n const { baseName: baseNameTarget, extension: extensionTarget } = parseFilePath(fileTarget);\n\n let allIdentifiersCount = 0;\n let allTargetIdentifiersCount = 0;\n let fileCount = 0;\n // Create onSave callback to handle chunked processing\n const onSave = async (chunkToSave: CsvFormattedIdentifier[]): Promise<void> => {\n // Add to all identifiers\n allIdentifiersCount += chunkToSave.length;\n\n // Get unique request IDs from this chunk\n const requestIds = chunkToSave.map((d) => d.requestId as string);\n const uniqueRequestIds = uniq(requestIds);\n\n // Pull down target identifiers for this chunk\n const chunkedRequestIds = chunk(uniqueRequestIds, pageLimit);\n const results = await map(\n chunkedRequestIds,\n async (requestIds) => {\n logger.info(\n colors.magenta(`Fetching target identifiers for ${requestIds.length} requests`),\n );\n const results = await fetchRequestFilesForRequest(client, {\n logger,\n pageSize: pageLimit * 2,\n filterBy: {\n requestIds,\n dataSiloIds: [targetDataSiloId],\n },\n });\n return results.map(({ fileName, remoteId }) => {\n if (!remoteId) {\n throw new Error(`Failed to find remoteId for ${fileName}`);\n }\n return {\n RecordId: remoteId,\n Object: fileName.replace('.json', '').split('/').pop()?.replace(' Information', ''),\n Comment: 'Customer data deletion request submitted via transcend.io',\n };\n });\n },\n // We are grabbing all the request files for the 'pageLimit' # of requests at a time\n {\n concurrency: 1,\n },\n );\n\n allTargetIdentifiersCount += results.flat().length;\n\n // Write the identifiers and target identifiers to CSV\n const headers = uniq(chunkToSave.map((d) => Object.keys(d)).flat());\n const numberedFileName = `${baseName}-${fileCount}${extension}`;\n const numberedFileNameTarget = `${baseNameTarget}-${fileCount}${extensionTarget}`;\n await writeLargeCsv(numberedFileName, chunkToSave, headers);\n logger.info(\n colors.green(`Successfully wrote ${chunkToSave.length} identifiers to file \"${file}\"`),\n );\n\n const targetIdentifiers = results.flat();\n const headers2 = uniq(targetIdentifiers.map((d) => Object.keys(d)).flat());\n await writeLargeCsv(numberedFileNameTarget, targetIdentifiers, headers2);\n logger.info(\n colors.green(\n `Successfully wrote ${targetIdentifiers.length} identifiers to file \"${fileTarget}\"`,\n ),\n );\n\n logger.info(\n colors.blue(\n `Processed chunk of ${chunk.length} identifiers, found ${targetIdentifiers.length} target identifiers`,\n ),\n );\n fileCount += 1;\n };\n\n // Pull down outstanding identifiers using the new chunked function\n await pullChunkedCustomSiloOutstandingIdentifiers({\n dataSiloId: cronDataSiloId,\n auth,\n sombraAuth,\n actions,\n apiPageSize: pageLimit,\n savePageSize: chunkSize,\n onSave,\n transcendUrl,\n skipRequestCount,\n });\n\n logger.info(\n colors.green(`Successfully wrote ${allIdentifiersCount} identifiers to file \"${file}\"`),\n );\n logger.info(\n colors.green(\n `Successfully wrote ${allTargetIdentifiersCount} identifiers to file \"${fileTarget}\"`,\n ),\n );\n}\n"],"mappings":"6aA6BA,eAAsB,EAEpB,CACE,OACA,aACA,eACA,OACA,aACA,iBACA,mBACA,UACA,mBACA,YACA,aAEa,CACX,GACF,EAAO,KACL,EAAO,OAAO,wEAAwE,CACvF,EAGC,OAAO,MAAM,EAAU,EAAI,GAAa,GAAK,EAAY,IAAc,KACzE,EAAO,MACL,EAAO,IACL,wBAAwB,EAAU,sDAAsD,EAAU,GACnG,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAGtB,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAS,EAA4B,EAAc,EAAK,CACxD,CAAE,WAAU,aAAc,EAAc,EAAK,CAC7C,CAAE,SAAU,EAAgB,UAAW,GAAoB,EAAc,EAAW,CAEtF,EAAsB,EACtB,EAA4B,EAC5B,EAAY,EAwEhB,MAAM,EAA4C,CAChD,WAAY,EACZ,OACA,aACA,UACA,YAAa,EACb,aAAc,EACd,OA7Ea,KAAO,IAAyD,CAE7E,GAAuB,EAAY,OAQnC,IAAM,EAAU,MAAM,EADI,EAHD,EADN,EAAY,IAAK,GAAM,EAAE,UAAoB,CACvB,CAGS,EAAU,CAG1D,KAAO,KACL,EAAO,KACL,EAAO,QAAQ,mCAAmC,EAAW,OAAO,WAAW,CAChF,EACe,MAAM,EAA4B,EAAQ,CACxD,SACA,SAAU,EAAY,EACtB,SAAU,CACR,aACA,YAAa,CAAC,EAAiB,CAChC,CACF,CAAC,EACa,KAAK,CAAE,WAAU,cAAe,CAC7C,GAAI,CAAC,EACH,MAAU,MAAM,+BAA+B,IAAW,CAE5D,MAAO,CACL,SAAU,EACV,OAAQ,EAAS,QAAQ,QAAS,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,QAAQ,eAAgB,GAAG,CACnF,QAAS,4DACV,EACD,EAGJ,CACE,YAAa,EACd,CACF,CAED,GAA6B,EAAQ,MAAM,CAAC,OAG5C,IAAM,EAAU,EAAK,EAAY,IAAK,GAAM,OAAO,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAC7D,EAAmB,GAAG,EAAS,GAAG,IAAY,IAC9C,EAAyB,GAAG,EAAe,GAAG,IAAY,IAChE,MAAM,EAAc,EAAkB,EAAa,EAAQ,CAC3D,EAAO,KACL,EAAO,MAAM,sBAAsB,EAAY,OAAO,wBAAwB,EAAK,GAAG,CACvF,CAED,IAAM,EAAoB,EAAQ,MAAM,CAExC,MAAM,EAAc,EAAwB,EAD3B,EAAK,EAAkB,IAAK,GAAM,OAAO,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CACF,CACxE,EAAO,KACL,EAAO,MACL,sBAAsB,EAAkB,OAAO,wBAAwB,EAAW,GACnF,CACF,CAED,EAAO,KACL,EAAO,KACL,sBAAsB,EAAM,OAAO,sBAAsB,EAAkB,OAAO,qBACnF,CACF,CACD,GAAa,GAYb,eACA,mBACD,CAAC,CAEF,EAAO,KACL,EAAO,MAAM,sBAAsB,EAAoB,wBAAwB,EAAK,GAAG,CACxF,CACD,EAAO,KACL,EAAO,MACL,sBAAsB,EAA0B,wBAAwB,EAAW,GACpF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./notifyPrivacyRequestsAdditionalTime-
|
|
2
|
-
//# sourceMappingURL=impl-
|
|
1
|
+
import{t as e}from"./notifyPrivacyRequestsAdditionalTime-B22rtY99.mjs";import{t}from"./done-input-validation-BcNBxhEs.mjs";async function n({auth:n,transcendUrl:r,createdAtBefore:i,createdAtAfter:a,updatedAtBefore:o,updatedAtAfter:s,actions:c,daysLeft:l,days:u,requestIds:d,emailTemplate:f,concurrency:p}){t(this.process.exit),await e({transcendUrl:r,requestActions:c,auth:n,emailTemplate:f,days:u,daysLeft:l,requestIds:d,concurrency:p,createdAtBefore:i,createdAtAfter:a,updatedAtBefore:o,updatedAtAfter:s})}export{n as notifyAdditionalTime};
|
|
2
|
+
//# sourceMappingURL=impl-U4BtI50x.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-U4BtI50x.mjs","names":[],"sources":["../src/commands/request/notify-additional-time/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 { notifyPrivacyRequestsAdditionalTime } from '../../../lib/requests/index.js';\n\nexport interface NotifyAdditionalTimeCommandFlags {\n auth: string;\n createdAtBefore: Date;\n createdAtAfter?: Date;\n updatedAtBefore?: Date;\n updatedAtAfter?: Date;\n actions?: RequestAction[];\n daysLeft: number;\n days: number;\n requestIds?: string[];\n emailTemplate: string;\n transcendUrl: string;\n concurrency: number;\n}\n\nexport async function notifyAdditionalTime(\n this: LocalContext,\n {\n auth,\n transcendUrl,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n actions,\n daysLeft,\n days,\n requestIds,\n emailTemplate,\n concurrency,\n }: NotifyAdditionalTimeCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n await notifyPrivacyRequestsAdditionalTime({\n transcendUrl,\n requestActions: actions,\n auth,\n emailTemplate,\n days,\n daysLeft,\n requestIds,\n concurrency,\n createdAtBefore,\n createdAtAfter,\n updatedAtBefore,\n updatedAtAfter,\n });\n}\n"],"mappings":"2HAqBA,eAAsB,EAEpB,CACE,OACA,eACA,kBACA,iBACA,kBACA,iBACA,UACA,WACA,OACA,aACA,gBACA,eAEa,CACf,EAAoB,KAAK,QAAQ,KAAK,CAEtC,MAAM,EAAoC,CACxC,eACA,eAAgB,EAChB,OACA,gBACA,OACA,WACA,aACA,cACA,kBACA,iBACA,kBACA,iBACD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./skipPreflightJobs-
|
|
2
|
-
//# sourceMappingURL=impl-
|
|
1
|
+
import{t as e}from"./skipPreflightJobs-qwmjRAwj.mjs";import{t}from"./done-input-validation-BcNBxhEs.mjs";async function n({auth:n,transcendUrl:r,enricherIds:i}){t(this.process.exit),await e({transcendUrl:r,auth:n,enricherIds:i})}export{n as skipPreflightJobs};
|
|
2
|
+
//# sourceMappingURL=impl-a3kmDc3F.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-a3kmDc3F.mjs","names":["skipPreflightJobsHelper"],"sources":["../src/commands/request/skip-preflight-jobs/impl.ts"],"sourcesContent":["import type { LocalContext } from '../../../context.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { skipPreflightJobs as skipPreflightJobsHelper } from '../../../lib/requests/index.js';\n\nexport interface SkipPreflightJobsCommandFlags {\n auth: string;\n enricherIds: string[];\n transcendUrl: string;\n}\n\nexport async function skipPreflightJobs(\n this: LocalContext,\n { auth, transcendUrl, enricherIds }: SkipPreflightJobsCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n await skipPreflightJobsHelper({\n transcendUrl,\n auth,\n enricherIds,\n });\n}\n"],"mappings":"yGAUA,eAAsB,EAEpB,CAAE,OAAM,eAAc,eACP,CACf,EAAoB,KAAK,QAAQ,KAAK,CAEtC,MAAMA,EAAwB,CAC5B,eACA,OACA,cACD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./logger-Bj782ZYD.mjs";import{t}from"./updateConsentManagerVersionToLatest-
|
|
2
|
-
//# sourceMappingURL=impl-
|
|
1
|
+
import{t as e}from"./logger-Bj782ZYD.mjs";import{t}from"./updateConsentManagerVersionToLatest-CvQ7QOp0.mjs";import{t as n}from"./validateTranscendAuth-Cuh2Qfdl.mjs";import{t as r}from"./done-input-validation-BcNBxhEs.mjs";import{ConsentBundleType as i}from"@transcend-io/privacy-types";import a from"colors";import{mapSeries as o}from"@transcend-io/utils";async function s({auth:s,bundleTypes:c=[i.Production,i.Test],deploy:l,transcendUrl:u}){r(this.process.exit);let d=await n(s);typeof d==`string`?(await t({deploy:l,transcendUrl:u,auth:d,bundleTypes:c}),e.info(a.green(`Successfully updated Consent Manager!`))):(await o(d,async n=>{e.info(a.magenta(`Updating Consent Manager for organization "${n.organizationName}"...`)),await t({deploy:l,transcendUrl:u,auth:n.apiKey,bundleTypes:c}),e.info(a.green(`Successfully updated Consent Manager for organization "${n.organizationName}"!`))}),e.info(a.green(`Successfully updated Consent Managers!`)))}export{s as updateConsentManager};
|
|
2
|
+
//# sourceMappingURL=impl-ofnzAOCQ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-ofnzAOCQ.mjs","names":[],"sources":["../src/commands/consent/update-consent-manager/impl.ts"],"sourcesContent":["import { ConsentBundleType } from '@transcend-io/privacy-types';\nimport { mapSeries } from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport type { LocalContext } from '../../../context.js';\nimport { validateTranscendAuth } from '../../../lib/api-keys/index.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { updateConsentManagerVersionToLatest } from '../../../lib/consent-manager/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface UpdateConsentManagerCommandFlags {\n auth: string;\n bundleTypes: ConsentBundleType[];\n deploy: boolean;\n transcendUrl: string;\n}\n\nexport async function updateConsentManager(\n this: LocalContext,\n {\n auth,\n bundleTypes = [ConsentBundleType.Production, ConsentBundleType.Test],\n deploy,\n transcendUrl,\n }: UpdateConsentManagerCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n // Parse authentication as API key or path to list of API keys\n const apiKeyOrList = await validateTranscendAuth(auth);\n\n // Handle single update\n if (typeof apiKeyOrList === 'string') {\n // Update consent manager\n await updateConsentManagerVersionToLatest({\n deploy,\n transcendUrl,\n auth: apiKeyOrList,\n bundleTypes,\n });\n logger.info(colors.green('Successfully updated Consent Manager!'));\n } else {\n await mapSeries(apiKeyOrList, async (apiKey) => {\n logger.info(\n colors.magenta(`Updating Consent Manager for organization \"${apiKey.organizationName}\"...`),\n );\n\n await updateConsentManagerVersionToLatest({\n deploy,\n transcendUrl,\n auth: apiKey.apiKey,\n bundleTypes,\n });\n\n logger.info(\n colors.green(\n `Successfully updated Consent Manager for organization \"${apiKey.organizationName}\"!`,\n ),\n );\n });\n logger.info(colors.green('Successfully updated Consent Managers!'));\n }\n}\n"],"mappings":"oWAiBA,eAAsB,EAEpB,CACE,OACA,cAAc,CAAC,EAAkB,WAAY,EAAkB,KAAK,CACpE,SACA,gBAEa,CACf,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAe,MAAM,EAAsB,EAAK,CAGlD,OAAO,GAAiB,UAE1B,MAAM,EAAoC,CACxC,SACA,eACA,KAAM,EACN,cACD,CAAC,CACF,EAAO,KAAK,EAAO,MAAM,wCAAwC,CAAC,GAElE,MAAM,EAAU,EAAc,KAAO,IAAW,CAC9C,EAAO,KACL,EAAO,QAAQ,8CAA8C,EAAO,iBAAiB,MAAM,CAC5F,CAED,MAAM,EAAoC,CACxC,SACA,eACA,KAAM,EAAO,OACb,cACD,CAAC,CAEF,EAAO,KACL,EAAO,MACL,0DAA0D,EAAO,iBAAiB,IACnF,CACF,EACD,CACF,EAAO,KAAK,EAAO,MAAM,yCAAyC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{r as e}from"./constants-
|
|
1
|
+
import{r as e}from"./constants-3jGxMMU0.mjs";import{t}from"./logger-Bj782ZYD.mjs";import{a as n}from"./writeCsv-C4pjXGsD.mjs";import{t as r}from"./pullConsentManagerMetrics-zKgjc3Ap.mjs";import{t as i}from"./validateTranscendAuth-Cuh2Qfdl.mjs";import{t as a}from"./done-input-validation-BcNBxhEs.mjs";import o,{existsSync as s,mkdirSync as c}from"node:fs";import{join as l}from"node:path";import u from"colors";import{ConsentManagerMetricBin as d,buildTranscendGraphQLClient as f}from"@transcend-io/sdk";import{map as p,mapSeries as m}from"@transcend-io/utils";async function h({auth:h,start:g,end:_,folder:v,bin:y,transcendUrl:b}){let x=y;Object.values(d).includes(x)||(t.error(u.red(`Failed to parse argument "bin" with value "${y}"\nExpected one of: \n${Object.values(d).join(`
|
|
2
2
|
`)}`)),this.process.exit(1));let S=new Date(g),C=_?new Date(_):new Date;Number.isNaN(S.getTime())&&(t.error(u.red(`Start date provided is invalid date. Got --start="${g}" expected --start="01/01/2023"`)),this.process.exit(1)),Number.isNaN(C.getTime())&&(t.error(u.red(`End date provided is invalid date. Got --end="${_}" expected --end="01/01/2023"`)),this.process.exit(1)),S>C&&(t.error(u.red(`Got a start date "${S.toISOString()}" that was larger than the end date "${C.toISOString()}". Start date must be before end date.`)),this.process.exit(1)),a(this.process.exit);let w=await i(h);if(o.existsSync(v)&&!o.lstatSync(v).isDirectory()&&(t.error(u.red(`The provided argument "folder" was passed a file. expected: folder="./consent-metrics/"`)),this.process.exit(1)),s(v)||c(v),t.info(u.magenta(`Pulling consent metrics from start=${S.toString()} to end=${C.toISOString()} with bin size "${y}"`)),typeof w==`string`){try{let e=await r(f(b,w),{bin:x,start:S,end:C});await p(Object.entries(e),async([e,r])=>{await p(r,async({points:r,name:i})=>{let a=l(v,`${e}_${i}.csv`);t.info(u.magenta(`Writing configuration to file "${a}"...`)),await n(a,r.map(({key:e,value:t})=>({timestamp:e,value:t})))},{concurrency:5})},{concurrency:5})}catch(e){t.error(u.red(`An error occurred syncing the schema: ${e.message}`)),this.process.exit(1)}t.info(u.green(`Successfully synced consent metrics to disk in folder "${v}"! View at ${e}`))}else{let i=[];await m(w,async(e,a)=>{let o=`[${a+1}/${w.length}][${e.organizationName}] `;t.info(u.magenta(`~~~\n\n${o}Attempting to pull consent metrics...\n\n~~~`));let d=f(b,e.apiKey);try{let i=await r(d,{bin:x,start:S,end:C}),a=l(v,e.organizationName);s(a)||c(a),Object.entries(i).forEach(([e,r])=>{r.forEach(({points:r,name:i})=>{let o=l(a,`${e}_${i}.csv`);t.info(u.magenta(`Writing configuration to file "${o}"...`)),n(o,r.map(({key:e,value:t})=>({timestamp:e,value:t})))})}),t.info(u.green(`${o}Successfully pulled configuration!`))}catch(n){t.error(u.red(`${o}Failed to sync configuration.`),n),i.push(e.organizationName)}}),i.length>0&&(t.info(u.red(`Sync encountered errors for "${i.join(`,`)}". View output above for more information, or check out ${e}`)),this.process.exit(1))}}export{h as pullConsentMetrics};
|
|
3
|
-
//# sourceMappingURL=impl-
|
|
3
|
+
//# sourceMappingURL=impl-p5wX1pxV.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-p5wX1pxV.mjs","names":[],"sources":["../src/commands/consent/pull-consent-metrics/impl.ts"],"sourcesContent":["import fs, { existsSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\n\nimport { buildTranscendGraphQLClient, ConsentManagerMetricBin } from '@transcend-io/sdk';\nimport { map, mapSeries } from '@transcend-io/utils';\nimport colors from 'colors';\n\nimport { ADMIN_DASH_INTEGRATIONS } from '../../../constants.js';\nimport type { LocalContext } from '../../../context.js';\nimport { validateTranscendAuth } from '../../../lib/api-keys/index.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { pullConsentManagerMetrics } from '../../../lib/consent-manager/index.js';\nimport { writeCsv } from '../../../lib/helpers/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface PullConsentMetricsCommandFlags {\n auth: string;\n start: Date;\n end?: Date;\n folder: string;\n bin: string;\n transcendUrl: string;\n}\n\nexport async function pullConsentMetrics(\n this: LocalContext,\n { auth, start, end, folder, bin, transcendUrl }: PullConsentMetricsCommandFlags,\n): Promise<void> {\n // Validate bin\n const parsedBin = bin as ConsentManagerMetricBin;\n if (!Object.values(ConsentManagerMetricBin).includes(parsedBin)) {\n logger.error(\n colors.red(\n `Failed to parse argument \"bin\" with value \"${bin}\"\\n` +\n `Expected one of: \\n${Object.values(ConsentManagerMetricBin).join('\\n')}`,\n ),\n );\n this.process.exit(1);\n }\n\n // Parse the dates\n const startDate = new Date(start);\n const endDate = end ? new Date(end) : new Date();\n if (Number.isNaN(startDate.getTime())) {\n logger.error(\n colors.red(\n `Start date provided is invalid date. Got --start=\"${start}\" expected --start=\"01/01/2023\"`,\n ),\n );\n this.process.exit(1);\n }\n if (Number.isNaN(endDate.getTime())) {\n logger.error(\n colors.red(\n `End date provided is invalid date. Got --end=\"${end}\" expected --end=\"01/01/2023\"`,\n ),\n );\n this.process.exit(1);\n }\n if (startDate > endDate) {\n logger.error(\n colors.red(\n `Got a start date \"${startDate.toISOString()}\" that was larger than the end date \"${endDate.toISOString()}\". ` +\n 'Start date must be before end date.',\n ),\n );\n this.process.exit(1);\n }\n\n doneInputValidation(this.process.exit);\n\n // Parse authentication as API key or path to list of API keys\n const apiKeyOrList = await validateTranscendAuth(auth);\n\n // Ensure folder either does not exist or is not a file\n if (fs.existsSync(folder) && !fs.lstatSync(folder).isDirectory()) {\n logger.error(\n colors.red(\n 'The provided argument \"folder\" was passed a file. expected: folder=\"./consent-metrics/\"',\n ),\n );\n this.process.exit(1);\n }\n\n // Create the folder if it does not exist\n if (!existsSync(folder)) {\n mkdirSync(folder);\n }\n\n logger.info(\n colors.magenta(\n `Pulling consent metrics from start=${startDate.toString()} to end=${endDate.toISOString()} with bin size \"${bin}\"`,\n ),\n );\n\n // Sync to Disk\n if (typeof apiKeyOrList === 'string') {\n try {\n // Create a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, apiKeyOrList);\n\n // Pull the metrics\n const configuration = await pullConsentManagerMetrics(client, {\n bin: parsedBin,\n start: startDate,\n end: endDate,\n });\n\n // Write to file\n await map(\n Object.entries(configuration),\n async ([metricName, metrics]) => {\n await map(\n metrics,\n async ({ points, name }) => {\n const file = join(folder, `${metricName}_${name}.csv`);\n logger.info(colors.magenta(`Writing configuration to file \"${file}\"...`));\n await writeCsv(\n file,\n points.map(({ key, value }: { key: string; value: string }) => ({\n timestamp: key,\n value,\n })),\n );\n },\n {\n concurrency: 5,\n },\n );\n },\n { concurrency: 5 },\n );\n } catch (err) {\n logger.error(colors.red(`An error occurred syncing the schema: ${err.message}`));\n this.process.exit(1);\n }\n\n // Indicate success\n logger.info(\n colors.green(\n `Successfully synced consent metrics to disk in folder \"${folder}\"! View at ${ADMIN_DASH_INTEGRATIONS}`,\n ),\n );\n } else {\n const encounteredErrors: string[] = [];\n await mapSeries(apiKeyOrList, async (apiKey, ind) => {\n const prefix = `[${ind + 1}/${apiKeyOrList.length}][${apiKey.organizationName}] `;\n logger.info(colors.magenta(`~~~\\n\\n${prefix}Attempting to pull consent metrics...\\n\\n~~~`));\n\n // Create a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, apiKey.apiKey);\n\n try {\n const configuration = await pullConsentManagerMetrics(client, {\n bin: parsedBin,\n start: startDate,\n end: endDate,\n });\n\n // ensure folder exists for that organization\n const subFolder = join(folder, apiKey.organizationName);\n if (!existsSync(subFolder)) {\n mkdirSync(subFolder);\n }\n\n // Write to file\n Object.entries(configuration).forEach(([metricName, metrics]) => {\n metrics.forEach(({ points, name }) => {\n const file = join(subFolder, `${metricName}_${name}.csv`);\n logger.info(colors.magenta(`Writing configuration to file \"${file}\"...`));\n writeCsv(\n file,\n points.map(({ key, value }: { key: string; value: string }) => ({\n timestamp: key,\n value,\n })),\n );\n });\n });\n\n logger.info(colors.green(`${prefix}Successfully pulled configuration!`));\n } catch (err) {\n logger.error(colors.red(`${prefix}Failed to sync configuration.`), err);\n encounteredErrors.push(apiKey.organizationName);\n }\n });\n\n if (encounteredErrors.length > 0) {\n logger.info(\n colors.red(\n `Sync encountered errors for \"${encounteredErrors.join(\n ',',\n )}\". View output above for more information, or check out ${ADMIN_DASH_INTEGRATIONS}`,\n ),\n );\n\n this.process.exit(1);\n }\n }\n}\n"],"mappings":"ijBAwBA,eAAsB,EAEpB,CAAE,OAAM,QAAO,MAAK,SAAQ,MAAK,gBAClB,CAEf,IAAM,EAAY,EACb,OAAO,OAAO,EAAwB,CAAC,SAAS,EAAU,GAC7D,EAAO,MACL,EAAO,IACL,8CAA8C,EAAI,wBAC1B,OAAO,OAAO,EAAwB,CAAC,KAAK;EAAK,GAC1E,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAItB,IAAM,EAAY,IAAI,KAAK,EAAM,CAC3B,EAAU,EAAM,IAAI,KAAK,EAAI,CAAG,IAAI,KACtC,OAAO,MAAM,EAAU,SAAS,CAAC,GACnC,EAAO,MACL,EAAO,IACL,qDAAqD,EAAM,iCAC5D,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAElB,OAAO,MAAM,EAAQ,SAAS,CAAC,GACjC,EAAO,MACL,EAAO,IACL,iDAAiD,EAAI,+BACtD,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAElB,EAAY,IACd,EAAO,MACL,EAAO,IACL,qBAAqB,EAAU,aAAa,CAAC,uCAAuC,EAAQ,aAAa,CAAC,wCAE3G,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAGtB,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAe,MAAM,EAAsB,EAAK,CAwBtD,GArBI,EAAG,WAAW,EAAO,EAAI,CAAC,EAAG,UAAU,EAAO,CAAC,aAAa,GAC9D,EAAO,MACL,EAAO,IACL,0FACD,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAIjB,EAAW,EAAO,EACrB,EAAU,EAAO,CAGnB,EAAO,KACL,EAAO,QACL,sCAAsC,EAAU,UAAU,CAAC,UAAU,EAAQ,aAAa,CAAC,kBAAkB,EAAI,GAClH,CACF,CAGG,OAAO,GAAiB,SAAU,CACpC,GAAI,CAKF,IAAM,EAAgB,MAAM,EAHb,EAA4B,EAAc,EAAa,CAGR,CAC5D,IAAK,EACL,MAAO,EACP,IAAK,EACN,CAAC,CAGF,MAAM,EACJ,OAAO,QAAQ,EAAc,CAC7B,MAAO,CAAC,EAAY,KAAa,CAC/B,MAAM,EACJ,EACA,MAAO,CAAE,SAAQ,UAAW,CAC1B,IAAM,EAAO,EAAK,EAAQ,GAAG,EAAW,GAAG,EAAK,MAAM,CACtD,EAAO,KAAK,EAAO,QAAQ,kCAAkC,EAAK,MAAM,CAAC,CACzE,MAAM,EACJ,EACA,EAAO,KAAK,CAAE,MAAK,YAA6C,CAC9D,UAAW,EACX,QACD,EAAE,CACJ,EAEH,CACE,YAAa,EACd,CACF,EAEH,CAAE,YAAa,EAAG,CACnB,OACM,EAAK,CACZ,EAAO,MAAM,EAAO,IAAI,yCAAyC,EAAI,UAAU,CAAC,CAChF,KAAK,QAAQ,KAAK,EAAE,CAItB,EAAO,KACL,EAAO,MACL,0DAA0D,EAAO,aAAa,IAC/E,CACF,KACI,CACL,IAAM,EAA8B,EAAE,CACtC,MAAM,EAAU,EAAc,MAAO,EAAQ,IAAQ,CACnD,IAAM,EAAS,IAAI,EAAM,EAAE,GAAG,EAAa,OAAO,IAAI,EAAO,iBAAiB,IAC9E,EAAO,KAAK,EAAO,QAAQ,UAAU,EAAO,8CAA8C,CAAC,CAG3F,IAAM,EAAS,EAA4B,EAAc,EAAO,OAAO,CAEvE,GAAI,CACF,IAAM,EAAgB,MAAM,EAA0B,EAAQ,CAC5D,IAAK,EACL,MAAO,EACP,IAAK,EACN,CAAC,CAGI,EAAY,EAAK,EAAQ,EAAO,iBAAiB,CAClD,EAAW,EAAU,EACxB,EAAU,EAAU,CAItB,OAAO,QAAQ,EAAc,CAAC,SAAS,CAAC,EAAY,KAAa,CAC/D,EAAQ,SAAS,CAAE,SAAQ,UAAW,CACpC,IAAM,EAAO,EAAK,EAAW,GAAG,EAAW,GAAG,EAAK,MAAM,CACzD,EAAO,KAAK,EAAO,QAAQ,kCAAkC,EAAK,MAAM,CAAC,CACzE,EACE,EACA,EAAO,KAAK,CAAE,MAAK,YAA6C,CAC9D,UAAW,EACX,QACD,EAAE,CACJ,EACD,EACF,CAEF,EAAO,KAAK,EAAO,MAAM,GAAG,EAAO,oCAAoC,CAAC,OACjE,EAAK,CACZ,EAAO,MAAM,EAAO,IAAI,GAAG,EAAO,+BAA+B,CAAE,EAAI,CACvE,EAAkB,KAAK,EAAO,iBAAiB,GAEjD,CAEE,EAAkB,OAAS,IAC7B,EAAO,KACL,EAAO,IACL,gCAAgC,EAAkB,KAChD,IACD,CAAC,0DAA0D,IAC7D,CACF,CAED,KAAK,QAAQ,KAAK,EAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./pullManualEnrichmentIdentifiersToCsv-
|
|
2
|
-
//# sourceMappingURL=impl-
|
|
1
|
+
import{t as e}from"./pullManualEnrichmentIdentifiersToCsv-B7thv3KR.mjs";import{t}from"./done-input-validation-BcNBxhEs.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-pLA7nRs7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-pLA7nRs7.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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./constants-
|
|
1
|
+
import{t as e}from"./constants-3jGxMMU0.mjs";import{t}from"./logger-Bj782ZYD.mjs";import{t as n}from"./done-input-validation-BcNBxhEs.mjs";import{n as r}from"./constants-BmwXDQu9.mjs";import i from"colors";import{buildTranscendGraphQLClient as a,fetchActiveSiloDiscoPlugin as o,uploadSiloDiscoveryResults as s}from"@transcend-io/sdk";import c from"fast-glob";import{stringify as l}from"query-string";async function u({scanPath:e,fileGlobs:n,ignoreDirs:r,config:i}){let{ignoreDirs:a,supportedFiles:o,scanFunction:s}=i,l=n===``?o:o.concat(n.split(`,`)),d=[...r.split(`,`),...a].filter(e=>e.length>0);try{let n=await c(`${e}/**/${l.join(`|`)}`,{ignore:d.map(t=>`${e}/**/${t}`),unique:!0,onlyFiles:!0});t.info(`Scanning: ${n.length} files`);let r=n.map(e=>s(e)).flat().map(e=>e.softwareDevelopmentKits||[]).flat(),i=[...new Set(r.map(e=>e.name))];return t.info(`Found: ${i.length} unique dependencies`),i.map(t=>({name:t,resourceId:`${e}/**/${t}`,useStrictClassifier:!0}))}catch(e){throw Error(`Error scanning globs ${u} with error: ${e}`)}}async function d({scanPath:c,dataSiloId:d,auth:f,fileGlobs:p,ignoreDirs:m,transcendUrl:h}){n(this.process.exit);let g=a(h,f),_=await o(g,{logger:t,filterBy:{dataSiloId:d}}),v=r[_.dataSilo.type];v||(t.error(i.red(`This plugin "${_.dataSilo.type}" is not supported for offline silo discovery.`)),this.process.exit(1));let y=await u({scanPath:c,fileGlobs:p,ignoreDirs:m,config:v});await s(g,{pluginId:_.id,results:y,logger:t});let b=new URL(e);b.pathname=`/data-map/data-inventory/silo-discovery/triage`,b.search=l({filters:JSON.stringify({pluginIds:[_.id]})}),t.info(i.green(`Scan found ${y.length} potential data silos at ${c}! View at '${b.href}'
|
|
2
2
|
|
|
3
3
|
NOTE: it may take 2-3 minutes for scan results to appear in the UI.`))}export{d as discoverSilos};
|
|
4
|
-
//# sourceMappingURL=impl-
|
|
4
|
+
//# sourceMappingURL=impl-s3_G2nu4.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impl-
|
|
1
|
+
{"version":3,"file":"impl-s3_G2nu4.mjs","names":[],"sources":["../src/lib/code-scanning/findFilesToScan.ts","../src/commands/inventory/discover-silos/impl.ts"],"sourcesContent":["import fastGlob from 'fast-glob';\n\nimport { logger } from '../../logger.js';\nimport { CodeScanningConfig } from './types.js';\n\nexport interface SiloDiscoveryRawResults {\n /** The name of the potential data silo entry */\n name: string;\n /** A unique UUID (represents the same resource across different silo discovery runs) */\n resourceId: string;\n /** Any hosts associated with the entry */\n host?: string;\n /** Type of data silo */\n type?: string | undefined;\n}\n\n/**\n * Helper to scan for data silos in all package.json files that it can find in a directory\n *\n * @deprecated TODO: https://transcend.height.app/T-32325 - use code scanning instead\n * @param options - Options\n * @returns the list of integrations\n */\nexport async function findFilesToScan({\n scanPath,\n fileGlobs,\n ignoreDirs,\n config,\n}: {\n /** Where to look for package.json files */\n scanPath: string;\n /** Globs to look for */\n fileGlobs: string;\n /** The directories to ignore (excludes node_modules and serverless-build) */\n ignoreDirs: string;\n /** Silo Discovery configuration */\n config: CodeScanningConfig;\n}): Promise<SiloDiscoveryRawResults[]> {\n const { ignoreDirs: IGNORE_DIRS, supportedFiles, scanFunction } = config;\n const globsToSupport =\n fileGlobs === '' ? supportedFiles : supportedFiles.concat(fileGlobs.split(','));\n const dirsToIgnore = [...ignoreDirs.split(','), ...IGNORE_DIRS].filter((dir) => dir.length > 0);\n try {\n const filesToScan: string[] = await fastGlob(`${scanPath}/**/${globsToSupport.join('|')}`, {\n ignore: dirsToIgnore.map((dir: string) => `${scanPath}/**/${dir}`),\n unique: true,\n onlyFiles: true,\n });\n logger.info(`Scanning: ${filesToScan.length} files`);\n const allPackages = filesToScan.map((filePath: string) => scanFunction(filePath)).flat();\n const allSdks = allPackages\n .map((appPackage) => appPackage.softwareDevelopmentKits || [])\n .flat();\n const uniqueDeps = new Set(allSdks.map((sdk) => sdk.name));\n const deps = [...uniqueDeps];\n logger.info(`Found: ${deps.length} unique dependencies`);\n return deps.map((dep) => ({\n name: dep,\n resourceId: `${scanPath}/**/${dep}`,\n useStrictClassifier: true,\n }));\n } catch (error) {\n throw new Error(`Error scanning globs ${findFilesToScan} with error: ${error}`);\n }\n}\n","import {\n buildTranscendGraphQLClient,\n fetchActiveSiloDiscoPlugin,\n uploadSiloDiscoveryResults,\n} from '@transcend-io/sdk';\nimport colors from 'colors';\nimport { stringify } from 'query-string';\n\nimport { ADMIN_DASH } from '../../../constants.js';\nimport type { LocalContext } from '../../../context.js';\nimport { doneInputValidation } from '../../../lib/cli/done-input-validation.js';\nimport { findFilesToScan } from '../../../lib/code-scanning/findFilesToScan.js';\nimport { SILO_DISCOVERY_CONFIGS } from '../../../lib/code-scanning/index.js';\nimport { logger } from '../../../logger.js';\n\nexport interface DiscoverSilosCommandFlags {\n scanPath: string;\n dataSiloId: string;\n auth: string;\n fileGlobs: string;\n ignoreDirs: string;\n transcendUrl: string;\n}\n\nexport async function discoverSilos(\n this: LocalContext,\n { scanPath, dataSiloId, auth, fileGlobs, ignoreDirs, transcendUrl }: DiscoverSilosCommandFlags,\n): Promise<void> {\n doneInputValidation(this.process.exit);\n\n // Create a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n const plugin = await fetchActiveSiloDiscoPlugin(client, {\n logger,\n filterBy: { dataSiloId },\n });\n\n const config = SILO_DISCOVERY_CONFIGS[plugin.dataSilo.type];\n if (!config) {\n logger.error(\n colors.red(\n `This plugin \"${plugin.dataSilo.type}\" is not supported for offline silo discovery.`,\n ),\n );\n this.process.exit(1);\n }\n\n const results = await findFilesToScan({\n scanPath,\n fileGlobs,\n ignoreDirs,\n config,\n });\n\n await uploadSiloDiscoveryResults(client, {\n pluginId: plugin.id,\n results,\n logger,\n });\n\n const newUrl = new URL(ADMIN_DASH);\n newUrl.pathname = '/data-map/data-inventory/silo-discovery/triage';\n newUrl.search = stringify({\n filters: JSON.stringify({ pluginIds: [plugin.id] }),\n });\n\n // Indicate success\n logger.info(\n colors.green(\n `Scan found ${results.length} potential data silos at ${scanPath}! ` +\n `View at '${newUrl.href}' ` +\n '\\n\\n NOTE: it may take 2-3 minutes for scan results to appear in the UI.',\n ),\n );\n}\n"],"mappings":"gZAuBA,eAAsB,EAAgB,CACpC,WACA,YACA,aACA,UAUqC,CACrC,GAAM,CAAE,WAAY,EAAa,iBAAgB,gBAAiB,EAC5D,EACJ,IAAc,GAAK,EAAiB,EAAe,OAAO,EAAU,MAAM,IAAI,CAAC,CAC3E,EAAe,CAAC,GAAG,EAAW,MAAM,IAAI,CAAE,GAAG,EAAY,CAAC,OAAQ,GAAQ,EAAI,OAAS,EAAE,CAC/F,GAAI,CACF,IAAM,EAAwB,MAAM,EAAS,GAAG,EAAS,MAAM,EAAe,KAAK,IAAI,GAAI,CACzF,OAAQ,EAAa,IAAK,GAAgB,GAAG,EAAS,MAAM,IAAM,CAClE,OAAQ,GACR,UAAW,GACZ,CAAC,CACF,EAAO,KAAK,aAAa,EAAY,OAAO,QAAQ,CAEpD,IAAM,EADc,EAAY,IAAK,GAAqB,EAAa,EAAS,CAAC,CAAC,MAAM,CAErF,IAAK,GAAe,EAAW,yBAA2B,EAAE,CAAC,CAC7D,MAAM,CAEH,EAAO,CAAC,GADK,IAAI,IAAI,EAAQ,IAAK,GAAQ,EAAI,KAAK,CAAC,CAC9B,CAE5B,OADA,EAAO,KAAK,UAAU,EAAK,OAAO,sBAAsB,CACjD,EAAK,IAAK,IAAS,CACxB,KAAM,EACN,WAAY,GAAG,EAAS,MAAM,IAC9B,oBAAqB,GACtB,EAAE,OACI,EAAO,CACd,MAAU,MAAM,wBAAwB,EAAgB,eAAe,IAAQ,ECtCnF,eAAsB,EAEpB,CAAE,WAAU,aAAY,OAAM,YAAW,aAAY,gBACtC,CACf,EAAoB,KAAK,QAAQ,KAAK,CAGtC,IAAM,EAAS,EAA4B,EAAc,EAAK,CAExD,EAAS,MAAM,EAA2B,EAAQ,CACtD,SACA,SAAU,CAAE,aAAY,CACzB,CAAC,CAEI,EAAS,EAAuB,EAAO,SAAS,MACjD,IACH,EAAO,MACL,EAAO,IACL,gBAAgB,EAAO,SAAS,KAAK,gDACtC,CACF,CACD,KAAK,QAAQ,KAAK,EAAE,EAGtB,IAAM,EAAU,MAAM,EAAgB,CACpC,WACA,YACA,aACA,SACD,CAAC,CAEF,MAAM,EAA2B,EAAQ,CACvC,SAAU,EAAO,GACjB,UACA,SACD,CAAC,CAEF,IAAM,EAAS,IAAI,IAAI,EAAW,CAClC,EAAO,SAAW,iDAClB,EAAO,OAAS,EAAU,CACxB,QAAS,KAAK,UAAU,CAAE,UAAW,CAAC,EAAO,GAAG,CAAE,CAAC,CACpD,CAAC,CAGF,EAAO,KACL,EAAO,MACL,cAAc,EAAQ,OAAO,2BAA2B,EAAS,aACnD,EAAO,KAAK;;sEAE3B,CACF"}
|
package/dist/index.d.mts
CHANGED
|
@@ -63710,6 +63710,7 @@ declare const AssessmentRuleInput: t.IntersectionC<[t.TypeC<{
|
|
|
63710
63710
|
CONTAINS: unknown;
|
|
63711
63711
|
IS_SHOWN: unknown;
|
|
63712
63712
|
IS_NOT_SHOWN: unknown;
|
|
63713
|
+
DOES_NOT_CONTAIN: unknown;
|
|
63713
63714
|
}>;
|
|
63714
63715
|
}>, t.PartialC<{
|
|
63715
63716
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -63741,6 +63742,7 @@ declare const AssessmentDisplayLogicInput: t.IntersectionC<[t.TypeC<{
|
|
|
63741
63742
|
CONTAINS: unknown;
|
|
63742
63743
|
IS_SHOWN: unknown;
|
|
63743
63744
|
IS_NOT_SHOWN: unknown;
|
|
63745
|
+
DOES_NOT_CONTAIN: unknown;
|
|
63744
63746
|
}>;
|
|
63745
63747
|
}>, t.PartialC<{
|
|
63746
63748
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -63766,6 +63768,7 @@ declare const RiskLogicInput: t.IntersectionC<[t.TypeC<{
|
|
|
63766
63768
|
CONTAINS: unknown;
|
|
63767
63769
|
IS_SHOWN: unknown;
|
|
63768
63770
|
IS_NOT_SHOWN: unknown;
|
|
63771
|
+
DOES_NOT_CONTAIN: unknown;
|
|
63769
63772
|
}>;
|
|
63770
63773
|
}>, t.PartialC<{
|
|
63771
63774
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -63838,6 +63841,7 @@ declare const AssessmentSectionQuestionInput: t.IntersectionC<[t.TypeC<{
|
|
|
63838
63841
|
CONTAINS: unknown;
|
|
63839
63842
|
IS_SHOWN: unknown;
|
|
63840
63843
|
IS_NOT_SHOWN: unknown;
|
|
63844
|
+
DOES_NOT_CONTAIN: unknown;
|
|
63841
63845
|
}>;
|
|
63842
63846
|
}>, t.PartialC<{
|
|
63843
63847
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -63854,6 +63858,7 @@ declare const AssessmentSectionQuestionInput: t.IntersectionC<[t.TypeC<{
|
|
|
63854
63858
|
CONTAINS: unknown;
|
|
63855
63859
|
IS_SHOWN: unknown;
|
|
63856
63860
|
IS_NOT_SHOWN: unknown;
|
|
63861
|
+
DOES_NOT_CONTAIN: unknown;
|
|
63857
63862
|
}>;
|
|
63858
63863
|
}>, t.PartialC<{
|
|
63859
63864
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -64032,6 +64037,7 @@ declare const AssessmentSectionInput: t.IntersectionC<[t.TypeC<{
|
|
|
64032
64037
|
CONTAINS: unknown;
|
|
64033
64038
|
IS_SHOWN: unknown;
|
|
64034
64039
|
IS_NOT_SHOWN: unknown;
|
|
64040
|
+
DOES_NOT_CONTAIN: unknown;
|
|
64035
64041
|
}>;
|
|
64036
64042
|
}>, t.PartialC<{
|
|
64037
64043
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -64048,6 +64054,7 @@ declare const AssessmentSectionInput: t.IntersectionC<[t.TypeC<{
|
|
|
64048
64054
|
CONTAINS: unknown;
|
|
64049
64055
|
IS_SHOWN: unknown;
|
|
64050
64056
|
IS_NOT_SHOWN: unknown;
|
|
64057
|
+
DOES_NOT_CONTAIN: unknown;
|
|
64051
64058
|
}>;
|
|
64052
64059
|
}>, t.PartialC<{
|
|
64053
64060
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -64249,6 +64256,7 @@ declare const AssessmentTemplateInput: t.IntersectionC<[t.TypeC<{
|
|
|
64249
64256
|
CONTAINS: unknown;
|
|
64250
64257
|
IS_SHOWN: unknown;
|
|
64251
64258
|
IS_NOT_SHOWN: unknown;
|
|
64259
|
+
DOES_NOT_CONTAIN: unknown;
|
|
64252
64260
|
}>;
|
|
64253
64261
|
}>, t.PartialC<{
|
|
64254
64262
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -64265,6 +64273,7 @@ declare const AssessmentTemplateInput: t.IntersectionC<[t.TypeC<{
|
|
|
64265
64273
|
CONTAINS: unknown;
|
|
64266
64274
|
IS_SHOWN: unknown;
|
|
64267
64275
|
IS_NOT_SHOWN: unknown;
|
|
64276
|
+
DOES_NOT_CONTAIN: unknown;
|
|
64268
64277
|
}>;
|
|
64269
64278
|
}>, t.PartialC<{
|
|
64270
64279
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -64517,6 +64526,7 @@ declare const AssessmentInput: t.IntersectionC<[t.TypeC<{
|
|
|
64517
64526
|
CONTAINS: unknown;
|
|
64518
64527
|
IS_SHOWN: unknown;
|
|
64519
64528
|
IS_NOT_SHOWN: unknown;
|
|
64529
|
+
DOES_NOT_CONTAIN: unknown;
|
|
64520
64530
|
}>;
|
|
64521
64531
|
}>, t.PartialC<{
|
|
64522
64532
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -64533,6 +64543,7 @@ declare const AssessmentInput: t.IntersectionC<[t.TypeC<{
|
|
|
64533
64543
|
CONTAINS: unknown;
|
|
64534
64544
|
IS_SHOWN: unknown;
|
|
64535
64545
|
IS_NOT_SHOWN: unknown;
|
|
64546
|
+
DOES_NOT_CONTAIN: unknown;
|
|
64536
64547
|
}>;
|
|
64537
64548
|
}>, t.PartialC<{
|
|
64538
64549
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -110828,6 +110839,7 @@ declare const TranscendInput: t.PartialC<{
|
|
|
110828
110839
|
CONTAINS: unknown;
|
|
110829
110840
|
IS_SHOWN: unknown;
|
|
110830
110841
|
IS_NOT_SHOWN: unknown;
|
|
110842
|
+
DOES_NOT_CONTAIN: unknown;
|
|
110831
110843
|
}>;
|
|
110832
110844
|
}>, t.PartialC<{
|
|
110833
110845
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -110844,6 +110856,7 @@ declare const TranscendInput: t.PartialC<{
|
|
|
110844
110856
|
CONTAINS: unknown;
|
|
110845
110857
|
IS_SHOWN: unknown;
|
|
110846
110858
|
IS_NOT_SHOWN: unknown;
|
|
110859
|
+
DOES_NOT_CONTAIN: unknown;
|
|
110847
110860
|
}>;
|
|
110848
110861
|
}>, t.PartialC<{
|
|
110849
110862
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -111063,6 +111076,7 @@ declare const TranscendInput: t.PartialC<{
|
|
|
111063
111076
|
CONTAINS: unknown;
|
|
111064
111077
|
IS_SHOWN: unknown;
|
|
111065
111078
|
IS_NOT_SHOWN: unknown;
|
|
111079
|
+
DOES_NOT_CONTAIN: unknown;
|
|
111066
111080
|
}>;
|
|
111067
111081
|
}>, t.PartialC<{
|
|
111068
111082
|
/** The values to compare the question answer to */'comparison-operands': t.ArrayC<t.StringC>;
|
|
@@ -111079,6 +111093,7 @@ declare const TranscendInput: t.PartialC<{
|
|
|
111079
111093
|
CONTAINS: unknown;
|
|
111080
111094
|
IS_SHOWN: unknown;
|
|
111081
111095
|
IS_NOT_SHOWN: unknown;
|
|
111096
|
+
DOES_NOT_CONTAIN: unknown;
|
|
111082
111097
|
}>;
|
|
111083
111098
|
}>, t.PartialC<{
|
|
111084
111099
|
/** The risk level to assign to the question */'risk-level': t.StringC; /** The risk matrix column to assign to a question. */
|
|
@@ -133673,11 +133688,11 @@ declare const CachedFileState: t.TypeC<{
|
|
|
133673
133688
|
}>>; /** Mapping between request status in import to Transcend request status */
|
|
133674
133689
|
statusToRequestStatus: t.RecordC<t.StringC, t.KeyofC<{
|
|
133675
133690
|
CANCELED: unknown;
|
|
133691
|
+
"[NONE]": unknown;
|
|
133676
133692
|
FAILED_VERIFICATION: unknown;
|
|
133677
133693
|
COMPLETED: unknown;
|
|
133678
133694
|
SECONDARY_COMPLETED: unknown;
|
|
133679
133695
|
REVOKED: unknown;
|
|
133680
|
-
"[NONE]": unknown;
|
|
133681
133696
|
}>>;
|
|
133682
133697
|
}>;
|
|
133683
133698
|
/** Type override */
|
|
@@ -139579,20 +139594,20 @@ declare const PrivacyRequestResponse: t.TypeC<{
|
|
|
139579
139594
|
status: t.KeyofC<{
|
|
139580
139595
|
CANCELED: unknown;
|
|
139581
139596
|
ON_HOLD: unknown;
|
|
139582
|
-
REQUEST_MADE: unknown;
|
|
139583
139597
|
FAILED_VERIFICATION: unknown;
|
|
139598
|
+
COMPLETED: unknown;
|
|
139599
|
+
SECONDARY_COMPLETED: unknown;
|
|
139600
|
+
REVOKED: unknown;
|
|
139601
|
+
REQUEST_MADE: unknown;
|
|
139584
139602
|
ENRICHING: unknown;
|
|
139585
139603
|
WAITING: unknown;
|
|
139586
139604
|
COMPILING: unknown;
|
|
139587
139605
|
APPROVING: unknown;
|
|
139588
139606
|
DELAYED: unknown;
|
|
139589
|
-
COMPLETED: unknown;
|
|
139590
139607
|
DOWNLOADABLE: unknown;
|
|
139591
139608
|
VIEW_CATEGORIES: unknown;
|
|
139592
139609
|
SECONDARY: unknown;
|
|
139593
|
-
SECONDARY_COMPLETED: unknown;
|
|
139594
139610
|
SECONDARY_APPROVING: unknown;
|
|
139595
|
-
REVOKED: unknown;
|
|
139596
139611
|
}>;
|
|
139597
139612
|
type: t.KeyofC<{
|
|
139598
139613
|
AUTOMATED_DECISION_MAKING_OPT_OUT: unknown;
|
|
@@ -145471,20 +145486,20 @@ declare const PrivacyRequest: t.IntersectionC<[t.TypeC<{
|
|
|
145471
145486
|
status: t.KeyofC<{
|
|
145472
145487
|
CANCELED: unknown;
|
|
145473
145488
|
ON_HOLD: unknown;
|
|
145474
|
-
REQUEST_MADE: unknown;
|
|
145475
145489
|
FAILED_VERIFICATION: unknown;
|
|
145490
|
+
COMPLETED: unknown;
|
|
145491
|
+
SECONDARY_COMPLETED: unknown;
|
|
145492
|
+
REVOKED: unknown;
|
|
145493
|
+
REQUEST_MADE: unknown;
|
|
145476
145494
|
ENRICHING: unknown;
|
|
145477
145495
|
WAITING: unknown;
|
|
145478
145496
|
COMPILING: unknown;
|
|
145479
145497
|
APPROVING: unknown;
|
|
145480
145498
|
DELAYED: unknown;
|
|
145481
|
-
COMPLETED: unknown;
|
|
145482
145499
|
DOWNLOADABLE: unknown;
|
|
145483
145500
|
VIEW_CATEGORIES: unknown;
|
|
145484
145501
|
SECONDARY: unknown;
|
|
145485
|
-
SECONDARY_COMPLETED: unknown;
|
|
145486
145502
|
SECONDARY_APPROVING: unknown;
|
|
145487
|
-
REVOKED: unknown;
|
|
145488
145503
|
}>; /** Type of data subject */
|
|
145489
145504
|
subjectType: t.StringC; /** Country of request */
|
|
145490
145505
|
country: t.UnionC<[t.NullC, t.KeyofC<{
|