@transcend-io/cli 10.28.0 → 10.29.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 +81 -15
- package/dist/{app-DCY8E776.mjs → app-B9yoXd7q.mjs} +21 -21
- package/dist/app-B9yoXd7q.mjs.map +1 -0
- package/dist/{approvePrivacyRequests-80SV_94y.mjs → approvePrivacyRequests-DDT8Zjhc.mjs} +2 -2
- package/dist/{approvePrivacyRequests-80SV_94y.mjs.map → approvePrivacyRequests-DDT8Zjhc.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-2YDkSvtA.mjs → buildExamples-DLDlrgWE.mjs} +2 -2
- package/dist/{buildExamples-2YDkSvtA.mjs.map → buildExamples-DLDlrgWE.mjs.map} +1 -1
- package/dist/{buildXdiSyncEndpoint-B3zUrI16.mjs → buildXdiSyncEndpoint-uSDQEXT2.mjs} +2 -2
- package/dist/{buildXdiSyncEndpoint-B3zUrI16.mjs.map → buildXdiSyncEndpoint-uSDQEXT2.mjs.map} +1 -1
- package/dist/{bulkRestartRequests-BLb8OJmf.mjs → bulkRestartRequests-C4wyNZ65.mjs} +2 -2
- package/dist/{bulkRestartRequests-BLb8OJmf.mjs.map → bulkRestartRequests-C4wyNZ65.mjs.map} +1 -1
- package/dist/{bulkRetryEnrichers-BA9cboSe.mjs → bulkRetryEnrichers-VbIb-WIs.mjs} +2 -2
- package/dist/{bulkRetryEnrichers-BA9cboSe.mjs.map → bulkRetryEnrichers-VbIb-WIs.mjs.map} +1 -1
- package/dist/{cancelPrivacyRequests-BEyOBJ2r.mjs → cancelPrivacyRequests-Ds6HKabX.mjs} +2 -2
- package/dist/{cancelPrivacyRequests-BEyOBJ2r.mjs.map → cancelPrivacyRequests-Ds6HKabX.mjs.map} +1 -1
- package/dist/codecs-CTxFjCg4.mjs +2 -0
- package/dist/codecs-CTxFjCg4.mjs.map +1 -0
- package/dist/{collectCsvFilesOrExit-BqnmK63h.mjs → collectCsvFilesOrExit-B1VOVGWN.mjs} +1 -1
- package/dist/{collectCsvFilesOrExit-BqnmK63h.mjs.map → collectCsvFilesOrExit-B1VOVGWN.mjs.map} +1 -1
- package/dist/{collectParquetFilesOrExit-BiksFI-Q.mjs → collectParquetFilesOrExit-DVlv5ctt.mjs} +1 -1
- package/dist/{collectParquetFilesOrExit-BiksFI-Q.mjs.map → collectParquetFilesOrExit-DVlv5ctt.mjs.map} +1 -1
- package/dist/{command-eIenZMOx.mjs → command-BVK929yJ.mjs} +2 -2
- package/dist/{command-eIenZMOx.mjs.map → command-BVK929yJ.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-O4KBox9u.mjs → consentManagersToBusinessEntities-CBJ81aGO.mjs} +1 -1
- package/dist/{consentManagersToBusinessEntities-O4KBox9u.mjs.map → consentManagersToBusinessEntities-CBJ81aGO.mjs.map} +1 -1
- package/dist/{constants-BpQ5awGp.mjs → constants-DXzsg2CQ.mjs} +2 -2
- package/dist/{constants-BpQ5awGp.mjs.map → constants-DXzsg2CQ.mjs.map} +1 -1
- package/dist/{constants-C1seVfCu.mjs → constants-D_HVDaOy.mjs} +1 -1
- package/dist/{constants-C1seVfCu.mjs.map → constants-D_HVDaOy.mjs.map} +1 -1
- package/dist/{constants-BG53Mbi9.mjs → constants-X60pMfSm.mjs} +2 -2
- package/dist/{constants-BG53Mbi9.mjs.map → constants-X60pMfSm.mjs.map} +1 -1
- package/dist/{context-CZYrQfAn.mjs → context-B33NT3ki.mjs} +1 -1
- package/dist/{context-CZYrQfAn.mjs.map → context-B33NT3ki.mjs.map} +1 -1
- package/dist/{createPoolingCommandUi-C39R_zo3.mjs → createPoolingCommandUi-Dr6Cmq63.mjs} +2 -2
- package/dist/{createPoolingCommandUi-C39R_zo3.mjs.map → createPoolingCommandUi-Dr6Cmq63.mjs.map} +1 -1
- package/dist/{dataFlowsToDataSilos-CLSHb1GA.mjs → dataFlowsToDataSilos-BF6fzWcm.mjs} +1 -1
- package/dist/{dataFlowsToDataSilos-CLSHb1GA.mjs.map → dataFlowsToDataSilos-BF6fzWcm.mjs.map} +1 -1
- package/dist/deno-runtime-DV52X8-P.mjs +2 -0
- package/dist/deno-runtime-DV52X8-P.mjs.map +1 -0
- package/dist/{done-input-validation-Cjk7a3jX.mjs → done-input-validation-BUz-aVC5.mjs} +1 -1
- package/dist/{done-input-validation-Cjk7a3jX.mjs.map → done-input-validation-BUz-aVC5.mjs.map} +1 -1
- package/dist/{downloadPrivacyRequestFiles-CLFgQItk.mjs → downloadPrivacyRequestFiles-BZjAtiKF.mjs} +2 -2
- package/dist/{downloadPrivacyRequestFiles-CLFgQItk.mjs.map → downloadPrivacyRequestFiles-BZjAtiKF.mjs.map} +1 -1
- package/dist/{extractClientError-C_6ly7Gw.mjs → extractClientError-HZ2U7yqV.mjs} +1 -1
- package/dist/{extractClientError-C_6ly7Gw.mjs.map → extractClientError-HZ2U7yqV.mjs.map} +1 -1
- package/dist/{fetchAllRequests-CEDKdq0c.mjs → fetchAllRequests-2TZr-LfT.mjs} +2 -2
- package/dist/{fetchAllRequests-CEDKdq0c.mjs.map → fetchAllRequests-2TZr-LfT.mjs.map} +1 -1
- package/dist/{formatPolicyBundleVersionSummary-CrFtcPwS.mjs → formatPolicyBundleVersionSummary-CJmMCLtJ.mjs} +1 -1
- package/dist/{formatPolicyBundleVersionSummary-CrFtcPwS.mjs.map → formatPolicyBundleVersionSummary-CJmMCLtJ.mjs.map} +1 -1
- package/dist/{fuzzyMatchColumns-OTsFJ21f.mjs → fuzzyMatchColumns-CQCzpjWC.mjs} +2 -2
- package/dist/{fuzzyMatchColumns-OTsFJ21f.mjs.map → fuzzyMatchColumns-CQCzpjWC.mjs.map} +1 -1
- package/dist/{generateCrossAccountApiKeys-D6O_Qm3Y.mjs → generateCrossAccountApiKeys-POFAc7bo.mjs} +2 -2
- package/dist/{generateCrossAccountApiKeys-D6O_Qm3Y.mjs.map → generateCrossAccountApiKeys-POFAc7bo.mjs.map} +1 -1
- package/dist/impl--JGnR3wp.mjs +3 -0
- package/dist/{impl-CzxvoiGW.mjs.map → impl--JGnR3wp.mjs.map} +1 -1
- package/dist/{impl-Drql0g72.mjs → impl-7UqkSO3x2.mjs} +2 -2
- package/dist/impl-7UqkSO3x2.mjs.map +1 -0
- package/dist/impl-B4BgGuF_.mjs +3 -0
- package/dist/impl-B4BgGuF_.mjs.map +1 -0
- package/dist/{impl-C50tdWlL2.mjs → impl-BDgc5PEC2.mjs} +2 -2
- package/dist/{impl-C50tdWlL2.mjs.map → impl-BDgc5PEC2.mjs.map} +1 -1
- package/dist/{impl-CXUJ1eRC.mjs → impl-BPoEH3Nf2.mjs} +2 -2
- package/dist/impl-BPoEH3Nf2.mjs.map +1 -0
- package/dist/impl-BPzANN8n.mjs +2 -0
- package/dist/{impl-C8BmxFQ2.mjs.map → impl-BPzANN8n.mjs.map} +1 -1
- package/dist/{impl-M3Eu4QjS.mjs → impl-BScGBm2o.mjs} +2 -2
- package/dist/{impl-M3Eu4QjS.mjs.map → impl-BScGBm2o.mjs.map} +1 -1
- package/dist/{impl-CE56-wQh.mjs → impl-BT0N2HwU.mjs} +2 -2
- package/dist/{impl-CE56-wQh.mjs.map → impl-BT0N2HwU.mjs.map} +1 -1
- package/dist/{impl-CDtUusmg.mjs → impl-BTff-yNX.mjs} +2 -2
- package/dist/{impl-CDtUusmg.mjs.map → impl-BTff-yNX.mjs.map} +1 -1
- package/dist/{impl-DXNcD7CZ.mjs → impl-BeHsB-Zk.mjs} +2 -2
- package/dist/{impl-DXNcD7CZ.mjs.map → impl-BeHsB-Zk.mjs.map} +1 -1
- package/dist/{impl-CQGeH47F.mjs → impl-Bg7zZ_F_.mjs} +2 -2
- package/dist/{impl-CQGeH47F.mjs.map → impl-Bg7zZ_F_.mjs.map} +1 -1
- package/dist/impl-Bguphgoc.mjs +2 -0
- package/dist/{impl-BsC1KVxS.mjs.map → impl-Bguphgoc.mjs.map} +1 -1
- package/dist/{impl-CWh9H7mL.mjs → impl-BkqQI3vZ.mjs} +2 -2
- package/dist/{impl-CWh9H7mL.mjs.map → impl-BkqQI3vZ.mjs.map} +1 -1
- package/dist/{impl-zZFaSmxd2.mjs → impl-BnvfuqEA2.mjs} +2 -2
- package/dist/{impl-zZFaSmxd2.mjs.map → impl-BnvfuqEA2.mjs.map} +1 -1
- package/dist/impl-C1xIUoJS.mjs +2 -0
- package/dist/impl-C1xIUoJS.mjs.map +1 -0
- package/dist/impl-C6HtWd1t.mjs +2 -0
- package/dist/{impl-BcJ019T2.mjs.map → impl-C6HtWd1t.mjs.map} +1 -1
- package/dist/impl-C8sWVJUG.mjs +2 -0
- package/dist/impl-C8sWVJUG.mjs.map +1 -0
- package/dist/{impl-KKrDTraf.mjs → impl-CE_nprLV.mjs} +2 -2
- package/dist/{impl-KKrDTraf.mjs.map → impl-CE_nprLV.mjs.map} +1 -1
- package/dist/{impl-CEmXPEq22.mjs → impl-CF0ts8Fz2.mjs} +2 -2
- package/dist/{impl-CEmXPEq22.mjs.map → impl-CF0ts8Fz2.mjs.map} +1 -1
- package/dist/impl-CMK8Qm_I2.mjs +303 -0
- package/dist/impl-CMK8Qm_I2.mjs.map +1 -0
- package/dist/{impl-BvNZqLrT.mjs → impl-CO4ZqlLV.mjs} +2 -2
- package/dist/{impl-BvNZqLrT.mjs.map → impl-CO4ZqlLV.mjs.map} +1 -1
- package/dist/{impl-DJLlcqSg.mjs → impl-COujMWgp.mjs} +2 -2
- package/dist/{impl-DJLlcqSg.mjs.map → impl-COujMWgp.mjs.map} +1 -1
- package/dist/{impl-Bs-drNBf.mjs → impl-CPSEzCc9.mjs} +2 -2
- package/dist/{impl-Bs-drNBf.mjs.map → impl-CPSEzCc9.mjs.map} +1 -1
- package/dist/{impl-Dib6Fff12.mjs → impl-CQtMFz1O.mjs} +2 -2
- package/dist/impl-CQtMFz1O.mjs.map +1 -0
- package/dist/{impl-B--lr5RJ2.mjs → impl-CSRal4Rj2.mjs} +2 -2
- package/dist/{impl-B--lr5RJ2.mjs.map → impl-CSRal4Rj2.mjs.map} +1 -1
- package/dist/{impl-DYf10-BD2.mjs → impl-CSmFd6iO2.mjs} +2 -2
- package/dist/{impl-DYf10-BD2.mjs.map → impl-CSmFd6iO2.mjs.map} +1 -1
- package/dist/{impl-B3_hrFPX.mjs → impl-CUOVJsRg.mjs} +2 -2
- package/dist/{impl-B3_hrFPX.mjs.map → impl-CUOVJsRg.mjs.map} +1 -1
- package/dist/{impl-BySmbxEt.mjs → impl-CUiYbk6G.mjs} +2 -2
- package/dist/{impl-BySmbxEt.mjs.map → impl-CUiYbk6G.mjs.map} +1 -1
- package/dist/{impl-BFJtKA2o2.mjs → impl-CfMrFWb_.mjs} +2 -2
- package/dist/impl-CfMrFWb_.mjs.map +1 -0
- package/dist/{impl-Cx3T0Iei.mjs → impl-CfvxD3RI.mjs} +2 -2
- package/dist/{impl-Cx3T0Iei.mjs.map → impl-CfvxD3RI.mjs.map} +1 -1
- package/dist/{impl-DHfYO9T52.mjs → impl-Cli2XRp02.mjs} +2 -2
- package/dist/{impl-DHfYO9T52.mjs.map → impl-Cli2XRp02.mjs.map} +1 -1
- package/dist/{impl-C5dzaDga2.mjs → impl-DInF5q00.mjs} +2 -2
- package/dist/impl-DInF5q00.mjs.map +1 -0
- package/dist/{impl-BWVe4VGF2.mjs → impl-DKNJFnFv2.mjs} +2 -2
- package/dist/{impl-BWVe4VGF2.mjs.map → impl-DKNJFnFv2.mjs.map} +1 -1
- package/dist/{impl-DOoR93T6.mjs → impl-DKepRc812.mjs} +2 -2
- package/dist/impl-DKepRc812.mjs.map +1 -0
- package/dist/{impl-CqF9xIIy.mjs → impl-DOuVyX0O.mjs} +2 -2
- package/dist/{impl-CqF9xIIy.mjs.map → impl-DOuVyX0O.mjs.map} +1 -1
- package/dist/{impl-DzNk41xd.mjs → impl-DPtx5iZO.mjs} +2 -2
- package/dist/{impl-DzNk41xd.mjs.map → impl-DPtx5iZO.mjs.map} +1 -1
- package/dist/{impl-BqrSLoig.mjs → impl-DRW2qfyk.mjs} +2 -2
- package/dist/{impl-BqrSLoig.mjs.map → impl-DRW2qfyk.mjs.map} +1 -1
- package/dist/{impl-syp5hclX.mjs → impl-DRpK-QLC.mjs} +2 -2
- package/dist/{impl-syp5hclX.mjs.map → impl-DRpK-QLC.mjs.map} +1 -1
- package/dist/{impl-DYwojWvN.mjs → impl-DVeGQCrr.mjs} +2 -2
- package/dist/{impl-DYwojWvN.mjs.map → impl-DVeGQCrr.mjs.map} +1 -1
- package/dist/{impl-DF8RGVlT.mjs → impl-DXRDWiB1.mjs} +2 -2
- package/dist/{impl-DF8RGVlT.mjs.map → impl-DXRDWiB1.mjs.map} +1 -1
- package/dist/{impl-CiYKuCHV.mjs → impl-DXowiNOz.mjs} +2 -2
- package/dist/{impl-CiYKuCHV.mjs.map → impl-DXowiNOz.mjs.map} +1 -1
- package/dist/{impl-DpuhHpuk.mjs → impl-DaH1_ZzK.mjs} +2 -2
- package/dist/{impl-DpuhHpuk.mjs.map → impl-DaH1_ZzK.mjs.map} +1 -1
- package/dist/{impl-DIPvFKiP.mjs → impl-DdIa0zla.mjs} +2 -2
- package/dist/{impl-DIPvFKiP.mjs.map → impl-DdIa0zla.mjs.map} +1 -1
- package/dist/{impl-Bq6g_xYv.mjs → impl-DkHzw1nR.mjs} +2 -2
- package/dist/{impl-Bq6g_xYv.mjs.map → impl-DkHzw1nR.mjs.map} +1 -1
- package/dist/{impl-DbZ1cYoR.mjs → impl-DqhZR11m.mjs} +2 -2
- package/dist/{impl-DbZ1cYoR.mjs.map → impl-DqhZR11m.mjs.map} +1 -1
- package/dist/{impl-VPBEqV0w2.mjs → impl-Dqqb0lVN.mjs} +2 -2
- package/dist/impl-Dqqb0lVN.mjs.map +1 -0
- package/dist/{impl-6m7GXUAe.mjs → impl-DryC3OJu.mjs} +2 -2
- package/dist/{impl-6m7GXUAe.mjs.map → impl-DryC3OJu.mjs.map} +1 -1
- package/dist/{impl-amV0wRWk.mjs → impl-Dv8ecMWN.mjs} +2 -2
- package/dist/{impl-amV0wRWk.mjs.map → impl-Dv8ecMWN.mjs.map} +1 -1
- package/dist/{impl-CfPXYgT42.mjs → impl-DzUTmaID2.mjs} +2 -2
- package/dist/{impl-CfPXYgT42.mjs.map → impl-DzUTmaID2.mjs.map} +1 -1
- package/dist/{impl-Dm-Fkr392.mjs → impl-IFoIxW9s.mjs} +2 -2
- package/dist/impl-IFoIxW9s.mjs.map +1 -0
- package/dist/{impl-BJlKQJdS2.mjs → impl-WxoE0bN_.mjs} +2 -2
- package/dist/impl-WxoE0bN_.mjs.map +1 -0
- package/dist/impl-Z8oWVENM.mjs +2 -0
- package/dist/impl-Z8oWVENM.mjs.map +1 -0
- package/dist/{impl-CHmjV-Pa.mjs → impl-Z_ZuLfFK.mjs} +2 -2
- package/dist/{impl-CHmjV-Pa.mjs.map → impl-Z_ZuLfFK.mjs.map} +1 -1
- package/dist/{impl-BwRcpAno.mjs → impl-_erU3Uzt2.mjs} +2 -2
- package/dist/impl-_erU3Uzt2.mjs.map +1 -0
- package/dist/{impl-m3QXCc6n.mjs → impl-a_Y8bnSn.mjs} +4 -4
- package/dist/impl-a_Y8bnSn.mjs.map +1 -0
- package/dist/{impl-BewF8tB6.mjs → impl-dXDmiiG6.mjs} +2 -2
- package/dist/{impl-BewF8tB6.mjs.map → impl-dXDmiiG6.mjs.map} +1 -1
- package/dist/{impl-BYGNx-8W2.mjs → impl-lcLJ4Wp-.mjs} +2 -2
- package/dist/impl-lcLJ4Wp-.mjs.map +1 -0
- package/dist/{impl-CTIWliTx.mjs → impl-nvYE0p_K.mjs} +2 -2
- package/dist/{impl-CTIWliTx.mjs.map → impl-nvYE0p_K.mjs.map} +1 -1
- package/dist/{impl-Dk6TZKrp2.mjs → impl-xKt-NwTT.mjs} +2 -2
- package/dist/impl-xKt-NwTT.mjs.map +1 -0
- package/dist/{impl-GHukPBnk.mjs → impl-ymZeayvp.mjs} +2 -2
- package/dist/{impl-GHukPBnk.mjs.map → impl-ymZeayvp.mjs.map} +1 -1
- package/dist/index.d.mts +12797 -1840
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/{initializeCliRuntime-802-P8MC.mjs → initializeCliRuntime-6wI_VIHV.mjs} +1 -1
- package/dist/{initializeCliRuntime-802-P8MC.mjs.map → initializeCliRuntime-6wI_VIHV.mjs.map} +1 -1
- package/dist/{inquirer-DkFTQU00.mjs → inquirer-BeaBetMO.mjs} +2 -2
- package/dist/{inquirer-DkFTQU00.mjs.map → inquirer-BeaBetMO.mjs.map} +1 -1
- package/dist/jsonc-D9dDWb1J.mjs +6 -0
- package/dist/jsonc-D9dDWb1J.mjs.map +1 -0
- package/dist/{listFiles-CWHAdKY-.mjs → listFiles-BdFUbX5x.mjs} +1 -1
- package/dist/{listFiles-CWHAdKY-.mjs.map → listFiles-BdFUbX5x.mjs.map} +1 -1
- package/dist/logger-zplFSeXU.mjs +2 -0
- package/dist/logger-zplFSeXU.mjs.map +1 -0
- package/dist/manifest-BNIpO_zW.mjs +2 -0
- package/dist/manifest-BNIpO_zW.mjs.map +1 -0
- package/dist/{mapConsentCsvRowsToInputs-MMPZwzrV.mjs → mapConsentCsvRowsToInputs-Dqb6WL4r.mjs} +1 -1
- package/dist/{mapConsentCsvRowsToInputs-MMPZwzrV.mjs.map → mapConsentCsvRowsToInputs-Dqb6WL4r.mjs.map} +1 -1
- package/dist/{markRequestDataSiloIdsCompleted-PKCcn5wQ.mjs → markRequestDataSiloIdsCompleted-2DHClQ32.mjs} +2 -2
- package/dist/{markRequestDataSiloIdsCompleted-PKCcn5wQ.mjs.map → markRequestDataSiloIdsCompleted-2DHClQ32.mjs.map} +1 -1
- package/dist/{markSilentPrivacyRequests-7l9I99pe.mjs → markSilentPrivacyRequests-BUYzKbhW.mjs} +2 -2
- package/dist/{markSilentPrivacyRequests-7l9I99pe.mjs.map → markSilentPrivacyRequests-BUYzKbhW.mjs.map} +1 -1
- package/dist/mergeTranscendInputs-DFQcbh8b.mjs +3 -0
- package/dist/mergeTranscendInputs-DFQcbh8b.mjs.map +1 -0
- package/dist/missing-manifest-DgcukXfg.mjs +2 -0
- package/dist/missing-manifest-DgcukXfg.mjs.map +1 -0
- package/dist/{module-graph-DBC7ZvyA.mjs → module-graph-Cb0g74Ft.mjs} +1 -1
- package/dist/{module-graph-DBC7ZvyA.mjs.map → module-graph-Cb0g74Ft.mjs.map} +1 -1
- package/dist/{notifyPrivacyRequestsAdditionalTime-BPIYuCov.mjs → notifyPrivacyRequestsAdditionalTime-G8IZ0Ooy.mjs} +2 -2
- package/dist/{notifyPrivacyRequestsAdditionalTime-BPIYuCov.mjs.map → notifyPrivacyRequestsAdditionalTime-G8IZ0Ooy.mjs.map} +1 -1
- package/dist/{parquetToCsvOneFile-CSVdrLvq.mjs → parquetToCsvOneFile-ChmPC6dL.mjs} +2 -2
- package/dist/{parquetToCsvOneFile-CSVdrLvq.mjs.map → parquetToCsvOneFile-ChmPC6dL.mjs.map} +1 -1
- package/dist/{parseAttributesFromString-C5-KGkPH.mjs → parseAttributesFromString-CO16oAlx.mjs} +2 -2
- package/dist/{parseAttributesFromString-C5-KGkPH.mjs.map → parseAttributesFromString-CO16oAlx.mjs.map} +1 -1
- package/dist/{parseVariablesFromString-Cr3x2uq3.mjs → parseVariablesFromString-BOSfQ4QF.mjs} +1 -1
- package/dist/{parseVariablesFromString-Cr3x2uq3.mjs.map → parseVariablesFromString-BOSfQ4QF.mjs.map} +1 -1
- package/dist/path-safety-D5Qwl40b.mjs +2 -0
- package/dist/path-safety-D5Qwl40b.mjs.map +1 -0
- package/dist/policy-bundle-manifest-D6dkbjNi.mjs +7 -0
- package/dist/policy-bundle-manifest-D6dkbjNi.mjs.map +1 -0
- package/dist/policy-runtime-BMKa-Upy.mjs +2 -0
- package/dist/policy-runtime-BMKa-Upy.mjs.map +1 -0
- package/dist/{printResult-esxW3HhT.mjs → printResult-CHe3nRN4.mjs} +5 -5
- package/dist/printResult-CHe3nRN4.mjs.map +1 -0
- package/dist/project-plan-apply-Dvndx455.mjs +3 -0
- package/dist/project-plan-apply-Dvndx455.mjs.map +1 -0
- package/dist/prompts-ClBXdELk.mjs +4 -0
- package/dist/prompts-ClBXdELk.mjs.map +1 -0
- package/dist/{pullAllDatapoints-H92qjLSx.mjs → pullAllDatapoints-uk5ggk6O.mjs} +2 -2
- package/dist/{pullAllDatapoints-H92qjLSx.mjs.map → pullAllDatapoints-uk5ggk6O.mjs.map} +1 -1
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-BrDmPbvc.mjs → pullChunkedCustomSiloOutstandingIdentifiers-BxolFAfF.mjs} +2 -2
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-BrDmPbvc.mjs.map → pullChunkedCustomSiloOutstandingIdentifiers-BxolFAfF.mjs.map} +1 -1
- package/dist/{pullConsentManagerMetrics-Cvex-gpd.mjs → pullConsentManagerMetrics-Dv5n1ZGp.mjs} +2 -2
- package/dist/{pullConsentManagerMetrics-Cvex-gpd.mjs.map → pullConsentManagerMetrics-Dv5n1ZGp.mjs.map} +1 -1
- package/dist/{pullManualEnrichmentIdentifiersToCsv-qjdNA75O.mjs → pullManualEnrichmentIdentifiersToCsv-DcLZeqF2.mjs} +2 -2
- package/dist/{pullManualEnrichmentIdentifiersToCsv-qjdNA75O.mjs.map → pullManualEnrichmentIdentifiersToCsv-DcLZeqF2.mjs.map} +1 -1
- package/dist/{pullTranscendConfiguration-CD7Frn8z.mjs → pullTranscendConfiguration-B63M3ild.mjs} +3 -3
- package/dist/{pullTranscendConfiguration-CD7Frn8z.mjs.map → pullTranscendConfiguration-B63M3ild.mjs.map} +1 -1
- package/dist/{pullUnstructuredSubDataPointRecommendations-Dmh_-r95.mjs → pullUnstructuredSubDataPointRecommendations-YTBzfkRZ.mjs} +2 -2
- package/dist/{pullUnstructuredSubDataPointRecommendations-Dmh_-r95.mjs.map → pullUnstructuredSubDataPointRecommendations-YTBzfkRZ.mjs.map} +1 -1
- package/dist/{pushCronIdentifiersFromCsv-DjeY7TtK.mjs → pushCronIdentifiersFromCsv-CVTCk6s3.mjs} +2 -2
- package/dist/{pushCronIdentifiersFromCsv-DjeY7TtK.mjs.map → pushCronIdentifiersFromCsv-CVTCk6s3.mjs.map} +1 -1
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-BDtMo13j.mjs → pushManualEnrichmentIdentifiersFromCsv-BIkBbKfs.mjs} +2 -2
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-BDtMo13j.mjs.map → pushManualEnrichmentIdentifiersFromCsv-BIkBbKfs.mjs.map} +1 -1
- package/dist/{readCsv-Cr_1t8F5.mjs → readCsv-DLg8pwjd.mjs} +1 -1
- package/dist/{readCsv-Cr_1t8F5.mjs.map → readCsv-DLg8pwjd.mjs.map} +1 -1
- package/dist/readTranscendYaml-BNn6-Ofi.mjs +4 -0
- package/dist/readTranscendYaml-BNn6-Ofi.mjs.map +1 -0
- package/dist/{removeUnverifiedRequestIdentifiers-B9uPApVR.mjs → removeUnverifiedRequestIdentifiers-CzEvT_WR.mjs} +2 -2
- package/dist/{removeUnverifiedRequestIdentifiers-B9uPApVR.mjs.map → removeUnverifiedRequestIdentifiers-CzEvT_WR.mjs.map} +1 -1
- package/dist/{renderTable-DKTZbMjY.mjs → renderTable-D68QasPc.mjs} +1 -1
- package/dist/{renderTable-DKTZbMjY.mjs.map → renderTable-D68QasPc.mjs.map} +1 -1
- package/dist/{request-B1yRTdG-.mjs → request-BiPv6jmP.mjs} +1 -1
- package/dist/{request-B1yRTdG-.mjs.map → request-BiPv6jmP.mjs.map} +1 -1
- package/dist/{resolveBundleIdByName-DuxWYrDF.mjs → resolveBundleIdByName-qXZBrUz_.mjs} +2 -2
- package/dist/{resolveBundleIdByName-DuxWYrDF.mjs.map → resolveBundleIdByName-qXZBrUz_.mjs.map} +1 -1
- package/dist/{resolvePolicyBundleVersion-DhXZKwb4.mjs → resolvePolicyBundleVersion-BG7XqBBP.mjs} +2 -2
- package/dist/{resolvePolicyBundleVersion-DhXZKwb4.mjs.map → resolvePolicyBundleVersion-BG7XqBBP.mjs.map} +1 -1
- package/dist/{retryRequestDataSilos-D9dBtbdl.mjs → retryRequestDataSilos-C2csdZmC.mjs} +2 -2
- package/dist/{retryRequestDataSilos-D9dBtbdl.mjs.map → retryRequestDataSilos-C2csdZmC.mjs.map} +1 -1
- package/dist/{run-captured-process-CpZBh0lG.mjs → run-captured-process-BXwWXuTh.mjs} +1 -1
- package/dist/{run-captured-process-CpZBh0lG.mjs.map → run-captured-process-BXwWXuTh.mjs.map} +1 -1
- package/dist/runOpa-CswzJxIs.mjs +2 -0
- package/dist/runOpa-CswzJxIs.mjs.map +1 -0
- package/dist/scaffold-model-BAbYTR0q.mjs +2 -0
- package/dist/scaffold-model-BAbYTR0q.mjs.map +1 -0
- package/dist/scaffold-planning-CNv83t_v.mjs +123 -0
- package/dist/scaffold-planning-CNv83t_v.mjs.map +1 -0
- package/dist/scaffold-templates-DzDGTZie.mjs +84 -0
- package/dist/scaffold-templates-DzDGTZie.mjs.map +1 -0
- package/dist/{skipPreflightJobs-Beia_iB6.mjs → skipPreflightJobs-CB_lGpri.mjs} +2 -2
- package/dist/{skipPreflightJobs-Beia_iB6.mjs.map → skipPreflightJobs-CB_lGpri.mjs.map} +1 -1
- package/dist/{skipRequestDataSilos-BSNLacnR.mjs → skipRequestDataSilos-Bf85wXUC.mjs} +2 -2
- package/dist/{skipRequestDataSilos-BSNLacnR.mjs.map → skipRequestDataSilos-Bf85wXUC.mjs.map} +1 -1
- package/dist/{streamPrivacyRequestsToCsv-Cksb9D49.mjs → streamPrivacyRequestsToCsv-CPwLKjTm.mjs} +2 -2
- package/dist/{streamPrivacyRequestsToCsv-Cksb9D49.mjs.map → streamPrivacyRequestsToCsv-CPwLKjTm.mjs.map} +1 -1
- package/dist/{syncCodePackages-DsC1tE8B.mjs → syncCodePackages-BHE2Tn1Q.mjs} +2 -2
- package/dist/{syncCodePackages-DsC1tE8B.mjs.map → syncCodePackages-BHE2Tn1Q.mjs.map} +1 -1
- package/dist/{updateConsentManagerVersionToLatest-CaEkTnlL.mjs → updateConsentManagerVersionToLatest-ikIE5dHp.mjs} +2 -2
- package/dist/{updateConsentManagerVersionToLatest-CaEkTnlL.mjs.map → updateConsentManagerVersionToLatest-ikIE5dHp.mjs.map} +1 -1
- package/dist/{uploadConsents-CNyuYx0o.mjs → uploadConsents-BrWpoV6_.mjs} +2 -2
- package/dist/{uploadConsents-CNyuYx0o.mjs.map → uploadConsents-BrWpoV6_.mjs.map} +1 -1
- package/dist/{uploadPrivacyRequestsFromCsv-BdTQOZnF.mjs → uploadPrivacyRequestsFromCsv-BuB0-XpH.mjs} +2 -2
- package/dist/{uploadPrivacyRequestsFromCsv-BdTQOZnF.mjs.map → uploadPrivacyRequestsFromCsv-BuB0-XpH.mjs.map} +1 -1
- package/dist/{validateTranscendAuth-CnHMn77m.mjs → validateTranscendAuth-D6Wr1cxY.mjs} +2 -2
- package/dist/{validateTranscendAuth-CnHMn77m.mjs.map → validateTranscendAuth-D6Wr1cxY.mjs.map} +1 -1
- package/dist/{writeCsv-D46aDkGf.mjs → writeCsv-D-2siSwE.mjs} +1 -1
- package/dist/{writeCsv-D46aDkGf.mjs.map → writeCsv-D-2siSwE.mjs.map} +1 -1
- package/package.json +8 -7
- package/dist/app-DCY8E776.mjs.map +0 -1
- package/dist/codecs-BsQFAFGT.mjs +0 -2
- package/dist/codecs-BsQFAFGT.mjs.map +0 -1
- package/dist/constants-BMAOvdcA.mjs +0 -2
- package/dist/constants-BMAOvdcA.mjs.map +0 -1
- package/dist/deno-runtime-QqwBDKXX.mjs +0 -2
- package/dist/deno-runtime-QqwBDKXX.mjs.map +0 -1
- package/dist/impl-BFJtKA2o2.mjs.map +0 -1
- package/dist/impl-BJlKQJdS2.mjs.map +0 -1
- package/dist/impl-BNPgYSBT.mjs +0 -3
- package/dist/impl-BNPgYSBT.mjs.map +0 -1
- package/dist/impl-BYGNx-8W2.mjs.map +0 -1
- package/dist/impl-BcJ019T2.mjs +0 -2
- package/dist/impl-BsC1KVxS.mjs +0 -2
- package/dist/impl-BwRcpAno.mjs.map +0 -1
- package/dist/impl-C5dzaDga2.mjs.map +0 -1
- package/dist/impl-C8BmxFQ2.mjs +0 -2
- package/dist/impl-CXUJ1eRC.mjs.map +0 -1
- package/dist/impl-CzxvoiGW.mjs +0 -3
- package/dist/impl-D-SQJc3t.mjs +0 -2
- package/dist/impl-D-SQJc3t.mjs.map +0 -1
- package/dist/impl-D23kJPAQ2.mjs +0 -3
- package/dist/impl-D23kJPAQ2.mjs.map +0 -1
- package/dist/impl-DOoR93T6.mjs.map +0 -1
- package/dist/impl-Dib6Fff12.mjs.map +0 -1
- package/dist/impl-Dk6TZKrp2.mjs.map +0 -1
- package/dist/impl-Dm-Fkr392.mjs.map +0 -1
- package/dist/impl-Drql0g72.mjs.map +0 -1
- package/dist/impl-FLj_mWLO.mjs +0 -2
- package/dist/impl-FLj_mWLO.mjs.map +0 -1
- package/dist/impl-VPBEqV0w2.mjs.map +0 -1
- package/dist/impl-m3QXCc6n.mjs.map +0 -1
- package/dist/logger-9T6vva73.mjs +0 -2
- package/dist/logger-9T6vva73.mjs.map +0 -1
- package/dist/manifest-DVuW_vvO.mjs +0 -2
- package/dist/manifest-DVuW_vvO.mjs.map +0 -1
- package/dist/mergeTranscendInputs-CWHXH0kF.mjs +0 -3
- package/dist/mergeTranscendInputs-CWHXH0kF.mjs.map +0 -1
- package/dist/missing-manifest-BKj1j-jg.mjs +0 -2
- package/dist/missing-manifest-BKj1j-jg.mjs.map +0 -1
- package/dist/printResult-esxW3HhT.mjs.map +0 -1
- package/dist/project-plan-apply-C2DfikVN.mjs +0 -3
- package/dist/project-plan-apply-C2DfikVN.mjs.map +0 -1
- package/dist/readTranscendYaml-STYnRzq-.mjs +0 -4
- package/dist/readTranscendYaml-STYnRzq-.mjs.map +0 -1
- package/dist/runOpa-CkKAwsvB.mjs +0 -2
- package/dist/runOpa-CkKAwsvB.mjs.map +0 -1
- package/dist/scaffold-planning-DMACXSnX.mjs +0 -121
- package/dist/scaffold-planning-DMACXSnX.mjs.map +0 -1
- package/dist/scaffold-templates-CsHM1y80.mjs +0 -84
- package/dist/scaffold-templates-CsHM1y80.mjs.map +0 -1
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
const e=[`general`,`dsr-datapoint`,`dsr-enricher`,`dsr-both`],t=/^(?:con|prn|aux|nul|clock\$|com[1-9]|lpt[1-9])$/i;function n(e){let t=o(a(e));return s(t),t}function r(e){let t=a(e);return s(o(t)),t}function i(e,t){let i=r(e),a=n(i),o=`functions/${a}.ts`,s={path:o,contents:u(t)};if(t===`general`){let e=l(`test-payloads/${a}.json`,p());return{displayName:i,slug:a,sourceFile:s,payloadFiles:[e],manifestEntry:{name:i,code:c(o),"test-payload":c(e.path)}}}let d=[];(t===`dsr-datapoint`||t===`dsr-both`)&&d.push(l(`test-payloads/${a}-datapoint.json`,m())),(t===`dsr-enricher`||t===`dsr-both`)&&d.push(l(`test-payloads/${a}-enricher.json`,h()));let f={name:i,code:c(o),type:`DSR`,env:{TRANSCEND_API_KEY:`<<parameters.TRANSCEND_API_KEY>>`}};if(t===`dsr-datapoint`)f[`test-payload`]=c(d[0].path),f[`test-payload-type`]=`DATA_POINT`;else if(t===`dsr-enricher`)f[`test-payload`]=c(d[0].path),f[`test-payload-type`]=`REQUEST_ENRICHER`;else if(t===`dsr-both`)f[`test-payloads`]=[{payload:c(d[0].path),"payload-type":`DATA_POINT`},{payload:c(d[1].path),"payload-type":`REQUEST_ENRICHER`}];else throw Error(`Unsupported Custom Function template: ${String(t)}`);return{displayName:i,slug:a,sourceFile:s,payloadFiles:d,manifestEntry:f}}function a(e){if(/[\u0000-\u001f\u007f]/u.test(e))throw Error(`Custom Function name cannot contain control characters.`);if(/[\\/]/u.test(e))throw Error(`Custom Function name cannot contain path separators.`);let t=e.trim().replace(/\s+/gu,` `);if(!t)throw Error(`Custom Function name cannot be empty.`);return t}function o(e){return e.normalize(`NFKD`).replace(/\p{Mark}/gu,``).replace(/([A-Z]{2,})([A-Z][a-z])/g,`$1-$2`).replace(/([a-z\d])([A-Z])/g,`$1-$2`).replace(/['’]/gu,``).toLowerCase().replace(/[^a-z0-9]+/gu,`-`).replace(/^-+|-+$/gu,``)}function s(e){if(!e)throw Error(`Custom Function name must contain a letter or number.`);if(e.length>80)throw Error(`Custom Function slug cannot exceed 80 characters.`);if(t.test(e))throw Error(`Custom Function name resolves to reserved filename "${e}".`)}function c(e){return`./${e}`}function l(e,t){return{path:e,contents:`${JSON.stringify(t,null,2)}\n`}}function u(e){let t=`import type { CustomFunction } from '@transcend-io/custom-function-types';`;switch(e){case`general`:return`${t}
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Handle a General Custom Function invocation.
|
|
5
|
-
*
|
|
6
|
-
* @param argument - Services and payload supplied by Transcend
|
|
7
|
-
*/
|
|
8
|
-
export default function customFunction({
|
|
9
|
-
payload,
|
|
10
|
-
}: CustomFunction.GeneralArgument): void {
|
|
11
|
-
// TODO: Handle the webhook or schedule payload.
|
|
12
|
-
void payload;
|
|
13
|
-
}
|
|
14
|
-
`;case`dsr-datapoint`:return`${t}
|
|
15
|
-
|
|
16
|
-
${d()}
|
|
17
|
-
`;case`dsr-enricher`:return`${t}
|
|
18
|
-
|
|
19
|
-
${f()}
|
|
20
|
-
`;case`dsr-both`:return`${t}
|
|
21
|
-
|
|
22
|
-
${d()}
|
|
23
|
-
|
|
24
|
-
${f()}
|
|
25
|
-
`;default:throw Error(`Unsupported Custom Function template: ${String(e)}`)}}function d(){return`/**
|
|
26
|
-
* Resolve a data subject request datapoint.
|
|
27
|
-
*
|
|
28
|
-
* @param argument - Services and payload supplied by Transcend
|
|
29
|
-
*/
|
|
30
|
-
export default async function customFunction({
|
|
31
|
-
environment,
|
|
32
|
-
payload,
|
|
33
|
-
sdk,
|
|
34
|
-
}: CustomFunction.Argument): Promise<void> {
|
|
35
|
-
if (payload.type !== 'ACCESS') {
|
|
36
|
-
throw new Error(\`Unsupported request type: \${payload.type}\`);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// TODO: Fetch the matching record from your customer API.
|
|
40
|
-
// TODO: Map that record into the profiles array.
|
|
41
|
-
const profiles: unknown[] = [];
|
|
42
|
-
const response = await sdk.fetch('/v1/data-silo', {
|
|
43
|
-
method: 'POST',
|
|
44
|
-
headers: {
|
|
45
|
-
Authorization: \`Bearer \${environment.TRANSCEND_API_KEY}\`,
|
|
46
|
-
'Content-Type': 'application/json',
|
|
47
|
-
},
|
|
48
|
-
body: JSON.stringify({ profiles, status: 'READY' }),
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
if (!response.ok) {
|
|
52
|
-
const body = await response.text();
|
|
53
|
-
throw new Error(
|
|
54
|
-
\`Failed to report ACCESS results: status=\${response.status} statusText=\${response.statusText} body=\${body}\`,
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
}`}function f(){return`/**
|
|
58
|
-
* Enrich identifiers before a data subject request runs.
|
|
59
|
-
*
|
|
60
|
-
* @param argument - Services and payload supplied by Transcend
|
|
61
|
-
*/
|
|
62
|
-
export async function enricher({
|
|
63
|
-
environment,
|
|
64
|
-
sdk,
|
|
65
|
-
}: CustomFunction.EnricherArgument): Promise<void> {
|
|
66
|
-
// TODO: Query your customer API and map discovered identifiers here.
|
|
67
|
-
const enrichedIdentifiers = {};
|
|
68
|
-
const response = await sdk.fetch('/v1/enrich-identifiers', {
|
|
69
|
-
method: 'POST',
|
|
70
|
-
headers: {
|
|
71
|
-
Authorization: \`Bearer \${environment.TRANSCEND_API_KEY}\`,
|
|
72
|
-
'Content-Type': 'application/json',
|
|
73
|
-
},
|
|
74
|
-
body: JSON.stringify({ enrichedIdentifiers }),
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
if (!response.ok) {
|
|
78
|
-
const body = await response.text();
|
|
79
|
-
throw new Error(
|
|
80
|
-
\`Failed to report enriched identifiers: status=\${response.status} statusText=\${response.statusText} body=\${body}\`,
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
}`}function p(){return{event:`example`}}function m(){return{type:`ACCESS`,dataSubject:{type:`customer`},isTest:!0,extras:{profile:{id:`00000000-0000-4000-8000-000000000001`,RequestDataSiloId:`00000000-0000-4000-8000-000000000002`,identifier:`person@example.com`,type:`email`},request:g(),organization:_()}}}function h(){return{type:`ACCESS`,dataSubject:{type:`customer`},isTest:!0,requestIdentifier:{name:`email`,value:`person@example.com`},extras:{enricher:{id:`00000000-0000-4000-8000-000000000003`,title:`Email enrichment`},identifier:{id:`00000000-0000-4000-8000-000000000004`,name:`email`,type:`email`},requestEnricherId:`00000000-0000-4000-8000-000000000005`,request:g(),organization:_()}}}function g(){return{details:``,id:`00000000-0000-4000-8000-000000000006`,link:`/requests/00000000-0000-4000-8000-000000000006`,createdAt:`2026-01-01T00:00:00.000Z`,locale:`en-US`,origin:`API`}}function _(){return{id:`00000000-0000-4000-8000-000000000007`,uri:`example`,name:`Example Organization`}}export{i as n,r,e as t};
|
|
84
|
-
//# sourceMappingURL=scaffold-templates-CsHM1y80.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-templates-CsHM1y80.mjs","names":[],"sources":["../src/lib/custom-functions/scaffold-templates.ts"],"sourcesContent":["import type { CustomFunctionManifestEntry } from './manifest.js';\n\n/** Supported Custom Function scaffold templates. */\nexport const CUSTOM_FUNCTION_TEMPLATE_NAMES = [\n 'general',\n 'dsr-datapoint',\n 'dsr-enricher',\n 'dsr-both',\n] as const;\n\n/** A supported Custom Function scaffold template. */\nexport type CustomFunctionTemplateName = (typeof CUSTOM_FUNCTION_TEMPLATE_NAMES)[number];\n\n/** One generated, manifest-relative scaffold file. */\nexport interface GeneratedCustomFunctionFile {\n /** Path relative to the Custom Function manifest. */\n path: string;\n /** Complete deterministic file contents. */\n contents: string;\n}\n\n/** Pure output used to plan a Custom Function scaffold. */\nexport interface GeneratedCustomFunctionTemplate {\n /** Normalized display name retained in the manifest. */\n displayName: string;\n /** Filesystem-safe name used by source and payload files. */\n slug: string;\n /** Generated TypeScript source file. */\n sourceFile: GeneratedCustomFunctionFile;\n /** Generated JSON test payload files. */\n payloadFiles: GeneratedCustomFunctionFile[];\n /** Manifest entry matching the generated source and payloads. */\n manifestEntry: CustomFunctionManifestEntry;\n}\n\nconst MAX_SLUG_LENGTH = 80;\nconst WINDOWS_RESERVED_FILENAME = /^(?:con|prn|aux|nul|clock\\$|com[1-9]|lpt[1-9])$/i;\n\n/**\n * Convert a display name to an ASCII kebab-case filename stem.\n *\n * @param displayName - Human-readable Custom Function name\n * @returns Filesystem-safe kebab-case slug\n */\nexport function deriveCustomFunctionSlug(displayName: string): string {\n const normalizedName = normalizeAndValidateDisplayName(displayName);\n const slug = slugify(normalizedName);\n validateSlug(slug);\n return slug;\n}\n\n/**\n * Validate and normalize a customer-visible Custom Function name.\n *\n * @param displayName - Proposed human-readable name\n * @returns Trimmed name with internal whitespace normalized\n */\nexport function validateCustomFunctionDisplayName(displayName: string): string {\n const normalizedName = normalizeAndValidateDisplayName(displayName);\n validateSlug(slugify(normalizedName));\n return normalizedName;\n}\n\n/**\n * Generate source, test payloads, and matching manifest data without I/O.\n *\n * @param displayName - Human-readable Custom Function name\n * @param templateName - Handler shape to generate\n * @returns Deterministic scaffold contents\n */\nexport function generateCustomFunctionTemplate(\n displayName: string,\n templateName: CustomFunctionTemplateName,\n): GeneratedCustomFunctionTemplate {\n const normalizedName = validateCustomFunctionDisplayName(displayName);\n const slug = deriveCustomFunctionSlug(normalizedName);\n const sourcePath = `functions/${slug}.ts`;\n const sourceFile = {\n path: sourcePath,\n contents: buildSource(templateName),\n };\n\n if (templateName === 'general') {\n const payloadFile = buildPayloadFile(`test-payloads/${slug}.json`, buildGeneralPayload());\n return {\n displayName: normalizedName,\n slug,\n sourceFile,\n payloadFiles: [payloadFile],\n manifestEntry: {\n name: normalizedName,\n code: toManifestPath(sourcePath),\n 'test-payload': toManifestPath(payloadFile.path),\n },\n };\n }\n\n const payloadFiles: GeneratedCustomFunctionFile[] = [];\n if (templateName === 'dsr-datapoint' || templateName === 'dsr-both') {\n payloadFiles.push(\n buildPayloadFile(`test-payloads/${slug}-datapoint.json`, buildDataPointPayload()),\n );\n }\n if (templateName === 'dsr-enricher' || templateName === 'dsr-both') {\n payloadFiles.push(\n buildPayloadFile(`test-payloads/${slug}-enricher.json`, buildEnricherPayload()),\n );\n }\n\n const manifestEntry: CustomFunctionManifestEntry = {\n name: normalizedName,\n code: toManifestPath(sourcePath),\n type: 'DSR',\n env: {\n TRANSCEND_API_KEY: '<<parameters.TRANSCEND_API_KEY>>',\n },\n };\n\n if (templateName === 'dsr-datapoint') {\n manifestEntry['test-payload'] = toManifestPath(payloadFiles[0]!.path);\n manifestEntry['test-payload-type'] = 'DATA_POINT';\n } else if (templateName === 'dsr-enricher') {\n manifestEntry['test-payload'] = toManifestPath(payloadFiles[0]!.path);\n manifestEntry['test-payload-type'] = 'REQUEST_ENRICHER';\n } else if (templateName === 'dsr-both') {\n manifestEntry['test-payloads'] = [\n {\n payload: toManifestPath(payloadFiles[0]!.path),\n 'payload-type': 'DATA_POINT',\n },\n {\n payload: toManifestPath(payloadFiles[1]!.path),\n 'payload-type': 'REQUEST_ENRICHER',\n },\n ];\n } else {\n throw new Error(`Unsupported Custom Function template: ${String(templateName)}`);\n }\n\n return {\n displayName: normalizedName,\n slug,\n sourceFile,\n payloadFiles,\n manifestEntry,\n };\n}\n\n/**\n * Normalize the display name before validating its path-related properties.\n *\n * @param displayName - Proposed display name\n * @returns Normalized display name\n */\nfunction normalizeAndValidateDisplayName(displayName: string): string {\n if (/[\\u0000-\\u001f\\u007f]/u.test(displayName)) {\n throw new Error('Custom Function name cannot contain control characters.');\n }\n if (/[\\\\/]/u.test(displayName)) {\n throw new Error('Custom Function name cannot contain path separators.');\n }\n\n const normalizedName = displayName.trim().replace(/\\s+/gu, ' ');\n if (!normalizedName) {\n throw new Error('Custom Function name cannot be empty.');\n }\n return normalizedName;\n}\n\n/**\n * Derive an unvalidated slug from a normalized display name.\n *\n * @param displayName - Normalized display name\n * @returns Candidate slug\n */\nfunction slugify(displayName: string): string {\n return displayName\n .normalize('NFKD')\n .replace(/\\p{Mark}/gu, '')\n .replace(/([A-Z]{2,})([A-Z][a-z])/g, '$1-$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1-$2')\n .replace(/['’]/gu, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/gu, '-')\n .replace(/^-+|-+$/gu, '');\n}\n\n/**\n * Reject candidate slugs that are not portable filenames.\n *\n * @param slug - Candidate filename stem\n */\nfunction validateSlug(slug: string): void {\n if (!slug) {\n throw new Error('Custom Function name must contain a letter or number.');\n }\n if (slug.length > MAX_SLUG_LENGTH) {\n throw new Error(`Custom Function slug cannot exceed ${MAX_SLUG_LENGTH} characters.`);\n }\n if (WINDOWS_RESERVED_FILENAME.test(slug)) {\n throw new Error(`Custom Function name resolves to reserved filename \"${slug}\".`);\n }\n}\n\n/**\n * Prefix a generated relative path for manifest storage.\n *\n * @param path - Relative generated file path\n * @returns Explicit manifest-relative path\n */\nfunction toManifestPath(path: string): string {\n return `./${path}`;\n}\n\n/**\n * Serialize a payload with stable indentation and a final newline.\n *\n * @param path - Manifest-relative payload path\n * @param payload - JSON-compatible payload\n * @returns Generated payload file\n */\nfunction buildPayloadFile(path: string, payload: object): GeneratedCustomFunctionFile {\n return {\n path,\n contents: `${JSON.stringify(payload, null, 2)}\\n`,\n };\n}\n\n/**\n * Select the source template for one handler shape.\n *\n * @param templateName - Handler shape\n * @returns TypeScript source\n */\nfunction buildSource(templateName: CustomFunctionTemplateName): string {\n const importStatement =\n \"import type { CustomFunction } from '@transcend-io/custom-function-types';\";\n\n switch (templateName) {\n case 'general':\n return `${importStatement}\n\n/**\n * Handle a General Custom Function invocation.\n *\n * @param argument - Services and payload supplied by Transcend\n */\nexport default function customFunction({\n payload,\n}: CustomFunction.GeneralArgument): void {\n // TODO: Handle the webhook or schedule payload.\n void payload;\n}\n`;\n case 'dsr-datapoint':\n return `${importStatement}\n\n${buildDataPointHandler()}\n`;\n case 'dsr-enricher':\n return `${importStatement}\n\n${buildEnricherHandler()}\n`;\n case 'dsr-both':\n return `${importStatement}\n\n${buildDataPointHandler()}\n\n${buildEnricherHandler()}\n`;\n default:\n throw new Error(`Unsupported Custom Function template: ${String(templateName)}`);\n }\n}\n\n/**\n * Build the DSR datapoint default export.\n *\n * @returns TypeScript source\n */\nfunction buildDataPointHandler(): string {\n return `/**\n * Resolve a data subject request datapoint.\n *\n * @param argument - Services and payload supplied by Transcend\n */\nexport default async function customFunction({\n environment,\n payload,\n sdk,\n}: CustomFunction.Argument): Promise<void> {\n if (payload.type !== 'ACCESS') {\n throw new Error(\\`Unsupported request type: \\${payload.type}\\`);\n }\n\n // TODO: Fetch the matching record from your customer API.\n // TODO: Map that record into the profiles array.\n const profiles: unknown[] = [];\n const response = await sdk.fetch('/v1/data-silo', {\n method: 'POST',\n headers: {\n Authorization: \\`Bearer \\${environment.TRANSCEND_API_KEY}\\`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ profiles, status: 'READY' }),\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(\n \\`Failed to report ACCESS results: status=\\${response.status} statusText=\\${response.statusText} body=\\${body}\\`,\n );\n }\n}`;\n}\n\n/**\n * Build the DSR request-enricher named export.\n *\n * @returns TypeScript source\n */\nfunction buildEnricherHandler(): string {\n return `/**\n * Enrich identifiers before a data subject request runs.\n *\n * @param argument - Services and payload supplied by Transcend\n */\nexport async function enricher({\n environment,\n sdk,\n}: CustomFunction.EnricherArgument): Promise<void> {\n // TODO: Query your customer API and map discovered identifiers here.\n const enrichedIdentifiers = {};\n const response = await sdk.fetch('/v1/enrich-identifiers', {\n method: 'POST',\n headers: {\n Authorization: \\`Bearer \\${environment.TRANSCEND_API_KEY}\\`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ enrichedIdentifiers }),\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(\n \\`Failed to report enriched identifiers: status=\\${response.status} statusText=\\${response.statusText} body=\\${body}\\`,\n );\n }\n}`;\n}\n\n/**\n * Build a representative General test payload.\n *\n * @returns JSON-compatible payload\n */\nfunction buildGeneralPayload(): object {\n return {\n event: 'example',\n };\n}\n\n/**\n * Build a representative DSR datapoint test payload.\n *\n * @returns JSON-compatible payload\n */\nfunction buildDataPointPayload(): object {\n return {\n type: 'ACCESS',\n dataSubject: {\n type: 'customer',\n },\n isTest: true,\n extras: {\n profile: {\n id: '00000000-0000-4000-8000-000000000001',\n RequestDataSiloId: '00000000-0000-4000-8000-000000000002',\n identifier: 'person@example.com',\n type: 'email',\n },\n request: buildRequest(),\n organization: buildOrganization(),\n },\n };\n}\n\n/**\n * Build a representative DSR request-enricher test payload.\n *\n * @returns JSON-compatible payload\n */\nfunction buildEnricherPayload(): object {\n return {\n type: 'ACCESS',\n dataSubject: {\n type: 'customer',\n },\n isTest: true,\n requestIdentifier: {\n name: 'email',\n value: 'person@example.com',\n },\n extras: {\n enricher: {\n id: '00000000-0000-4000-8000-000000000003',\n title: 'Email enrichment',\n },\n identifier: {\n id: '00000000-0000-4000-8000-000000000004',\n name: 'email',\n type: 'email',\n },\n requestEnricherId: '00000000-0000-4000-8000-000000000005',\n request: buildRequest(),\n organization: buildOrganization(),\n },\n };\n}\n\n/**\n * Build deterministic request metadata shared by DSR payloads.\n *\n * @returns JSON-compatible request metadata\n */\nfunction buildRequest(): object {\n return {\n details: '',\n id: '00000000-0000-4000-8000-000000000006',\n link: '/requests/00000000-0000-4000-8000-000000000006',\n createdAt: '2026-01-01T00:00:00.000Z',\n locale: 'en-US',\n origin: 'API',\n };\n}\n\n/**\n * Build deterministic organization metadata shared by DSR payloads.\n *\n * @returns JSON-compatible organization metadata\n */\nfunction buildOrganization(): object {\n return {\n id: '00000000-0000-4000-8000-000000000007',\n uri: 'example',\n name: 'Example Organization',\n };\n}\n"],"mappings":"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"}
|