@transcend-io/cli 10.27.5 → 10.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +271 -36
- package/dist/app-C5baDSA2.mjs +148 -0
- package/dist/app-C5baDSA2.mjs.map +1 -0
- package/dist/{approvePrivacyRequests-B842tXn4.mjs → approvePrivacyRequests-B8x7oxTn.mjs} +2 -2
- package/dist/{approvePrivacyRequests-B842tXn4.mjs.map → approvePrivacyRequests-B8x7oxTn.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-CRrUU89C.mjs → buildExamples-7KXBjl-b.mjs} +2 -2
- package/dist/{buildExamples-CRrUU89C.mjs.map → buildExamples-7KXBjl-b.mjs.map} +1 -1
- package/dist/{buildXdiSyncEndpoint-B9seJTxP.mjs → buildXdiSyncEndpoint-DcrkZ2Gu.mjs} +2 -2
- package/dist/{buildXdiSyncEndpoint-B9seJTxP.mjs.map → buildXdiSyncEndpoint-DcrkZ2Gu.mjs.map} +1 -1
- package/dist/{bulkRestartRequests-CE7cDUMd.mjs → bulkRestartRequests-CysUfl98.mjs} +2 -2
- package/dist/{bulkRestartRequests-CE7cDUMd.mjs.map → bulkRestartRequests-CysUfl98.mjs.map} +1 -1
- package/dist/{bulkRetryEnrichers-BcSANZPC.mjs → bulkRetryEnrichers-DaLE67Ht.mjs} +2 -2
- package/dist/{bulkRetryEnrichers-BcSANZPC.mjs.map → bulkRetryEnrichers-DaLE67Ht.mjs.map} +1 -1
- package/dist/{cancelPrivacyRequests-BKibbagv.mjs → cancelPrivacyRequests-D0zNUNdS.mjs} +2 -2
- package/dist/{cancelPrivacyRequests-BKibbagv.mjs.map → cancelPrivacyRequests-D0zNUNdS.mjs.map} +1 -1
- package/dist/codecs-CTxFjCg4.mjs +2 -0
- package/dist/codecs-CTxFjCg4.mjs.map +1 -0
- package/dist/{collectCsvFilesOrExit-Dg5U3Qx_.mjs → collectCsvFilesOrExit-B1VOVGWN.mjs} +1 -1
- package/dist/{collectCsvFilesOrExit-Dg5U3Qx_.mjs.map → collectCsvFilesOrExit-B1VOVGWN.mjs.map} +1 -1
- package/dist/{collectParquetFilesOrExit-BlG2RRSC.mjs → collectParquetFilesOrExit-DVlv5ctt.mjs} +1 -1
- package/dist/{collectParquetFilesOrExit-BlG2RRSC.mjs.map → collectParquetFilesOrExit-DVlv5ctt.mjs.map} +1 -1
- package/dist/{command-DKNKpgUB.mjs → command-CIv9yk86.mjs} +2 -2
- package/dist/{command-DKNKpgUB.mjs.map → command-CIv9yk86.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-Rv-ajWya.mjs → consentManagersToBusinessEntities-CBJ81aGO.mjs} +1 -1
- package/dist/{consentManagersToBusinessEntities-Rv-ajWya.mjs.map → consentManagersToBusinessEntities-CBJ81aGO.mjs.map} +1 -1
- package/dist/{constants-B6wESCW2.mjs → constants-DXzsg2CQ.mjs} +2 -2
- package/dist/{constants-B6wESCW2.mjs.map → constants-DXzsg2CQ.mjs.map} +1 -1
- package/dist/{constants-BuoISmXP.mjs → constants-D_HVDaOy.mjs} +1 -1
- package/dist/{constants-BuoISmXP.mjs.map → constants-D_HVDaOy.mjs.map} +1 -1
- package/dist/{constants-CdgK1myP.mjs → constants-jjHIzHGm.mjs} +2 -2
- package/dist/{constants-CdgK1myP.mjs.map → constants-jjHIzHGm.mjs.map} +1 -1
- package/dist/{context-4GAUnhTE.mjs → context-B33NT3ki.mjs} +1 -1
- package/dist/{context-4GAUnhTE.mjs.map → context-B33NT3ki.mjs.map} +1 -1
- package/dist/{createPoolingCommandUi-vTsGgYZT.mjs → createPoolingCommandUi-uiDjLlqf.mjs} +2 -2
- package/dist/{createPoolingCommandUi-vTsGgYZT.mjs.map → createPoolingCommandUi-uiDjLlqf.mjs.map} +1 -1
- package/dist/{dataFlowsToDataSilos-DRuAfwIn.mjs → dataFlowsToDataSilos-BF6fzWcm.mjs} +1 -1
- package/dist/{dataFlowsToDataSilos-DRuAfwIn.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-BFgMCQWH.mjs → done-input-validation-BUz-aVC5.mjs} +1 -1
- package/dist/{done-input-validation-BFgMCQWH.mjs.map → done-input-validation-BUz-aVC5.mjs.map} +1 -1
- package/dist/{downloadPrivacyRequestFiles-Dn3VexN2.mjs → downloadPrivacyRequestFiles-B_BVxW5Z.mjs} +2 -2
- package/dist/{downloadPrivacyRequestFiles-Dn3VexN2.mjs.map → downloadPrivacyRequestFiles-B_BVxW5Z.mjs.map} +1 -1
- package/dist/{extractClientError-DeS63kje.mjs → extractClientError-HZ2U7yqV.mjs} +1 -1
- package/dist/{extractClientError-DeS63kje.mjs.map → extractClientError-HZ2U7yqV.mjs.map} +1 -1
- package/dist/{fetchAllRequests-DUQGTJjx.mjs → fetchAllRequests-2TZr-LfT.mjs} +2 -2
- package/dist/{fetchAllRequests-DUQGTJjx.mjs.map → fetchAllRequests-2TZr-LfT.mjs.map} +1 -1
- package/dist/{formatPolicyBundleVersionSummary-Bo7DYxoy.mjs → formatPolicyBundleVersionSummary-CJmMCLtJ.mjs} +1 -1
- package/dist/{formatPolicyBundleVersionSummary-Bo7DYxoy.mjs.map → formatPolicyBundleVersionSummary-CJmMCLtJ.mjs.map} +1 -1
- package/dist/{fuzzyMatchColumns-BDD4a2W0.mjs → fuzzyMatchColumns-CQCzpjWC.mjs} +2 -2
- package/dist/{fuzzyMatchColumns-BDD4a2W0.mjs.map → fuzzyMatchColumns-CQCzpjWC.mjs.map} +1 -1
- package/dist/{generateCrossAccountApiKeys-QhnLqtUN.mjs → generateCrossAccountApiKeys-Bnqgmj-H.mjs} +2 -2
- package/dist/{generateCrossAccountApiKeys-QhnLqtUN.mjs.map → generateCrossAccountApiKeys-Bnqgmj-H.mjs.map} +1 -1
- package/dist/impl--JGnR3wp.mjs +3 -0
- package/dist/impl--JGnR3wp.mjs.map +1 -0
- package/dist/{impl-DRimS_G8.mjs → impl-2iVTxNn4.mjs} +2 -2
- package/dist/{impl-DRimS_G8.mjs.map → impl-2iVTxNn4.mjs.map} +1 -1
- package/dist/{impl-DlaWf-oS2.mjs → impl-7UqkSO3x2.mjs} +2 -2
- package/dist/{impl-DlaWf-oS2.mjs.map → impl-7UqkSO3x2.mjs.map} +1 -1
- package/dist/{impl-BPn_YPIq2.mjs → impl-B-j5ACi02.mjs} +2 -2
- package/dist/{impl-BPn_YPIq2.mjs.map → impl-B-j5ACi02.mjs.map} +1 -1
- package/dist/impl-B4BgGuF_.mjs +3 -0
- package/dist/impl-B4BgGuF_.mjs.map +1 -0
- package/dist/{impl-9TDsbGfF2.mjs → impl-BDrvzlpf2.mjs} +2 -2
- package/dist/{impl-9TDsbGfF2.mjs.map → impl-BDrvzlpf2.mjs.map} +1 -1
- package/dist/{impl-4rLX5Wah2.mjs → impl-BH_A5rgL.mjs} +2 -2
- package/dist/impl-BH_A5rgL.mjs.map +1 -0
- package/dist/{impl-CZ-KvZE02.mjs → impl-BOawPhYE.mjs} +2 -2
- package/dist/impl-BOawPhYE.mjs.map +1 -0
- package/dist/{impl-BQTw6jpw.mjs → impl-BPoEH3Nf2.mjs} +2 -2
- package/dist/impl-BPoEH3Nf2.mjs.map +1 -0
- package/dist/{impl-BoCD0t4j.mjs → impl-BXUYpR27.mjs} +2 -2
- package/dist/{impl-BoCD0t4j.mjs.map → impl-BXUYpR27.mjs.map} +1 -1
- package/dist/{impl-nJ7LzilX2.mjs → impl-Bc6p8A1l2.mjs} +2 -2
- package/dist/{impl-nJ7LzilX2.mjs.map → impl-Bc6p8A1l2.mjs.map} +1 -1
- package/dist/{impl-BbWzTCSd2.mjs → impl-BqWQh9Ss.mjs} +2 -2
- package/dist/impl-BqWQh9Ss.mjs.map +1 -0
- package/dist/impl-C6HtWd1t.mjs +2 -0
- package/dist/impl-C6HtWd1t.mjs.map +1 -0
- package/dist/{impl-DxXWaXFU.mjs → impl-CL29fOWM.mjs} +2 -2
- package/dist/{impl-DxXWaXFU.mjs.map → impl-CL29fOWM.mjs.map} +1 -1
- package/dist/{impl-BgxjEv88.mjs → impl-CO4ZqlLV.mjs} +2 -2
- package/dist/{impl-BgxjEv88.mjs.map → impl-CO4ZqlLV.mjs.map} +1 -1
- package/dist/{impl-CzbVqbm0.mjs → impl-COujMWgp.mjs} +2 -2
- package/dist/{impl-CzbVqbm0.mjs.map → impl-COujMWgp.mjs.map} +1 -1
- package/dist/{impl-CccuY3Za.mjs → impl-CPSEzCc9.mjs} +2 -2
- package/dist/{impl-CccuY3Za.mjs.map → impl-CPSEzCc9.mjs.map} +1 -1
- package/dist/{impl-DbF7uw7f2.mjs → impl-CQVy2k3o.mjs} +2 -2
- package/dist/impl-CQVy2k3o.mjs.map +1 -0
- package/dist/{impl-QeWNZCg4.mjs → impl-CUOVJsRg.mjs} +2 -2
- package/dist/{impl-QeWNZCg4.mjs.map → impl-CUOVJsRg.mjs.map} +1 -1
- package/dist/{impl-BddyFp_q.mjs → impl-CUiYbk6G.mjs} +2 -2
- package/dist/{impl-BddyFp_q.mjs.map → impl-CUiYbk6G.mjs.map} +1 -1
- package/dist/{impl-DbPLuDc22.mjs → impl-CXTBcYo6.mjs} +2 -2
- package/dist/impl-CXTBcYo6.mjs.map +1 -0
- package/dist/{impl-CVChVd63.mjs → impl-CfvxD3RI.mjs} +2 -2
- package/dist/{impl-CVChVd63.mjs.map → impl-CfvxD3RI.mjs.map} +1 -1
- package/dist/{impl-PYtpY5hs2.mjs → impl-Cli2XRp02.mjs} +2 -2
- package/dist/{impl-PYtpY5hs2.mjs.map → impl-Cli2XRp02.mjs.map} +1 -1
- package/dist/{impl-CBC5K-IH.mjs → impl-CuDs6SsI.mjs} +2 -2
- package/dist/{impl-CBC5K-IH.mjs.map → impl-CuDs6SsI.mjs.map} +1 -1
- package/dist/{impl-DiyWNLJq.mjs → impl-CvLI_Jig.mjs} +2 -2
- package/dist/{impl-DiyWNLJq.mjs.map → impl-CvLI_Jig.mjs.map} +1 -1
- package/dist/{impl-CbijbA-M2.mjs → impl-CwKYKBYb.mjs} +2 -2
- package/dist/impl-CwKYKBYb.mjs.map +1 -0
- package/dist/{impl-CMYYX3Kz.mjs → impl-CwXp3Tbr.mjs} +2 -2
- package/dist/{impl-CMYYX3Kz.mjs.map → impl-CwXp3Tbr.mjs.map} +1 -1
- package/dist/{impl-D33Zr0vh2.mjs → impl-CyQRmuM72.mjs} +2 -2
- package/dist/{impl-D33Zr0vh2.mjs.map → impl-CyQRmuM72.mjs.map} +1 -1
- package/dist/impl-DEJpYLPB.mjs +2 -0
- package/dist/impl-DEJpYLPB.mjs.map +1 -0
- package/dist/impl-DEhw1iNn.mjs +2 -0
- package/dist/impl-DEhw1iNn.mjs.map +1 -0
- package/dist/impl-DK7nSMle2.mjs +303 -0
- package/dist/impl-DK7nSMle2.mjs.map +1 -0
- package/dist/{impl-3IyENr9T.mjs → impl-DKepRc812.mjs} +2 -2
- package/dist/impl-DKepRc812.mjs.map +1 -0
- package/dist/{impl-DG9RwTkA2.mjs → impl-DLG0Egy6.mjs} +2 -2
- package/dist/impl-DLG0Egy6.mjs.map +1 -0
- package/dist/impl-DMe_OqJx.mjs +2 -0
- package/dist/impl-DMe_OqJx.mjs.map +1 -0
- package/dist/{impl-BkyqCY72.mjs → impl-DNe-gRXe2.mjs} +2 -2
- package/dist/impl-DNe-gRXe2.mjs.map +1 -0
- package/dist/{impl-Cq5wI-kP.mjs → impl-DNzkRayg.mjs} +2 -2
- package/dist/impl-DNzkRayg.mjs.map +1 -0
- package/dist/{impl-_tY0CJdZ.mjs → impl-DPtx5iZO.mjs} +2 -2
- package/dist/{impl-_tY0CJdZ.mjs.map → impl-DPtx5iZO.mjs.map} +1 -1
- package/dist/{impl-Ba8naMzu.mjs → impl-DRpK-QLC.mjs} +2 -2
- package/dist/{impl-Ba8naMzu.mjs.map → impl-DRpK-QLC.mjs.map} +1 -1
- package/dist/{impl-DQG3PiAW2.mjs → impl-DVQmuZQY.mjs} +2 -2
- package/dist/impl-DVQmuZQY.mjs.map +1 -0
- package/dist/{impl-wf0PvJms.mjs → impl-DVeGQCrr.mjs} +2 -2
- package/dist/{impl-wf0PvJms.mjs.map → impl-DVeGQCrr.mjs.map} +1 -1
- package/dist/{impl-uKjAibIR.mjs → impl-DXRDWiB1.mjs} +2 -2
- package/dist/{impl-uKjAibIR.mjs.map → impl-DXRDWiB1.mjs.map} +1 -1
- package/dist/{impl-CLVMZXJo.mjs → impl-DXowiNOz.mjs} +2 -2
- package/dist/{impl-CLVMZXJo.mjs.map → impl-DXowiNOz.mjs.map} +1 -1
- package/dist/{impl-BsEYMBx2.mjs → impl-DaH1_ZzK.mjs} +2 -2
- package/dist/{impl-BsEYMBx2.mjs.map → impl-DaH1_ZzK.mjs.map} +1 -1
- package/dist/{impl-p0AyZWFL.mjs → impl-DdIa0zla.mjs} +2 -2
- package/dist/{impl-p0AyZWFL.mjs.map → impl-DdIa0zla.mjs.map} +1 -1
- package/dist/{impl-CH40t5qf.mjs → impl-DqhZR11m.mjs} +2 -2
- package/dist/{impl-CH40t5qf.mjs.map → impl-DqhZR11m.mjs.map} +1 -1
- package/dist/{impl-BlFBTc6f.mjs → impl-Dqqb0lVN.mjs} +2 -2
- package/dist/{impl-BlFBTc6f.mjs.map → impl-Dqqb0lVN.mjs.map} +1 -1
- package/dist/{impl-CrY1za0t.mjs → impl-DryC3OJu.mjs} +2 -2
- package/dist/{impl-CrY1za0t.mjs.map → impl-DryC3OJu.mjs.map} +1 -1
- package/dist/{impl-CXdy0YMX.mjs → impl-DuZjI6p0.mjs} +2 -2
- package/dist/{impl-CXdy0YMX.mjs.map → impl-DuZjI6p0.mjs.map} +1 -1
- package/dist/{impl-CusKk_JR2.mjs → impl-Dw8NYkzw.mjs} +2 -2
- package/dist/impl-Dw8NYkzw.mjs.map +1 -0
- package/dist/impl-Dx_TfvW1.mjs +2 -0
- package/dist/impl-Dx_TfvW1.mjs.map +1 -0
- package/dist/{impl-BiBNqcob.mjs → impl-DypttZd6.mjs} +2 -2
- package/dist/{impl-BiBNqcob.mjs.map → impl-DypttZd6.mjs.map} +1 -1
- package/dist/{impl-xRwX5ZLK.mjs → impl-DzUTmaID2.mjs} +2 -2
- package/dist/impl-DzUTmaID2.mjs.map +1 -0
- package/dist/{impl-GnxjtYL7.mjs → impl-INhq_CiK.mjs} +2 -2
- package/dist/{impl-GnxjtYL7.mjs.map → impl-INhq_CiK.mjs.map} +1 -1
- package/dist/{impl-V_ffkzbd2.mjs → impl-KmCNH-yw.mjs} +2 -2
- package/dist/impl-KmCNH-yw.mjs.map +1 -0
- package/dist/{impl-Dpes0u_6.mjs → impl-RPG-BTmX.mjs} +2 -2
- package/dist/{impl-Dpes0u_6.mjs.map → impl-RPG-BTmX.mjs.map} +1 -1
- package/dist/{impl-DWBQKUuq.mjs → impl-XrTL-TDl.mjs} +2 -2
- package/dist/{impl-DWBQKUuq.mjs.map → impl-XrTL-TDl.mjs.map} +1 -1
- package/dist/impl-Z8oWVENM.mjs +2 -0
- package/dist/impl-Z8oWVENM.mjs.map +1 -0
- package/dist/impl-a_Y8bnSn.mjs +91 -0
- package/dist/impl-a_Y8bnSn.mjs.map +1 -0
- package/dist/{impl-DzJG5HaX.mjs → impl-hwpT9u5o2.mjs} +2 -2
- package/dist/impl-hwpT9u5o2.mjs.map +1 -0
- package/dist/{impl-s5h7dIlv2.mjs → impl-xq89cSSz2.mjs} +2 -2
- package/dist/{impl-s5h7dIlv2.mjs.map → impl-xq89cSSz2.mjs.map} +1 -1
- package/dist/index.d.mts +12801 -1844
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +1 -1
- package/dist/{initializeCliRuntime-B7zDhMok.mjs → initializeCliRuntime-6wI_VIHV.mjs} +1 -1
- package/dist/{initializeCliRuntime-B7zDhMok.mjs.map → initializeCliRuntime-6wI_VIHV.mjs.map} +1 -1
- package/dist/{inquirer-DNa31Mkx.mjs → inquirer-BeaBetMO.mjs} +2 -2
- package/dist/{inquirer-DNa31Mkx.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-DrxRhlZ2.mjs → listFiles-BdFUbX5x.mjs} +1 -1
- package/dist/{listFiles-DrxRhlZ2.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-DA7BRD7M.mjs → mapConsentCsvRowsToInputs-Dqb6WL4r.mjs} +1 -1
- package/dist/{mapConsentCsvRowsToInputs-DA7BRD7M.mjs.map → mapConsentCsvRowsToInputs-Dqb6WL4r.mjs.map} +1 -1
- package/dist/{markRequestDataSiloIdsCompleted-CK7PNwTz.mjs → markRequestDataSiloIdsCompleted-B5N-cQWr.mjs} +2 -2
- package/dist/{markRequestDataSiloIdsCompleted-CK7PNwTz.mjs.map → markRequestDataSiloIdsCompleted-B5N-cQWr.mjs.map} +1 -1
- package/dist/{markSilentPrivacyRequests-Cb-J9ckA.mjs → markSilentPrivacyRequests-BiaButWF.mjs} +2 -2
- package/dist/{markSilentPrivacyRequests-Cb-J9ckA.mjs.map → markSilentPrivacyRequests-BiaButWF.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-Cb0g74Ft.mjs +2 -0
- package/dist/module-graph-Cb0g74Ft.mjs.map +1 -0
- package/dist/{notifyPrivacyRequestsAdditionalTime-it1FA62W.mjs → notifyPrivacyRequestsAdditionalTime-D3Vtvg5G.mjs} +2 -2
- package/dist/{notifyPrivacyRequestsAdditionalTime-it1FA62W.mjs.map → notifyPrivacyRequestsAdditionalTime-D3Vtvg5G.mjs.map} +1 -1
- package/dist/{parquetToCsvOneFile-Dtz90qfJ.mjs → parquetToCsvOneFile-ChmPC6dL.mjs} +2 -2
- package/dist/{parquetToCsvOneFile-Dtz90qfJ.mjs.map → parquetToCsvOneFile-ChmPC6dL.mjs.map} +1 -1
- package/dist/{parseAttributesFromString-BxJcnKmn.mjs → parseAttributesFromString-CO16oAlx.mjs} +2 -2
- package/dist/{parseAttributesFromString-BxJcnKmn.mjs.map → parseAttributesFromString-CO16oAlx.mjs.map} +1 -1
- package/dist/parseVariablesFromString-BOSfQ4QF.mjs +2 -0
- package/dist/parseVariablesFromString-BOSfQ4QF.mjs.map +1 -0
- 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/{policyEngineCliError-BnBghLd1.mjs → policyEngineCliError-DY8V-qkK.mjs} +1 -1
- package/dist/{policyEngineCliError-BnBghLd1.mjs.map → policyEngineCliError-DY8V-qkK.mjs.map} +1 -1
- package/dist/{printResult-oXnpZu_9.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-XqreMBT5.mjs → pullAllDatapoints-uk5ggk6O.mjs} +2 -2
- package/dist/{pullAllDatapoints-XqreMBT5.mjs.map → pullAllDatapoints-uk5ggk6O.mjs.map} +1 -1
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-DuPDOm6f.mjs → pullChunkedCustomSiloOutstandingIdentifiers-D85P1W_8.mjs} +2 -2
- package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-DuPDOm6f.mjs.map → pullChunkedCustomSiloOutstandingIdentifiers-D85P1W_8.mjs.map} +1 -1
- package/dist/{pullConsentManagerMetrics-Dk5IejaY.mjs → pullConsentManagerMetrics-Dv5n1ZGp.mjs} +2 -2
- package/dist/{pullConsentManagerMetrics-Dk5IejaY.mjs.map → pullConsentManagerMetrics-Dv5n1ZGp.mjs.map} +1 -1
- package/dist/{pullManualEnrichmentIdentifiersToCsv-CAD1navz.mjs → pullManualEnrichmentIdentifiersToCsv-DbNSrKEk.mjs} +2 -2
- package/dist/{pullManualEnrichmentIdentifiersToCsv-CAD1navz.mjs.map → pullManualEnrichmentIdentifiersToCsv-DbNSrKEk.mjs.map} +1 -1
- package/dist/{pullTranscendConfiguration-NcFjHE8k.mjs → pullTranscendConfiguration-B63M3ild.mjs} +3 -3
- package/dist/{pullTranscendConfiguration-NcFjHE8k.mjs.map → pullTranscendConfiguration-B63M3ild.mjs.map} +1 -1
- package/dist/{pullUnstructuredSubDataPointRecommendations-Cf4irXl4.mjs → pullUnstructuredSubDataPointRecommendations-YTBzfkRZ.mjs} +2 -2
- package/dist/{pullUnstructuredSubDataPointRecommendations-Cf4irXl4.mjs.map → pullUnstructuredSubDataPointRecommendations-YTBzfkRZ.mjs.map} +1 -1
- package/dist/{pushCronIdentifiersFromCsv-BGaJycWo.mjs → pushCronIdentifiersFromCsv-5ruUKHtL.mjs} +2 -2
- package/dist/{pushCronIdentifiersFromCsv-BGaJycWo.mjs.map → pushCronIdentifiersFromCsv-5ruUKHtL.mjs.map} +1 -1
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-B9okRkhL.mjs → pushManualEnrichmentIdentifiersFromCsv-B0i2239u.mjs} +2 -2
- package/dist/{pushManualEnrichmentIdentifiersFromCsv-B9okRkhL.mjs.map → pushManualEnrichmentIdentifiersFromCsv-B0i2239u.mjs.map} +1 -1
- package/dist/{readCsv-CmRYYFJc.mjs → readCsv-DLg8pwjd.mjs} +1 -1
- package/dist/{readCsv-CmRYYFJc.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-DJhxiy_D.mjs → removeUnverifiedRequestIdentifiers-QmeqrmxM.mjs} +2 -2
- package/dist/{removeUnverifiedRequestIdentifiers-DJhxiy_D.mjs.map → removeUnverifiedRequestIdentifiers-QmeqrmxM.mjs.map} +1 -1
- package/dist/{renderTable-DKXvortp.mjs → renderTable-D68QasPc.mjs} +1 -1
- package/dist/{renderTable-DKXvortp.mjs.map → renderTable-D68QasPc.mjs.map} +1 -1
- package/dist/{request-CCCU2SdV.mjs → request-BiPv6jmP.mjs} +1 -1
- package/dist/{request-CCCU2SdV.mjs.map → request-BiPv6jmP.mjs.map} +1 -1
- package/dist/{resolveBundleIdByName-By5Vl8Iz.mjs → resolveBundleIdByName-qXZBrUz_.mjs} +2 -2
- package/dist/{resolveBundleIdByName-By5Vl8Iz.mjs.map → resolveBundleIdByName-qXZBrUz_.mjs.map} +1 -1
- package/dist/{resolvePolicyBundleVersion-DO7IvEwb.mjs → resolvePolicyBundleVersion-BG7XqBBP.mjs} +2 -2
- package/dist/{resolvePolicyBundleVersion-DO7IvEwb.mjs.map → resolvePolicyBundleVersion-BG7XqBBP.mjs.map} +1 -1
- package/dist/{retryRequestDataSilos-6JfyZclD.mjs → retryRequestDataSilos-BfckLjOJ.mjs} +2 -2
- package/dist/{retryRequestDataSilos-6JfyZclD.mjs.map → retryRequestDataSilos-BfckLjOJ.mjs.map} +1 -1
- package/dist/run-captured-process-BXwWXuTh.mjs +2 -0
- package/dist/run-captured-process-BXwWXuTh.mjs.map +1 -0
- 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-xpbtJ3dK.mjs → skipPreflightJobs-Do_kwu3m.mjs} +2 -2
- package/dist/{skipPreflightJobs-xpbtJ3dK.mjs.map → skipPreflightJobs-Do_kwu3m.mjs.map} +1 -1
- package/dist/{skipRequestDataSilos-B7RA6I3Z.mjs → skipRequestDataSilos-BNDhdllD.mjs} +2 -2
- package/dist/{skipRequestDataSilos-B7RA6I3Z.mjs.map → skipRequestDataSilos-BNDhdllD.mjs.map} +1 -1
- package/dist/{streamPrivacyRequestsToCsv-DT31SP6w.mjs → streamPrivacyRequestsToCsv-CbJfhV6A.mjs} +2 -2
- package/dist/{streamPrivacyRequestsToCsv-DT31SP6w.mjs.map → streamPrivacyRequestsToCsv-CbJfhV6A.mjs.map} +1 -1
- package/dist/{syncCodePackages-ozt9aBXf.mjs → syncCodePackages-BHE2Tn1Q.mjs} +2 -2
- package/dist/{syncCodePackages-ozt9aBXf.mjs.map → syncCodePackages-BHE2Tn1Q.mjs.map} +1 -1
- package/dist/{updateConsentManagerVersionToLatest-CCzWEBEj.mjs → updateConsentManagerVersionToLatest-DEFwH4Se.mjs} +2 -2
- package/dist/{updateConsentManagerVersionToLatest-CCzWEBEj.mjs.map → updateConsentManagerVersionToLatest-DEFwH4Se.mjs.map} +1 -1
- package/dist/{uploadConsents-CDqFNWX_.mjs → uploadConsents-ChmFIw_j.mjs} +2 -2
- package/dist/{uploadConsents-CDqFNWX_.mjs.map → uploadConsents-ChmFIw_j.mjs.map} +1 -1
- package/dist/{uploadPrivacyRequestsFromCsv-CVpBFaYB.mjs → uploadPrivacyRequestsFromCsv-D3KSb1qH.mjs} +2 -2
- package/dist/{uploadPrivacyRequestsFromCsv-CVpBFaYB.mjs.map → uploadPrivacyRequestsFromCsv-D3KSb1qH.mjs.map} +1 -1
- package/dist/{validateTranscendAuth-3guZJPKH.mjs → validateTranscendAuth-D6Wr1cxY.mjs} +2 -2
- package/dist/{validateTranscendAuth-3guZJPKH.mjs.map → validateTranscendAuth-D6Wr1cxY.mjs.map} +1 -1
- package/dist/{writeCsv-rhlEBjYp.mjs → writeCsv-D-2siSwE.mjs} +1 -1
- package/dist/{writeCsv-rhlEBjYp.mjs.map → writeCsv-D-2siSwE.mjs.map} +1 -1
- package/package.json +10 -4
- package/dist/app-dIu3pdTM.mjs +0 -148
- package/dist/app-dIu3pdTM.mjs.map +0 -1
- package/dist/codecs-zRkskjaJ.mjs +0 -2
- package/dist/codecs-zRkskjaJ.mjs.map +0 -1
- package/dist/constants-FbK2iR--.mjs +0 -2
- package/dist/constants-FbK2iR--.mjs.map +0 -1
- package/dist/impl-3IyENr9T.mjs.map +0 -1
- package/dist/impl-4rLX5Wah2.mjs.map +0 -1
- package/dist/impl-BPjGRqOL2.mjs +0 -3
- package/dist/impl-BPjGRqOL2.mjs.map +0 -1
- package/dist/impl-BQTw6jpw.mjs.map +0 -1
- package/dist/impl-BbWzTCSd2.mjs.map +0 -1
- package/dist/impl-BkyqCY72.mjs.map +0 -1
- package/dist/impl-BqiclSRZ.mjs +0 -2
- package/dist/impl-BqiclSRZ.mjs.map +0 -1
- package/dist/impl-CZ-KvZE02.mjs.map +0 -1
- package/dist/impl-CbijbA-M2.mjs.map +0 -1
- package/dist/impl-CclEOdC32.mjs +0 -2
- package/dist/impl-CclEOdC32.mjs.map +0 -1
- package/dist/impl-Cq5wI-kP.mjs.map +0 -1
- package/dist/impl-CusKk_JR2.mjs.map +0 -1
- package/dist/impl-DG9RwTkA2.mjs.map +0 -1
- package/dist/impl-DQG3PiAW2.mjs.map +0 -1
- package/dist/impl-DbF7uw7f2.mjs.map +0 -1
- package/dist/impl-DbPLuDc22.mjs.map +0 -1
- package/dist/impl-DzJG5HaX.mjs.map +0 -1
- package/dist/impl-GYM4LDKp2.mjs +0 -2
- package/dist/impl-GYM4LDKp2.mjs.map +0 -1
- package/dist/impl-V_ffkzbd2.mjs.map +0 -1
- package/dist/impl-_rrZ0KXo.mjs +0 -3
- package/dist/impl-_rrZ0KXo.mjs.map +0 -1
- package/dist/impl-xRwX5ZLK.mjs.map +0 -1
- package/dist/logger-CB_h_zbj.mjs +0 -2
- package/dist/logger-CB_h_zbj.mjs.map +0 -1
- package/dist/mergeTranscendInputs-CkpitZbH.mjs +0 -3
- package/dist/mergeTranscendInputs-CkpitZbH.mjs.map +0 -1
- package/dist/parseVariablesFromString-cu5gPC3M.mjs +0 -2
- package/dist/parseVariablesFromString-cu5gPC3M.mjs.map +0 -1
- package/dist/printResult-oXnpZu_9.mjs.map +0 -1
- package/dist/readTranscendYaml-DtJz9mor.mjs +0 -4
- package/dist/readTranscendYaml-DtJz9mor.mjs.map +0 -1
- package/dist/runOpa-Q2r3qPsi.mjs +0 -2
- package/dist/runOpa-Q2r3qPsi.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -40,6 +40,10 @@ A command line interface that allows you to programatically interact with the Tr
|
|
|
40
40
|
- [`transcend consent upload-data-flows-from-csv`](#transcend-consent-upload-data-flows-from-csv)
|
|
41
41
|
- [`transcend consent upload-preferences`](#transcend-consent-upload-preferences)
|
|
42
42
|
- [`transcend consent delete-preference-records`](#transcend-consent-delete-preference-records)
|
|
43
|
+
- [`transcend custom-functions init`](#transcend-custom-functions-init)
|
|
44
|
+
- [`transcend custom-functions new`](#transcend-custom-functions-new)
|
|
45
|
+
- [`transcend custom-functions check`](#transcend-custom-functions-check)
|
|
46
|
+
- [`transcend custom-functions run`](#transcend-custom-functions-run)
|
|
43
47
|
- [`transcend custom-functions push`](#transcend-custom-functions-push)
|
|
44
48
|
- [`transcend custom-functions list`](#transcend-custom-functions-list)
|
|
45
49
|
- [`transcend inventory pull`](#transcend-inventory-pull)
|
|
@@ -61,6 +65,7 @@ A command line interface that allows you to programatically interact with the Tr
|
|
|
61
65
|
- [`transcend policy deactivate`](#transcend-policy-deactivate)
|
|
62
66
|
- [`transcend policy download`](#transcend-policy-download)
|
|
63
67
|
- [`transcend policy eval`](#transcend-policy-eval)
|
|
68
|
+
- [`transcend policy init`](#transcend-policy-init)
|
|
64
69
|
- [`transcend policy lint`](#transcend-policy-lint)
|
|
65
70
|
- [`transcend policy bundles`](#transcend-policy-bundles)
|
|
66
71
|
- [`transcend policy publish`](#transcend-policy-publish)
|
|
@@ -127,13 +132,13 @@ api-keys:
|
|
|
127
132
|
|
|
128
133
|
# Manage at: https://app.transcend.io/privacy-requests/identifiers
|
|
129
134
|
# See https://docs.transcend.io/docs/identity-enrichment
|
|
130
|
-
# Define
|
|
135
|
+
# Define preflight check webhooks that will be executed
|
|
131
136
|
# prior to privacy request workflows. Some examples may include:
|
|
132
137
|
# - identity enrichment: look up additional identifiers for that user.
|
|
133
138
|
# i.e. map an email address to a user ID
|
|
134
139
|
# - fraud check: auto-cancel requests if the user is flagged for fraudulent behavior
|
|
135
140
|
# - customer check: auto-cancel request for some custom business criteria
|
|
136
|
-
|
|
141
|
+
preflights:
|
|
137
142
|
- title: Basic Identity Enrichment
|
|
138
143
|
description: Enrich an email address to the userId and phone number
|
|
139
144
|
url: https://example.acme.com/transcend-enrichment-webhook
|
|
@@ -2479,6 +2484,167 @@ transcend consent delete-preference-records \
|
|
|
2479
2484
|
--timestamp=2025-08-26T00:00:00.000Z
|
|
2480
2485
|
```
|
|
2481
2486
|
|
|
2487
|
+
### `transcend custom-functions init`
|
|
2488
|
+
|
|
2489
|
+
```txt
|
|
2490
|
+
USAGE
|
|
2491
|
+
transcend custom-functions init [--manifest value] [--deno] [--editor] [--skill] [--ci] [--noInteractive] [--dryRun] [--yes] [--json] [<directory>]
|
|
2492
|
+
transcend custom-functions init --help
|
|
2493
|
+
|
|
2494
|
+
Discovers the surrounding repository, previews one safe transactional plan, and creates only the selected local authoring setup. No Transcend credentials are needed.
|
|
2495
|
+
|
|
2496
|
+
FLAGS
|
|
2497
|
+
[--manifest] Path to transcend-functions.yml; defaults inside the target directory
|
|
2498
|
+
[--deno/--noDeno] Create or merge target-scoped Deno configuration and check task
|
|
2499
|
+
[--editor/--noEditor] Merge target-scoped Deno editor settings and recommendations
|
|
2500
|
+
[--skill/--noSkill] Install the canonical Custom Function coding-agent skill
|
|
2501
|
+
[--ci/--noCi] Generate credential-free GitHub Actions checks
|
|
2502
|
+
[--noInteractive] Disable prompts and require every missing answer as a flag [default = false]
|
|
2503
|
+
[--dryRun] Preview all changes without writing files [default = false]
|
|
2504
|
+
[--yes] Skip only the final plan confirmation [default = false]
|
|
2505
|
+
[--json] Emit a stable JSON result and imply non-interactive output [default = false]
|
|
2506
|
+
-h --help Print help information and exit
|
|
2507
|
+
|
|
2508
|
+
ARGUMENTS
|
|
2509
|
+
[directory] Custom Function project directory [default = transcend/custom-functions]
|
|
2510
|
+
```
|
|
2511
|
+
|
|
2512
|
+
#### Start with the isolated default layout
|
|
2513
|
+
|
|
2514
|
+
```sh
|
|
2515
|
+
transcend custom-functions init
|
|
2516
|
+
```
|
|
2517
|
+
|
|
2518
|
+
This creates the manifest under `transcend/custom-functions`, leaving room for files such as `transcend/transcend.yml`. Selected setup options can add Deno configuration and repository integrations; use `transcend custom-functions new` to create functions and fixtures. Pass a directory explicitly to use another layout.
|
|
2519
|
+
|
|
2520
|
+
To give an agent the same Custom Function guidance before initialization, install the standalone skill directly from this repository:
|
|
2521
|
+
|
|
2522
|
+
```sh
|
|
2523
|
+
npx skills add transcend-io/tools --skill transcend-custom-functions
|
|
2524
|
+
```
|
|
2525
|
+
|
|
2526
|
+
The interactive checklist selects Deno configuration, VS Code settings, the Agent Skill, and GitHub Actions by default, followed by one complete filesystem preview. When Deno setup is selected, `init` warns if local Deno is missing or is not 2.x; it never installs runtimes automatically. One existing skill directory receives a managed file directly. With multiple existing directories, `.agents/skills` holds the canonical copy and only directories whose agents cannot read that portable location receive links. Home-directory agent configuration is ignored.
|
|
2527
|
+
|
|
2528
|
+
#### Add support to an existing repository
|
|
2529
|
+
|
|
2530
|
+
```sh
|
|
2531
|
+
transcend custom-functions init ./packages/transcend-functions \
|
|
2532
|
+
--deno \
|
|
2533
|
+
--editor \
|
|
2534
|
+
--skill \
|
|
2535
|
+
--ci \
|
|
2536
|
+
--noInteractive \
|
|
2537
|
+
--yes
|
|
2538
|
+
```
|
|
2539
|
+
|
|
2540
|
+
Non-interactive setup enables only the individual flags passed; use the example above for the full setup selected by default in the interactive checklist. Existing JSONC and YAML comments are retained. A collision or unsafe merge stops before any file is written. Existing generated GitHub Actions workflows with repository-specific edits are left unchanged. Use `--dryRun` to review the same transactional plan without applying it. After a successful setup, the CLI prints a compact AI handoff for reviewing the generated files and adapting validation to the repository's CI.
|
|
2541
|
+
|
|
2542
|
+
### `transcend custom-functions new`
|
|
2543
|
+
|
|
2544
|
+
```txt
|
|
2545
|
+
USAGE
|
|
2546
|
+
transcend custom-functions new [--manifest value] [--name value] [--template general|dsr-datapoint|dsr-enricher|dsr-both] [--noInteractive] [--dryRun] [--yes] [--json] [<directory>]
|
|
2547
|
+
transcend custom-functions new --help
|
|
2548
|
+
|
|
2549
|
+
Adds a deterministic starter for one of two Custom Function types: General functions triggered by Rules Automation, or DSR functions triggered by a Workflow step and supporting data point resolvers, preflight checks, or both.
|
|
2550
|
+
|
|
2551
|
+
FLAGS
|
|
2552
|
+
[--manifest] Path to an existing transcend-functions.yml
|
|
2553
|
+
[--name] Customer-visible Custom Function display name
|
|
2554
|
+
[--template] Function type and generated handler shape [general|dsr-datapoint|dsr-enricher|dsr-both]
|
|
2555
|
+
[--noInteractive] Disable prompts and require every missing answer as a flag [default = false]
|
|
2556
|
+
[--dryRun] Preview all changes without writing files [default = false]
|
|
2557
|
+
[--yes] Skip only the final plan confirmation [default = false]
|
|
2558
|
+
[--json] Emit a stable JSON result and imply non-interactive output [default = false]
|
|
2559
|
+
-h --help Print help information and exit
|
|
2560
|
+
|
|
2561
|
+
ARGUMENTS
|
|
2562
|
+
[directory] Custom Function project directory [default = transcend/custom-functions]
|
|
2563
|
+
```
|
|
2564
|
+
|
|
2565
|
+
#### Scaffold without prompts
|
|
2566
|
+
|
|
2567
|
+
```sh
|
|
2568
|
+
transcend custom-functions new ./transcend/custom-functions \
|
|
2569
|
+
--name="Customer CRM access" \
|
|
2570
|
+
--template=dsr-both \
|
|
2571
|
+
--noInteractive \
|
|
2572
|
+
--yes
|
|
2573
|
+
```
|
|
2574
|
+
|
|
2575
|
+
Run `transcend custom-functions init` once before adding functions. The interactive flow first asks for the Custom Function type: General functions are triggered by Rules Automation, while DSR functions are triggered by a step in a Workflow. General currently has one template, so selecting it continues immediately. Selecting DSR opens a second prompt: choose `dsr-datapoint` for a data point resolver, `dsr-enricher` for a preflight check, or `dsr-both` to support both. The `dsr-enricher` flag retains the API's technical export name, but the user-facing workflow is called preflight. Without a directory argument, `new` uses the initialized project at `transcend/custom-functions`. If that manifest is missing, it reports any other project manifest it discovers as an explicit suggestion.
|
|
2576
|
+
|
|
2577
|
+
Generated code contains only the selected handler exports and focused TODOs. Customer-specific API and mapping choices remain for the developer or the installed `transcend-custom-functions` skill. The final output includes a short, copyable AI handoff naming the generated source and validation command.
|
|
2578
|
+
|
|
2579
|
+
### `transcend custom-functions check`
|
|
2580
|
+
|
|
2581
|
+
```txt
|
|
2582
|
+
USAGE
|
|
2583
|
+
transcend custom-functions check [--manifest value] [--variables value] [--fix] [--noInteractive] [--json] [<directory>]
|
|
2584
|
+
transcend custom-functions check --help
|
|
2585
|
+
|
|
2586
|
+
Checks manifest semantics and published payload schemas, then uses Deno 2 without executing user modules to inspect exports, type-check, lint, and verify formatting.
|
|
2587
|
+
|
|
2588
|
+
FLAGS
|
|
2589
|
+
[--manifest] Path to transcend-functions.yml; defaults inside the target directory
|
|
2590
|
+
[--variables] Comma-separated variables to template into the manifest [default = ""]
|
|
2591
|
+
[--fix] Apply Deno formatting to manifest-referenced files [default = false]
|
|
2592
|
+
[--noInteractive] Disable the optional formatting confirmation [default = false]
|
|
2593
|
+
[--json] Emit a stable JSON result and imply non-interactive behavior [default = false]
|
|
2594
|
+
-h --help Print help information and exit
|
|
2595
|
+
|
|
2596
|
+
ARGUMENTS
|
|
2597
|
+
[directory] Custom Function project directory [default = transcend/custom-functions]
|
|
2598
|
+
```
|
|
2599
|
+
|
|
2600
|
+
#### Validate before pushing
|
|
2601
|
+
|
|
2602
|
+
```sh
|
|
2603
|
+
transcend custom-functions check \
|
|
2604
|
+
--variables=TRANSCEND_API_KEY:placeholder
|
|
2605
|
+
```
|
|
2606
|
+
|
|
2607
|
+
`check` defaults to `transcend/custom-functions` and needs no API key. If that manifest is missing, it reports any project manifest it discovers as an explicit suggestion. Every `<<parameters.name>>` placeholder must be provided through `--variables=name:value`; non-secret placeholder values are sufficient for validation. It validates every test fixture against the published authoring schemas, rejects local runtime imports that cannot be deployed, then asks Deno 2 to inspect exports, type-check, lint, and check formatting without executing the modules. A different Deno 2 version produces a non-blocking production-parity warning; other major versions fail with installation or version-switch guidance.
|
|
2608
|
+
|
|
2609
|
+
In CI, use `--noInteractive --json`. JSON diagnostics stay concise instead of embedding full format patches. Formatting differences fail unless `--fix` is explicitly passed; an interactive terminal may preview and confirm the same repair.
|
|
2610
|
+
|
|
2611
|
+
### `transcend custom-functions run`
|
|
2612
|
+
|
|
2613
|
+
```txt
|
|
2614
|
+
USAGE
|
|
2615
|
+
transcend custom-functions run [--manifest value] [--function value] [--variables value] [--noInteractive] [--allowNetwork] [<directory>]
|
|
2616
|
+
transcend custom-functions run --help
|
|
2617
|
+
|
|
2618
|
+
Executes one self-contained manifest function against its configured test payloads with production-like payload preparation, restricted Deno permissions, an in-memory KV store, and a simulated sdk.fetch implementation. No credentials are required. Native fetch is disabled unless --allowNetwork is passed; module imports follow allow-third-party-imports.
|
|
2619
|
+
|
|
2620
|
+
FLAGS
|
|
2621
|
+
[--manifest] Path to transcend-functions.yml; defaults inside the target directory
|
|
2622
|
+
[--function] Exact Custom Function name or ID; prompts when omitted
|
|
2623
|
+
[--variables] Comma-separated manifest variables such as API_KEY:value [default = ""]
|
|
2624
|
+
[--noInteractive] Disable function selection prompts [default = false]
|
|
2625
|
+
[--allowNetwork] Permit real native fetch calls to manifest allowed-hosts [default = false]
|
|
2626
|
+
-h --help Print help information and exit
|
|
2627
|
+
|
|
2628
|
+
ARGUMENTS
|
|
2629
|
+
[directory] Custom Function project directory [default = transcend/custom-functions]
|
|
2630
|
+
```
|
|
2631
|
+
|
|
2632
|
+
#### Run locally
|
|
2633
|
+
|
|
2634
|
+
```sh
|
|
2635
|
+
transcend custom-functions run ./transcend/custom-functions \
|
|
2636
|
+
--function="Customer CRM access" \
|
|
2637
|
+
--variables=TRANSCEND_API_KEY:placeholder
|
|
2638
|
+
```
|
|
2639
|
+
|
|
2640
|
+
The command runs every test payload configured for the selected function and prints its stdout and stderr, including `console.log` output. When `--function` is omitted, a single manifest entry is selected automatically; an interactive terminal prompts when the manifest contains several functions.
|
|
2641
|
+
|
|
2642
|
+
This is a credential-free development simulator, not an exact Sombra runtime. Custom Functions must be self-contained because only the entry source file is deployed; local runtime imports are rejected. The simulator mirrors production export selection, payload defaults, environment isolation, network permissions, timeout behavior, and KV limits. Each payload receives a fresh in-memory KV store. Calls to `sdk.fetch` are logged and return a simulated HTTP 200 without sending a request.
|
|
2643
|
+
|
|
2644
|
+
Native `fetch` is denied by default. Pass `--allowNetwork` to permit real requests only to the manifest's `allowed-hosts`; like Sombra, an empty list then permits localhost. Real requests can have side effects.
|
|
2645
|
+
|
|
2646
|
+
Every `<<parameters.name>>` placeholder used by the selected function must be provided through `--variables=name:value`. Colons are preserved in values; escape a literal comma as `\,` inside a quoted flag value. Configured environment values are redacted from captured output. Before deployment, run `transcend custom-functions check` and use the authenticated `push` test run for production-runtime validation.
|
|
2647
|
+
|
|
2482
2648
|
### `transcend custom-functions push`
|
|
2483
2649
|
|
|
2484
2650
|
```txt
|
|
@@ -2510,7 +2676,7 @@ FLAGS
|
|
|
2510
2676
|
[--sombraAuth] The Sombra internal key, use for additional authentication when self-hosting Sombra
|
|
2511
2677
|
[--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. Defaults to the TRANSCEND_API_URL environment variable when set, so --transcendUrl may be omitted if it is exported. [default = https://api.transcend.io]
|
|
2512
2678
|
[--file] Path to the custom functions manifest YAML file [default = ./transcend-functions.yml]
|
|
2513
|
-
[--variables]
|
|
2679
|
+
[--variables] Variables to template into the manifest file (e.g. secret env values). Comma-separated list of key:value pairs. [default = ""]
|
|
2514
2680
|
[--dryRun] When true, report what would change without pushing anything [default = false]
|
|
2515
2681
|
[--promote/--noPromote] When true, promote new revisions to active. Set to false to leave new revisions as drafts for review in the dashboard. [default = true]
|
|
2516
2682
|
[--force] Push a new revision even when no changes are detected. Useful when only environment variable values changed, which cannot be diffed. [default = false]
|
|
@@ -2535,7 +2701,7 @@ functions:
|
|
|
2535
2701
|
- api.example.com
|
|
2536
2702
|
timeout-ms: 30000
|
|
2537
2703
|
env:
|
|
2538
|
-
CRM_API_KEY: <<parameters.
|
|
2704
|
+
CRM_API_KEY: <<parameters.CRM_API_KEY>>
|
|
2539
2705
|
- name: DSR Lookup
|
|
2540
2706
|
code: ./functions/dsr-lookup.ts
|
|
2541
2707
|
type: DSR
|
|
@@ -2548,22 +2714,26 @@ functions:
|
|
|
2548
2714
|
payload-type: REQUEST_ENRICHER
|
|
2549
2715
|
```
|
|
2550
2716
|
|
|
2551
|
-
| Field | Required | Description
|
|
2552
|
-
| --------------------------- | -------- |
|
|
2553
|
-
| `name` | Yes | Display name of the function. Used as the sync key when no `id` is set — renaming an id-less entry creates a new function.
|
|
2554
|
-
| `code` | Yes | Path to the TypeScript source file
|
|
2555
|
-
| `id` | No | Custom function ID. When set, it becomes the sync key (allowing renames and disambiguating non-unique names). Find IDs via `transcend custom-functions list`, or let `--updateManifest` fill them in after a push.
|
|
2556
|
-
| `description` | No | Description shown in the Transcend dashboard.
|
|
2557
|
-
| `type` | No | `GENERAL` (default) or `DSR`.
|
|
2558
|
-
| `data-silo-id` | DSR only | The data silo (DSR integration) the DSR function is attached to. When omitted for a **new** DSR function, the integration is created automatically (see below) and `--updateManifest` writes the assigned ID back.
|
|
2559
|
-
| `sombra-id` | No | The Sombra gateway the function belongs to. Each function's code is signed against its own gateway; when omitted, the existing function's gateway (or `--sombraId`, or the primary Sombra) is used. An entry cannot move an existing function to a different gateway.
|
|
2560
|
-
| `sombra-auth-env` | No | Name of the environment variable holding the internal key of the function's Sombra gateway (e.g. `SOMBRA_EU_INTERNAL_KEY`). The key itself never lives in the manifest — it is read from the environment at push time. Overrides `--sombraAuth` for this entry.
|
|
2561
|
-
| `test-payloads` | No | List of test payloads to run the function with before pushing. Each item has a `payload`
|
|
2562
|
-
| `test-payload` | No | Shorthand for a single-item `test-payloads` list
|
|
2563
|
-
| `allowed-hosts` | No | Hosts the function may make network requests to.
|
|
2564
|
-
| `timeout-ms` | No | Execution timeout in milliseconds.
|
|
2565
|
-
| `allow-third-party-imports` | No | Whether the function may import third party modules.
|
|
2566
|
-
| `env` | No | Environment variables exposed to the function. Use
|
|
2717
|
+
| Field | Required | Description |
|
|
2718
|
+
| --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
2719
|
+
| `name` | Yes | Display name of the function. Used as the sync key when no `id` is set — renaming an id-less entry creates a new function. |
|
|
2720
|
+
| `code` | Yes | Path to the TypeScript source file. The path is resolved relative to the manifest and must remain within its directory. |
|
|
2721
|
+
| `id` | No | Custom function ID. When set, it becomes the sync key (allowing renames and disambiguating non-unique names). Find IDs via `transcend custom-functions list`, or let `--updateManifest` fill them in after a push. |
|
|
2722
|
+
| `description` | No | Description shown in the Transcend dashboard. |
|
|
2723
|
+
| `type` | No | `GENERAL` (default) or `DSR`. |
|
|
2724
|
+
| `data-silo-id` | DSR only | The data silo (DSR integration) the DSR function is attached to. When omitted for a **new** DSR function, the integration is created automatically (see below) and `--updateManifest` writes the assigned ID back. |
|
|
2725
|
+
| `sombra-id` | No | The Sombra gateway the function belongs to. Each function's code is signed against its own gateway; when omitted, the existing function's gateway (or `--sombraId`, or the primary Sombra) is used. An entry cannot move an existing function to a different gateway. |
|
|
2726
|
+
| `sombra-auth-env` | No | Name of the environment variable holding the internal key of the function's Sombra gateway (e.g. `SOMBRA_EU_INTERNAL_KEY`). The key itself never lives in the manifest — it is read from the environment at push time. Overrides `--sombraAuth` for this entry. |
|
|
2727
|
+
| `test-payloads` | No | List of test payloads to run the function with before pushing. Each item has a `payload` path, resolved relative to the manifest and contained within its directory, plus an optional `payload-type`. Every payload runs and all must pass, or the push is rejected. DSR functions should list one payload per export they implement: `DATA_POINT` (default) invokes the default export, `REQUEST_ENRICHER` invokes the `enricher` export. |
|
|
2728
|
+
| `test-payload` | No | Shorthand for a single-item `test-payloads` list. The JSON path is resolved relative to the manifest and must remain within its directory. Pair with `test-payload-type` for DSR functions. Mutually exclusive with `test-payloads`. |
|
|
2729
|
+
| `allowed-hosts` | No | Hosts the function may make network requests to. |
|
|
2730
|
+
| `timeout-ms` | No | Execution timeout in milliseconds. |
|
|
2731
|
+
| `allow-third-party-imports` | No | Whether the function may import third party modules. |
|
|
2732
|
+
| `env` | No | Environment variables exposed to the function. Use manifest variables to avoid committing secrets. |
|
|
2733
|
+
|
|
2734
|
+
#### Manifest variables
|
|
2735
|
+
|
|
2736
|
+
Use `<<parameters.ENV_NAME>>` placeholders and supply their values with `--variables=ENV_NAME:value`. Match each placeholder name to its environment key to keep the mapping clear. Values may contain colons. Escape a literal comma as `\,` inside a quoted `--variables` value.
|
|
2567
2737
|
|
|
2568
2738
|
Note: environment variable values are encrypted by Sombra and cannot be diffed. When only an env value changes, use `--force` to push a new revision.
|
|
2569
2739
|
|
|
@@ -2636,7 +2806,7 @@ transcend custom-functions push --auth="$TRANSCEND_API_KEY" --dryRun
|
|
|
2636
2806
|
transcend custom-functions push \
|
|
2637
2807
|
--auth="$TRANSCEND_API_KEY" \
|
|
2638
2808
|
--file=./transcend/functions.yml \
|
|
2639
|
-
--variables=
|
|
2809
|
+
--variables=CRM_API_KEY:example-secret-value
|
|
2640
2810
|
```
|
|
2641
2811
|
|
|
2642
2812
|
**Push new revisions as drafts for review instead of promoting them**
|
|
@@ -2732,7 +2902,7 @@ The API key permissions for this command vary based on the `resources` argument:
|
|
|
2732
2902
|
| `customFields` | `attributes` | Custom Field definitions that define extra metadata for each table in the Admin Dashboard. | View Global Attributes | [Custom Fields](https://app.transcend.io/infrastructure/attributes) |
|
|
2733
2903
|
| `templates` | `templates` | Email templates. Only template titles can be created and mapped to other resources. | View Email Templates | [DSR Automation -> Email Settings -> Templates](https://app.transcend.io/privacy-requests/email-settings/templates) |
|
|
2734
2904
|
| `dataSilos` | `data-silos` | The Data System (formerly "Data Silo") definitions. | View Data Map, View Data Subject Request Settings, View API Keys | [Data Inventory -> Data Systems](https://app.transcend.io/data-map/data-inventory/data-silos)<br>[Infrastructure -> Integrations](https://app.transcend.io/infrastructure/integrations) |
|
|
2735
|
-
| `enrichers` | `
|
|
2905
|
+
| `enrichers` | `preflights` | The Privacy Request preflight check configurations (formerly "enrichers"). | View Identity Verification Settings | [DSR Automation -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
|
|
2736
2906
|
| `dataFlows` | `data-flows` | Consent Manager Data Flow definitions. | View Data Flows | [Consent Management -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
|
|
2737
2907
|
| `businessEntities` | `business-entities` | The business entities in the Data Inventory. | View Data Inventory | [Data Inventory -> Business Entities](https://app.transcend.io/data-map/data-inventory/business-entities) |
|
|
2738
2908
|
| `processingActivities` | `processing-activities` | The processing activities in the Data Inventory. | View Data Inventory | [Data Inventory -> Processing Activities](https://app.transcend.io/data-map/data-inventory/processing-activities) |
|
|
@@ -2836,7 +3006,7 @@ transcend inventory pull --auth="$TRANSCEND_API_KEY" --resources=businessEntitie
|
|
|
2836
3006
|
transcend inventory pull --auth="$TRANSCEND_API_KEY" --resources=processingActivities
|
|
2837
3007
|
```
|
|
2838
3008
|
|
|
2839
|
-
**Pull
|
|
3009
|
+
**Pull preflight checks and identifiers (see [this example](./examples/preflights.yml))**
|
|
2840
3010
|
|
|
2841
3011
|
```sh
|
|
2842
3012
|
transcend inventory pull --auth="$TRANSCEND_API_KEY" --resources=enrichers,identifiers
|
|
@@ -2924,7 +3094,7 @@ FLAGS
|
|
|
2924
3094
|
[--file] Path to the YAML file to push from [default = ./transcend.yml]
|
|
2925
3095
|
[--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. Defaults to the TRANSCEND_API_URL environment variable when set, so --transcendUrl may be omitted if it is exported. [default = https://api.transcend.io]
|
|
2926
3096
|
[--pageSize] The page size to use when paginating over the API [default = 50]
|
|
2927
|
-
[--variables]
|
|
3097
|
+
[--variables] Variables to template into the YAML file when pushing configuration. Comma-separated list of key:value pairs. [default = ""]
|
|
2928
3098
|
[--publishToPrivacyCenter] When true, publish the configuration to the Privacy Center [default = false]
|
|
2929
3099
|
[--classifyService] When true, automatically assign the service for a data flow based on the domain that is specified [default = false]
|
|
2930
3100
|
[--deleteExtraAttributeValues] When true and syncing attributes, delete any extra attributes instead of just upserting [default = false]
|
|
@@ -2941,7 +3111,7 @@ The API key permissions for this command vary based on the resources declared as
|
|
|
2941
3111
|
| `customFields` | `attributes` | Custom Field definitions that define extra metadata for each table in the Admin Dashboard. | Manage Global Attributes | [Custom Fields](https://app.transcend.io/infrastructure/attributes) |
|
|
2942
3112
|
| `templates` | `templates` | Email templates. Only template titles can be created and mapped to other resources. | Manage Email Templates | [DSR Automation -> Email Settings -> Templates](https://app.transcend.io/privacy-requests/email-settings/templates) |
|
|
2943
3113
|
| `dataSilos` | `data-silos` | The Data System (formerly "Data Silo") definitions. | Manage Data Map, Connect Data Silos, View API Keys | [Data Inventory -> Data Systems](https://app.transcend.io/data-map/data-inventory/data-silos)<br>[Infrastructure -> Integrations](https://app.transcend.io/infrastructure/integrations) |
|
|
2944
|
-
| `enrichers` | `
|
|
3114
|
+
| `enrichers` | `preflights` | The Privacy Request preflight check configurations (formerly "enrichers"). | Manage Request Identity Verification | [DSR Automation -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
|
|
2945
3115
|
| `dataFlows` | `data-flows` | Consent Manager Data Flow definitions. | Manage Data Flows | [Consent Management -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
|
|
2946
3116
|
| `businessEntities` | `business-entities` | The business entities in the Data Inventory. | Manage Data Inventory | [Data Inventory -> Business Entities](https://app.transcend.io/data-map/data-inventory/business-entities) |
|
|
2947
3117
|
| `processingActivities` | `processing-activities` | The processing activities in the Data Inventory. | Manage Data Map | [Data Inventory -> Processing Activities](https://app.transcend.io/data-map/data-inventory/processing-activities) |
|
|
@@ -2994,7 +3164,7 @@ transcend inventory push --auth="$TRANSCEND_API_KEY" --classifyService
|
|
|
2994
3164
|
transcend inventory push --auth="$TRANSCEND_API_KEY" --deleteExtraAttributeValues
|
|
2995
3165
|
```
|
|
2996
3166
|
|
|
2997
|
-
**Use dynamic variables
|
|
3167
|
+
**Use dynamic variables in YAML files (see [./examples/multi-instance.yml](./examples/multi-instance.yml))**
|
|
2998
3168
|
|
|
2999
3169
|
```sh
|
|
3000
3170
|
transcend inventory push --auth="$TRANSCEND_API_KEY" --variables=domain:acme.com,stage:staging
|
|
@@ -3127,18 +3297,18 @@ jobs:
|
|
|
3127
3297
|
run: transcend inventory push --auth=${{ secrets.TRANSCEND_API_KEY }}
|
|
3128
3298
|
```
|
|
3129
3299
|
|
|
3130
|
-
#### Dynamic
|
|
3300
|
+
#### Dynamic variables
|
|
3131
3301
|
|
|
3132
3302
|
If you are using this CLI to sync your Data Map between multiple Transcend instances, you may find the need to make minor modifications to your configurations between environments. The most notable difference would be the domain where your webhook URLs are hosted on.
|
|
3133
3303
|
|
|
3134
|
-
The `transcend inventory push` command
|
|
3304
|
+
The `transcend inventory push` command accepts `--variables` as a comma-separated list of `key:value` pairs. Colons are preserved in values; escape a literal comma as `\,` inside a quoted flag value.
|
|
3135
3305
|
|
|
3136
|
-
This command
|
|
3306
|
+
This command can fill out multiple variables in a YAML file like [./examples/multi-instance.yml](./examples/multi-instance.yml), copied below:
|
|
3137
3307
|
|
|
3138
3308
|
```yml
|
|
3139
3309
|
api-keys:
|
|
3140
3310
|
- title: Webhook Key
|
|
3141
|
-
|
|
3311
|
+
preflights:
|
|
3142
3312
|
- title: Basic Identity Enrichment
|
|
3143
3313
|
description: Enrich an email address to the userId and phone number
|
|
3144
3314
|
# The data silo webhook URL is the same in each environment,
|
|
@@ -4130,26 +4300,91 @@ FLAGS
|
|
|
4130
4300
|
transcend policy eval --pkg=data.transcend.decision --input=./fixtures/envelope.json --bundle=./policies
|
|
4131
4301
|
```
|
|
4132
4302
|
|
|
4303
|
+
### `transcend policy init`
|
|
4304
|
+
|
|
4305
|
+
```txt
|
|
4306
|
+
USAGE
|
|
4307
|
+
transcend policy init [--editor] [--skill] [--ci] [--noInteractive] [--dryRun] [--yes] [--json] [<directory>]
|
|
4308
|
+
transcend policy init --help
|
|
4309
|
+
|
|
4310
|
+
Probes OPA and Regal, previews one safe transactional plan, and creates a publishable fail-closed Rego v1 starter only in an empty target. Optional editor, Agent Skill, and validation-only CI setup preserve repository customization. No Transcend credentials are needed.
|
|
4311
|
+
|
|
4312
|
+
FLAGS
|
|
4313
|
+
[--editor/--noEditor] Merge strict target-scoped VS Code settings, extensions, and lint task
|
|
4314
|
+
[--skill/--noSkill] Install the canonical Policy Engine coding-agent skill
|
|
4315
|
+
[--ci/--noCi] Generate credential-free validation-only GitHub Actions
|
|
4316
|
+
[--noInteractive] Disable prompts and enable optional setup only through explicit flags [default = false]
|
|
4317
|
+
[--dryRun] Preview all changes without writing files [default = false]
|
|
4318
|
+
[--yes] Skip only the final plan confirmation [default = false]
|
|
4319
|
+
[--json] Emit one stable JSON result and imply non-interactive output [default = false]
|
|
4320
|
+
-h --help Print help information and exit
|
|
4321
|
+
|
|
4322
|
+
ARGUMENTS
|
|
4323
|
+
[directory] Policy project directory [default = transcend/policy]
|
|
4324
|
+
```
|
|
4325
|
+
|
|
4326
|
+
#### Create the safe default policy project
|
|
4327
|
+
|
|
4328
|
+
```sh
|
|
4329
|
+
transcend policy init
|
|
4330
|
+
```
|
|
4331
|
+
|
|
4332
|
+
This creates a publishable, fail-closed Rego v1 starter under `transcend/policy`. The example policy is disposable teaching material, not an application contract. Initialization checks local OPA and Regal versions and prints official installation guidance when they are missing or incompatible; it never installs tools or creates runtime-manager configuration.
|
|
4333
|
+
|
|
4334
|
+
The interactive checklist selects repository-level VS Code setup, the `transcend-policy-engine` Agent Skill, and credential-free validation-only GitHub Actions by default. VS Code setup recommends the official OPA extension, scopes bundle authoring and a default `policy: lint` task to the selected project, and configures strict Rego v1 formatting with Regal.
|
|
4335
|
+
|
|
4336
|
+
To give an agent the same policy guidance before initialization, install the standalone skill directly from this repository:
|
|
4337
|
+
|
|
4338
|
+
```sh
|
|
4339
|
+
npx skills add transcend-io/tools --skill transcend-policy-engine
|
|
4340
|
+
```
|
|
4341
|
+
|
|
4342
|
+
#### Preview or choose another directory
|
|
4343
|
+
|
|
4344
|
+
```sh
|
|
4345
|
+
transcend policy init ./policies --dryRun --json
|
|
4346
|
+
transcend policy init ./policies --editor --skill --ci --noInteractive --yes
|
|
4347
|
+
```
|
|
4348
|
+
|
|
4349
|
+
Non-interactive setup enables only the individual `--editor`, `--skill`, and `--ci` flags passed. There are no setup presets. The complete plan is applied transactionally. Existing or partially initialized policy targets are left unchanged with actionable warnings, including customized Rego, manifests, Regal configuration, README files, workflows, editor values and tasks, and managed skill content.
|
|
4350
|
+
|
|
4351
|
+
Generated CI pins OPA 1.13.1, Regal 0.42.0, immutable setup action commits, and the current Transcend CLI release. It runs only `transcend policy lint --noInteractive --json`; it never publishes or adds Transcend API credentials. After successful initialization, copyable one-line next steps and an AI handoff prompt identify the disposable example, repository-specific CI adaptation, and the final lint gate.
|
|
4352
|
+
|
|
4133
4353
|
### `transcend policy lint`
|
|
4134
4354
|
|
|
4135
4355
|
```txt
|
|
4136
4356
|
USAGE
|
|
4137
|
-
transcend policy lint
|
|
4357
|
+
transcend policy lint [--dir value] [--fix] [--noInteractive] [--json]
|
|
4138
4358
|
transcend policy lint --help
|
|
4139
4359
|
|
|
4140
|
-
|
|
4360
|
+
Validates manifest roots and package coverage, verifies OPA 1.x and Regal, checks or repairs OPA formatting, runs a production-only strict OPA check, treats Regal warnings as failures, and requires non-empty OPA tests. No Transcend API key is needed.
|
|
4141
4361
|
|
|
4142
4362
|
FLAGS
|
|
4143
|
-
--dir
|
|
4144
|
-
|
|
4363
|
+
[--dir] Directory containing the local policy project [default = transcend/policy]
|
|
4364
|
+
[--fix] Apply OPA formatting without running broad Regal fixes [default = false]
|
|
4365
|
+
[--noInteractive] Disable the optional formatting confirmation [default = false]
|
|
4366
|
+
[--json] Emit one stable JSON result and imply non-interactive behavior [default = false]
|
|
4367
|
+
-h --help Print help information and exit
|
|
4145
4368
|
```
|
|
4146
4369
|
|
|
4147
4370
|
#### Examples
|
|
4148
4371
|
|
|
4149
|
-
**
|
|
4372
|
+
**Verify the default local policy project**
|
|
4373
|
+
|
|
4374
|
+
```sh
|
|
4375
|
+
transcend policy lint
|
|
4376
|
+
```
|
|
4377
|
+
|
|
4378
|
+
**Verify and format a custom policy project**
|
|
4379
|
+
|
|
4380
|
+
```sh
|
|
4381
|
+
transcend policy lint --dir=./policies --fix
|
|
4382
|
+
```
|
|
4383
|
+
|
|
4384
|
+
**Run the verification gate in CI or an editor**
|
|
4150
4385
|
|
|
4151
4386
|
```sh
|
|
4152
|
-
transcend policy lint --
|
|
4387
|
+
transcend policy lint --noInteractive --json
|
|
4153
4388
|
```
|
|
4154
4389
|
|
|
4155
4390
|
### `transcend policy bundles`
|