@transcend-io/cli 8.33.0 → 8.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +18 -17
  2. package/dist/{api-keys-CeNcWGoF.cjs → api-keys-CDp8NUhN.cjs} +2 -2
  3. package/dist/{api-keys-CeNcWGoF.cjs.map → api-keys-CDp8NUhN.cjs.map} +1 -1
  4. package/dist/{app-DcXc-oSw.cjs → app-rVGy2Ks-.cjs} +18 -18
  5. package/dist/app-rVGy2Ks-.cjs.map +1 -0
  6. package/dist/bin/bash-complete.cjs +1 -1
  7. package/dist/bin/cli.cjs +1 -1
  8. package/dist/bin/deprecated-command.cjs +1 -1
  9. package/dist/{code-scanning-CkCFWUcH.cjs → code-scanning-BwfVNIHr.cjs} +2 -2
  10. package/dist/{code-scanning-CkCFWUcH.cjs.map → code-scanning-BwfVNIHr.cjs.map} +1 -1
  11. package/dist/{command-D5Fq3lQQ.cjs → command-3fhEz5PC.cjs} +2 -2
  12. package/dist/{command-D5Fq3lQQ.cjs.map → command-3fhEz5PC.cjs.map} +1 -1
  13. package/dist/{consent-manager-BX6ZnSbw.cjs → consent-manager-DXWjvCtI.cjs} +2 -2
  14. package/dist/{consent-manager-BX6ZnSbw.cjs.map → consent-manager-DXWjvCtI.cjs.map} +1 -1
  15. package/dist/{constants-BD9ZSD52.cjs → constants-B-TmLA0w.cjs} +2 -2
  16. package/dist/{constants-BD9ZSD52.cjs.map → constants-B-TmLA0w.cjs.map} +1 -1
  17. package/dist/{cron-D1F4Wo3v.cjs → cron-DQHN57v7.cjs} +2 -2
  18. package/dist/{cron-D1F4Wo3v.cjs.map → cron-DQHN57v7.cjs.map} +1 -1
  19. package/dist/{data-inventory-DWDKRQdc.cjs → data-inventory-flXV6qPl.cjs} +2 -2
  20. package/dist/{data-inventory-DWDKRQdc.cjs.map → data-inventory-flXV6qPl.cjs.map} +1 -1
  21. package/dist/{dataFlowsToDataSilos-Cgf4hNWx.cjs → dataFlowsToDataSilos-Lk7WQ39V.cjs} +2 -2
  22. package/dist/{dataFlowsToDataSilos-Cgf4hNWx.cjs.map → dataFlowsToDataSilos-Lk7WQ39V.cjs.map} +1 -1
  23. package/dist/{impl-C-7OtS7U.cjs → impl-2u3q0rji.cjs} +2 -2
  24. package/dist/{impl-C-7OtS7U.cjs.map → impl-2u3q0rji.cjs.map} +1 -1
  25. package/dist/{impl-Cin6Sm_A.cjs → impl-3ih-x09b.cjs} +2 -2
  26. package/dist/{impl-Cin6Sm_A.cjs.map → impl-3ih-x09b.cjs.map} +1 -1
  27. package/dist/{impl-BbzXYtNe.cjs → impl-80GXtjmz.cjs} +2 -2
  28. package/dist/{impl-BbzXYtNe.cjs.map → impl-80GXtjmz.cjs.map} +1 -1
  29. package/dist/{impl-DzhRBdKP.cjs → impl-8PlQ3Cvy.cjs} +2 -2
  30. package/dist/{impl-DzhRBdKP.cjs.map → impl-8PlQ3Cvy.cjs.map} +1 -1
  31. package/dist/{impl-DsxQG1dX.cjs → impl-B1p9GNrM.cjs} +2 -2
  32. package/dist/{impl-DsxQG1dX.cjs.map → impl-B1p9GNrM.cjs.map} +1 -1
  33. package/dist/{impl-yHnQQ2CQ.cjs → impl-B4iI3rcF.cjs} +2 -2
  34. package/dist/{impl-yHnQQ2CQ.cjs.map → impl-B4iI3rcF.cjs.map} +1 -1
  35. package/dist/{impl-BIKOcvus.cjs → impl-B6qG10UZ.cjs} +2 -2
  36. package/dist/{impl-BIKOcvus.cjs.map → impl-B6qG10UZ.cjs.map} +1 -1
  37. package/dist/{impl-DM1304bO.cjs → impl-BJ8i_gqQ.cjs} +2 -2
  38. package/dist/{impl-DM1304bO.cjs.map → impl-BJ8i_gqQ.cjs.map} +1 -1
  39. package/dist/{impl-CVfl7uBT.cjs → impl-BZc5cmdE.cjs} +2 -2
  40. package/dist/{impl-CVfl7uBT.cjs.map → impl-BZc5cmdE.cjs.map} +1 -1
  41. package/dist/{impl-CGyUqfRC.cjs → impl-Bc9DMV-V.cjs} +2 -2
  42. package/dist/{impl-CGyUqfRC.cjs.map → impl-Bc9DMV-V.cjs.map} +1 -1
  43. package/dist/{impl-CbgeX1jH.cjs → impl-BjsBvvGF.cjs} +2 -2
  44. package/dist/{impl-CbgeX1jH.cjs.map → impl-BjsBvvGF.cjs.map} +1 -1
  45. package/dist/{impl-B5OPMsjg.cjs → impl-BqyO4vYa.cjs} +2 -2
  46. package/dist/{impl-B5OPMsjg.cjs.map → impl-BqyO4vYa.cjs.map} +1 -1
  47. package/dist/{impl-B6BUB0mM.cjs → impl-Bsqlw8_g.cjs} +2 -2
  48. package/dist/{impl-B6BUB0mM.cjs.map → impl-Bsqlw8_g.cjs.map} +1 -1
  49. package/dist/{impl-CUv-uEcw.cjs → impl-BuJNWbOW.cjs} +2 -2
  50. package/dist/{impl-CUv-uEcw.cjs.map → impl-BuJNWbOW.cjs.map} +1 -1
  51. package/dist/{impl-BHn8Xyv1.cjs → impl-C2_oQebA.cjs} +2 -2
  52. package/dist/{impl-BHn8Xyv1.cjs.map → impl-C2_oQebA.cjs.map} +1 -1
  53. package/dist/{impl-C90tUCre.cjs → impl-CCeEUy6z.cjs} +2 -2
  54. package/dist/{impl-C90tUCre.cjs.map → impl-CCeEUy6z.cjs.map} +1 -1
  55. package/dist/impl-CUkxcZrf.cjs +2 -0
  56. package/dist/impl-CUkxcZrf.cjs.map +1 -0
  57. package/dist/{impl-BDnouOC0.cjs → impl-CZmlwib3.cjs} +2 -2
  58. package/dist/{impl-BDnouOC0.cjs.map → impl-CZmlwib3.cjs.map} +1 -1
  59. package/dist/{impl-D5hff3ap.cjs → impl-CaSO2LPb.cjs} +2 -2
  60. package/dist/{impl-D5hff3ap.cjs.map → impl-CaSO2LPb.cjs.map} +1 -1
  61. package/dist/{impl-Dp8YKwTO.cjs → impl-CaUSDPuW.cjs} +2 -2
  62. package/dist/{impl-Dp8YKwTO.cjs.map → impl-CaUSDPuW.cjs.map} +1 -1
  63. package/dist/{impl-oR9gq6xk.cjs → impl-Cc-Lfiig.cjs} +2 -2
  64. package/dist/{impl-oR9gq6xk.cjs.map → impl-Cc-Lfiig.cjs.map} +1 -1
  65. package/dist/{impl-BsGJeF__.cjs → impl-CpoSlP1o.cjs} +2 -2
  66. package/dist/{impl-BsGJeF__.cjs.map → impl-CpoSlP1o.cjs.map} +1 -1
  67. package/dist/{impl-CTL3WMFF.cjs → impl-CrsHy3BZ.cjs} +2 -2
  68. package/dist/{impl-CTL3WMFF.cjs.map → impl-CrsHy3BZ.cjs.map} +1 -1
  69. package/dist/{impl-B4qjQXOd.cjs → impl-CtMVi5m1.cjs} +2 -2
  70. package/dist/{impl-B4qjQXOd.cjs.map → impl-CtMVi5m1.cjs.map} +1 -1
  71. package/dist/{impl-DS6F9y25.cjs → impl-Cw7Jxx0V.cjs} +2 -2
  72. package/dist/{impl-DS6F9y25.cjs.map → impl-Cw7Jxx0V.cjs.map} +1 -1
  73. package/dist/{impl-CxdbiV2X.cjs → impl-CwPRkBc0.cjs} +2 -2
  74. package/dist/{impl-CxdbiV2X.cjs.map → impl-CwPRkBc0.cjs.map} +1 -1
  75. package/dist/{impl-D3zjP2ku.cjs → impl-CzO7dqsL.cjs} +2 -2
  76. package/dist/{impl-D3zjP2ku.cjs.map → impl-CzO7dqsL.cjs.map} +1 -1
  77. package/dist/{impl-iq1sVHav.cjs → impl-D0r4dSxM.cjs} +2 -2
  78. package/dist/{impl-iq1sVHav.cjs.map → impl-D0r4dSxM.cjs.map} +1 -1
  79. package/dist/{impl-BMRqCmae.cjs → impl-DBnRvkUi.cjs} +2 -2
  80. package/dist/{impl-BMRqCmae.cjs.map → impl-DBnRvkUi.cjs.map} +1 -1
  81. package/dist/{impl-kVQqDHo_.cjs → impl-DOmKR8yz.cjs} +2 -2
  82. package/dist/{impl-kVQqDHo_.cjs.map → impl-DOmKR8yz.cjs.map} +1 -1
  83. package/dist/{impl-BbW2KaPV.cjs → impl-DX7gLoTo.cjs} +2 -2
  84. package/dist/{impl-BbW2KaPV.cjs.map → impl-DX7gLoTo.cjs.map} +1 -1
  85. package/dist/{impl-rnU7yUjG.cjs → impl-DcQ_HfDZ.cjs} +2 -2
  86. package/dist/{impl-rnU7yUjG.cjs.map → impl-DcQ_HfDZ.cjs.map} +1 -1
  87. package/dist/{impl-BuWbatdy.cjs → impl-DjTjLgew.cjs} +2 -2
  88. package/dist/{impl-BuWbatdy.cjs.map → impl-DjTjLgew.cjs.map} +1 -1
  89. package/dist/{impl-YgCkAZKW.cjs → impl-DoP4FUJI.cjs} +2 -2
  90. package/dist/{impl-YgCkAZKW.cjs.map → impl-DoP4FUJI.cjs.map} +1 -1
  91. package/dist/{impl-DFFHnEfz.cjs → impl-DrNWIvMG.cjs} +2 -2
  92. package/dist/{impl-DFFHnEfz.cjs.map → impl-DrNWIvMG.cjs.map} +1 -1
  93. package/dist/{impl-DKLcpd4u.cjs → impl-DvlAq8xf.cjs} +2 -2
  94. package/dist/{impl-DKLcpd4u.cjs.map → impl-DvlAq8xf.cjs.map} +1 -1
  95. package/dist/{impl-CZhxfPM5.cjs → impl-E1vzeNmp.cjs} +2 -2
  96. package/dist/{impl-CZhxfPM5.cjs.map → impl-E1vzeNmp.cjs.map} +1 -1
  97. package/dist/{impl-kcqjjB9c.cjs → impl-EEKe6HmF.cjs} +2 -2
  98. package/dist/{impl-kcqjjB9c.cjs.map → impl-EEKe6HmF.cjs.map} +1 -1
  99. package/dist/{impl-C_OukxEb.cjs → impl-NdV_MRsm.cjs} +2 -2
  100. package/dist/{impl-C_OukxEb.cjs.map → impl-NdV_MRsm.cjs.map} +1 -1
  101. package/dist/{impl-CjYWoHKD.cjs → impl-TQVXJemY.cjs} +2 -2
  102. package/dist/{impl-CjYWoHKD.cjs.map → impl-TQVXJemY.cjs.map} +1 -1
  103. package/dist/{impl-PFoDCPAv.cjs → impl-b6KwZ74o.cjs} +2 -2
  104. package/dist/{impl-PFoDCPAv.cjs.map → impl-b6KwZ74o.cjs.map} +1 -1
  105. package/dist/{impl-C9fSANNl.cjs → impl-t_fZSUcj.cjs} +2 -2
  106. package/dist/{impl-C9fSANNl.cjs.map → impl-t_fZSUcj.cjs.map} +1 -1
  107. package/dist/index.cjs +1 -1
  108. package/dist/index.d.cts +62 -62
  109. package/dist/{manual-enrichment-CYHP0rrX.cjs → manual-enrichment-Y_BQaSZQ.cjs} +2 -2
  110. package/dist/{manual-enrichment-CYHP0rrX.cjs.map → manual-enrichment-Y_BQaSZQ.cjs.map} +1 -1
  111. package/dist/{pooling-BxR5ih0w.cjs → pooling-Ct83vfEh.cjs} +2 -2
  112. package/dist/{pooling-BxR5ih0w.cjs.map → pooling-Ct83vfEh.cjs.map} +1 -1
  113. package/dist/{preference-management-ChwQxoo8.cjs → preference-management-5uJDKuMK.cjs} +3 -3
  114. package/dist/{preference-management-ChwQxoo8.cjs.map → preference-management-5uJDKuMK.cjs.map} +1 -1
  115. package/dist/{syncConfigurationToTranscend-B9c2w6d0.cjs → syncConfigurationToTranscend-Bpge5AcC.cjs} +3 -3
  116. package/dist/syncConfigurationToTranscend-Bpge5AcC.cjs.map +1 -0
  117. package/dist/{uploadConsents-d1VkrHk6.cjs → uploadConsents-CJc_6Qwd.cjs} +2 -2
  118. package/dist/{uploadConsents-d1VkrHk6.cjs.map → uploadConsents-CJc_6Qwd.cjs.map} +1 -1
  119. package/package.json +1 -1
  120. package/dist/app-DcXc-oSw.cjs.map +0 -1
  121. package/dist/impl-D5rwOHR4.cjs +0 -2
  122. package/dist/impl-D5rwOHR4.cjs.map +0 -1
  123. package/dist/syncConfigurationToTranscend-B9c2w6d0.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"code-scanning-CkCFWUcH.cjs","names":["CodePackageType","name","listFiles","CodePackageType","listFiles","CodePackageType","yaml","CodePackageType","name","name","t","CodePackageType","CodePackageType"],"sources":["../src/lib/code-scanning/integrations/cocoaPods.ts","../src/lib/code-scanning/integrations/gradle.ts","../src/lib/code-scanning/integrations/javascriptPackageJson.ts","../src/lib/code-scanning/integrations/pythonRequirementsTxt.ts","../src/lib/code-scanning/integrations/gemfile.ts","../src/lib/code-scanning/integrations/pubspec.ts","../src/lib/code-scanning/integrations/composerJson.ts","../src/lib/code-scanning/integrations/swift.ts","../src/lib/code-scanning/integrations/kotlin.ts","../src/lib/code-scanning/constants.ts","../src/lib/code-scanning/findCodePackagesInFolder.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageSdk } from '../../../codecs';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\nconst POD_TARGET_REGEX = /target ('|\")(.*?)('|\")/;\nconst POD_PACKAGE_REGEX = /pod ('|\")(.*?)('|\")(, ('|\")~> (.+?)('|\")|)/;\n\nexport const cocoaPods: CodeScanningConfig = {\n supportedFiles: ['Podfile'],\n ignoreDirs: ['Pods', 'Build'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(POD_TARGET_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2'],\n },\n fileContents,\n );\n const packages = findAllWithRegex(\n {\n value: new RegExp(POD_PACKAGE_REGEX, 'g'),\n matches: [\n 'quote1',\n 'name',\n 'quote2',\n 'extra',\n 'quote3',\n 'version',\n 'quote4',\n ],\n },\n fileContents,\n );\n\n const deps: CodePackageSdk[] = targets.map((target, ind) => ({\n name: target.name,\n type: CodePackageType.CocoaPods,\n softwareDevelopmentKits: packages\n .filter(\n (pkg) =>\n pkg.matchIndex > target.matchIndex &&\n (!targets[ind + 1] || pkg.matchIndex < targets[ind + 1].matchIndex),\n )\n .map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n }));\n\n return deps;\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { dirname } from 'node:path';\n\nconst GRADLE_IMPLEMENTATION_REGEX =\n /implementation( *)('|\")(.+?):(.+?):(.+?|)('|\")/;\nconst GRADLE_PLUGIN_REGEX = /apply plugin: *('|\")(.+?)(:(.+?)|)('|\")/;\nconst GRADLE_IMPLEMENTATION_GROUP_REGEX =\n /implementation group:( *)('|\")(.+?)('|\"),( *)name:( *)('|\")(.+?)('|\"),( *)version:( *)('|\")(.+?)('|\")/;\nconst GRADLE_APPLICATION_NAME_REGEX = /applicationId( *)\"(.+?)\"/;\n\n/**\n * So far, there are three ways of defining dependencies that is supported\n * implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.core', version: '3.28.0'\n * or\n * implementation 'com.google.firebase:firebase-analytics:18.0.0'\n * or\n * apply plugin: 'com.google.gms.google-services'\n *\n * single and double quotes are both recognized\n */\nexport const gradle: CodeScanningConfig = {\n supportedFiles: ['build.gradle**'],\n ignoreDirs: [\n 'gradle-app.setting',\n 'gradle-wrapper.jar',\n 'gradle-wrapper.properties',\n ],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_REGEX, 'g'),\n matches: ['space', 'quote1', 'name', 'path', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetPlugins = findAllWithRegex(\n {\n value: new RegExp(GRADLE_PLUGIN_REGEX, 'g'),\n matches: ['quote1', 'name', 'group', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetGroups = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_GROUP_REGEX, 'g'),\n matches: [\n 'space1',\n 'quote1',\n 'group',\n 'quote2',\n 'space2',\n 'space3',\n 'quote3',\n 'name',\n 'quote4',\n 'space4',\n 'space5',\n 'quote5',\n 'version',\n 'quote6',\n ],\n },\n fileContents,\n );\n const applications = findAllWithRegex(\n {\n value: new RegExp(GRADLE_APPLICATION_NAME_REGEX, 'g'),\n matches: ['space', 'name'],\n },\n fileContents,\n );\n if (applications.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n\n return [\n {\n name: applications[0]?.name || directory.split('/').pop()!,\n softwareDevelopmentKits: [\n ...targets,\n ...targetGroups,\n ...targetPlugins,\n ].map((target) => ({\n name: target.name,\n version: target.version || undefined,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageSdk } from '../../../codecs';\nimport { dirname } from 'node:path';\n\nexport const javascriptPackageJson: CodeScanningConfig = {\n supportedFiles: ['package.json'],\n ignoreDirs: ['node_modules', 'serverless-build', 'lambda-build'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n dependencies = {},\n devDependencies = {},\n optionalDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(devDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ...Object.entries(optionalDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { listFiles } from '../../api-keys';\nimport { dirname, join } from 'node:path';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\nconst REQUIREMENTS_PACKAGE_MATCH = /(.+?)(=+)(.+)/;\nconst PACKAGE_NAME = /name *= *('|\")(.+?)('|\")/;\nconst PACKAGE_DESCRIPTION = /description *= *('|\")(.+?)('|\")/;\n\nexport const pythonRequirementsTxt: CodeScanningConfig = {\n supportedFiles: ['requirements.txt'],\n ignoreDirs: ['build', 'lib', 'lib64'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse setup file for name\n const setupFile = filesInFolder.find((file) => file === 'setup.py');\n const setupFileContents = setupFile\n ? readFileSync(join(directory, setupFile), 'utf-8')\n : undefined;\n const packageName = setupFileContents\n ? (PACKAGE_NAME.exec(setupFileContents) || [])[2]\n : undefined;\n const packageDescription = setupFileContents\n ? (PACKAGE_DESCRIPTION.exec(setupFileContents) || [])[2]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(REQUIREMENTS_PACKAGE_MATCH, 'g'),\n matches: ['name', 'equals', 'version'],\n },\n fileContents,\n );\n\n return [\n {\n name: packageName || directory.split('/').pop()!,\n description: packageDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { listFiles } from '../../api-keys';\nimport { dirname } from 'node:path';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\nconst GEM_PACKAGE_REGEX = /gem *('|\")(.+?)('|\")(, *('|\")(.+?)('|\")|)/;\nconst GEMFILE_PACKAGE_NAME_REGEX = /spec\\.name *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_DESCRIPTION_REGEX =\n /spec\\.description *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_SUMMARY_REGEX = /spec\\.summary *= *('|\")(.+?)('|\")/;\n\nexport const gemfile: CodeScanningConfig = {\n supportedFiles: ['Gemfile'],\n ignoreDirs: ['bin'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse gemspec file for name\n const gemspec = filesInFolder.find((file) => file === '.gemspec');\n const gemspecContents = gemspec\n ? readFileSync(gemspec, 'utf-8')\n : undefined;\n const gemfileName = gemspecContents\n ? (GEMFILE_PACKAGE_NAME_REGEX.exec(gemspecContents) || [])[2]\n : undefined;\n const gemfileDescription = gemspecContents\n ? (GEMFILE_PACKAGE_DESCRIPTION_REGEX.exec(gemspecContents) ||\n GEMFILE_PACKAGE_SUMMARY_REGEX.exec(gemspecContents) ||\n [])[1]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GEM_PACKAGE_REGEX, 'g'),\n matches: [\n 'quote1',\n 'name',\n 'quote2',\n 'hasVersion',\n 'quote3',\n 'version',\n 'quote4',\n ],\n },\n fileContents,\n );\n\n return [\n {\n name: gemfileName || directory.split('/').pop()!,\n description: gemfileDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport yaml from 'js-yaml';\nimport { dirname } from 'node:path';\n\n/**\n * Remove YAML comments from a string\n *\n * @param yamlString - YAML string\n * @returns String without comments\n */\nfunction removeYAMLComments(yamlString: string): string {\n return yamlString\n .split('\\n')\n .map((line) => {\n // Remove inline comments\n const commentIndex = line.indexOf('#');\n if (commentIndex > -1) {\n // Check if '#' is not inside a string\n if (\n !line.substring(0, commentIndex).includes('\"') &&\n !line.substring(0, commentIndex).includes(\"'\")\n ) {\n return line.substring(0, commentIndex).trim();\n }\n }\n return line;\n })\n .filter((line) => line.length > 0)\n .join('\\n');\n}\n\nexport const pubspec: CodeScanningConfig = {\n supportedFiles: ['pubspec.yml'],\n ignoreDirs: ['build'],\n scanFunction: (filePath) => {\n const directory = dirname(filePath);\n const fileContents = readFileSync(filePath, 'utf-8');\n const {\n name,\n description,\n dev_dependencies = {},\n dependencies = {},\n } = yaml.load(removeYAMLComments(fileContents)) as {\n /** Name */\n name?: string;\n /** Description */\n description?: string;\n /** Dev dependencies */\n dev_dependencies?: { [k in string]: number | Record<string, string> };\n /** Dependencies */\n dependencies?: { [k in string]: number | Record<string, string> };\n };\n return [\n {\n name: name || directory.split('/').pop()!,\n description,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n })),\n ...Object.entries(dev_dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n isDevDependency: true,\n })),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageSdk } from '../../../codecs';\nimport { dirname } from 'node:path';\n\nexport const composerJson: CodeScanningConfig = {\n supportedFiles: ['composer.json'],\n ignoreDirs: ['vendor', 'node_modules', 'cache', 'build', 'dist'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n require: requireDependencies = {},\n 'require-dev': requiredDevDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(requireDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(requiredDevDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport * as t from 'io-ts';\nimport { dirname } from 'node:path';\n\nconst SwiftPackage = t.type({\n pins: t.array(\n t.type({\n identity: t.string,\n kind: t.string,\n location: t.string,\n state: t.intersection([\n t.type({\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n version: t.number,\n});\n\nconst SwiftPackageV1 = t.type({\n object: t.type({\n pins: t.array(\n t.type({\n package: t.string,\n repositoryURL: t.string,\n state: t.intersection([\n t.type({\n branch: t.union([t.string, t.undefined, t.null]),\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n }),\n version: t.number,\n});\n\nexport const swift: CodeScanningConfig = {\n supportedFiles: ['Package.resolved'],\n ignoreDirs: [],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n // Attempt latest version first\n try {\n const parsed = decodeCodec(SwiftPackage, fileContents);\n const splitPath = dirname(filePath).split('/');\n const originalName = splitPath[splitPath.length - 1];\n let name = originalName;\n if (name === 'swiftpm') {\n name = splitPath[splitPath.length - 2];\n if (name === 'xcshareddata') {\n name = splitPath[splitPath.length - 3];\n } else if (!name) {\n name = originalName;\n }\n if (name === 'project.xcworkspace') {\n name = splitPath[splitPath.length - 4];\n }\n }\n return [\n {\n name,\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.pins.map((target) => ({\n name: target.identity,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e) {\n // Throw non codec errors\n if (!e?.message?.includes('Failed to decode codec')) {\n throw e;\n }\n\n // Attempt v1\n try {\n const parsed = decodeCodec(SwiftPackageV1, fileContents);\n return [\n {\n name: dirname(filePath).split('/').pop() || '', // TODO pull from Package.swift ->> name if possible\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.object.pins.map((target) => ({\n name: target.package,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e2) {\n if (!e2?.message?.includes('Failed to decode codec')) {\n throw e2;\n }\n throw e;\n }\n }\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\n/**\n * Kotlin DSL (build.gradle.kts) dependency & plugin parsing\n */\n\nconst KTS_DEP_CONFIGS =\n // eslint-disable-next-line max-len\n '(implementation|api|kapt|ksp|debugImplementation|releaseImplementation|androidTestImplementation|testImplementation|compileOnly|runtimeOnly)';\n\n// e.g. implementation(\"com.google.firebase:firebase-analytics:18.0.0\")\nconst KTS_DEP_STRING_COORDS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)`,\n 'g',\n);\n// captures: [1]=config, [2]=group, [3]=artifact, [4]=version (may be '')\n\n// e.g. implementation(platform(\"com.google.firebase:firebase-bom:33.1.2\"))\nconst KTS_DEP_PLATFORM_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*platform\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)\\\\s*\\\\)`,\n 'g',\n);\n\n// e.g. implementation(libs.androidx.appcompat) / implementation(libs[\"androidx-core-ktx\"])\nconst KTS_DEP_LIBS_ALIAS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*libs(?:\\\\.[\\\\w\\\\-\\\\.]+|\\\\[[\"'][^\"']+[\"']\\\\])\\\\s*\\\\)`,\n 'g',\n);\n\n// Plugins:\n// plugins { id(\"com.google.gms.google-services\") version \"4.4.2\" apply false }\n// plugins { id(\"org.jetbrains.kotlin.android\") }\n// apply(plugin = \"newrelic\")\n// plugins { alias(libs.plugins.kotlin.android) }\nconst KTS_PLUGIN_ID_REGEX =\n /id\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)(?:\\s*version\\s*[\"']([^\"']+)[\"'])?/g;\nconst KTS_PLUGIN_APPLY_REGEX =\n /apply\\s*\\(\\s*plugin\\s*=\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\nconst KTS_PLUGIN_ALIAS_REGEX =\n /plugins\\s*\\{[^}]*alias\\s*\\(\\s*libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\])\\s*\\)[^}]*\\}/g;\n\n// applicationId in Kotlin DSL:\n// applicationId = \"com.foo.bar\"\n// applicationId(\"com.foo.bar\")\nconst KTS_APPLICATION_ID_EQ_REGEX = /applicationId\\s*=\\s*[\"']([^\"']+)[\"']/g;\nconst KTS_APPLICATION_ID_CALL_REGEX =\n /applicationId\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\n/**\n * Input dep entry (partial)\n */\ntype DepInput = {\n /** Name of the dependency */\n name: string;\n /** Version of the dependency */\n version?: string;\n};\n\n/**\n * Helper to normalize a parsed dep entry\n *\n * @param name - name\n * @param version - version\n * @returns normalized entry\n */\nfunction depEntry(name: string, version?: string): DepInput {\n const v =\n version && version.trim().length > 0 && version !== '_'\n ? version.trim()\n : undefined;\n return { name, version: v };\n}\n\nexport const kotlin: CodeScanningConfig = {\n supportedFiles: ['**/build.gradle.kts', '**/*.gradle.kts'],\n ignoreDirs: [\n 'gradle-app.setting',\n 'gradle-wrapper.jar',\n 'gradle-wrapper.properties',\n ],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n // ---------- applicationId ----------\n const appIds = [\n ...findAllWithRegex(\n { value: KTS_APPLICATION_ID_EQ_REGEX, matches: ['name'] },\n fileContents,\n ),\n ...findAllWithRegex(\n { value: KTS_APPLICATION_ID_CALL_REGEX, matches: ['name'] },\n fileContents,\n ),\n ];\n if (appIds.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n const appName = appIds[0]?.name || directory.split('/').pop()!;\n\n // ---------- dependencies ----------\n const deps: Array<DepInput> = [];\n\n // \"group:artifact:version\"\n for (const m of fileContents.matchAll(KTS_DEP_STRING_COORDS_REGEX)) {\n const [, , group, artifact, version] = m;\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // platform(\"group:artifact:version\")\n for (const m of fileContents.matchAll(KTS_DEP_PLATFORM_REGEX)) {\n const [, , group, artifact, version] = m;\n // Record as regular coord (you may prefer to tag as BoM separately)\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // libs aliases (version catalogs) — keep alias as name, unknown version\n for (const m of fileContents.matchAll(KTS_DEP_LIBS_ALIAS_REGEX)) {\n // Grab the exact token as name (best-effort)\n const token = m[0]\n .replace(/^[^(]+\\(\\s*/, '')\n .replace(/\\)\\s*$/, '')\n .trim(); // e.g., libs.androidx.appcompat or libs[\"androidx-core-ktx\"]\n deps.push(depEntry(token));\n }\n\n // ---------- plugins ----------\n const plugins: Array<DepInput> = [];\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_ID_REGEX)) {\n const [, pid, pver] = m;\n plugins.push(depEntry(pid, pver));\n }\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_APPLY_REGEX)) {\n const [, pid] = m;\n plugins.push(depEntry(pid));\n }\n\n // alias(libs.plugins...) — keep alias token (no version)\n if (KTS_PLUGIN_ALIAS_REGEX.test(fileContents)) {\n // Collect all alias lines to preserve identifiers; light parse:\n const aliasMatches = fileContents.matchAll(\n /alias\\s*\\(\\s*(libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\]))\\s*\\)/g,\n );\n for (const m of aliasMatches) {\n plugins.push(depEntry(m[1]));\n }\n }\n\n // ---------- compose final list ----------\n // Merge deps + plugins as \"softwareDevelopmentKits\"\n const softwareDevelopmentKits = [...deps, ...plugins]\n // de-dup by name+version\n .reduce(\n (acc, cur) => {\n const key = `${cur.name}@@${cur.version || ''}`;\n if (!acc.map.has(key)) {\n acc.map.set(key, cur);\n acc.list.push(cur);\n }\n return acc;\n },\n {\n map: new Map<string, DepInput>(),\n list: [] as Array<DepInput>,\n },\n ).list;\n\n return [\n {\n name: appName,\n softwareDevelopmentKits,\n },\n ];\n },\n};\n","import { CodeScanningConfig } from './types';\nimport {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n gemfile,\n composerJson,\n pubspec,\n swift,\n kotlin,\n pythonRequirementsTxt,\n} from './integrations';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\n/**\n * @deprecated TODO: https://transcend.height.app/T-32325 - use code scanning instead\n */\nexport const SILO_DISCOVERY_CONFIGS: {\n [k in string]: CodeScanningConfig;\n} = {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n pythonRequirementsTxt,\n gemfile,\n pubspec,\n swift,\n};\n\nexport const CODE_SCANNING_CONFIGS: {\n [k in CodePackageType]: CodeScanningConfig;\n} = {\n [CodePackageType.CocoaPods]: cocoaPods,\n [CodePackageType.Gradle]: gradle,\n [CodePackageType.PackageJson]: javascriptPackageJson,\n [CodePackageType.RequirementsTxt]: pythonRequirementsTxt,\n [CodePackageType.Gemfile]: gemfile,\n [CodePackageType.Pubspec]: pubspec,\n [CodePackageType.ComposerJson]: composerJson,\n [CodePackageType.Swift]: swift,\n [CodePackageType.Kotlin]: kotlin,\n};\n","import fastGlob from 'fast-glob';\nimport colors from 'colors';\nimport { CodePackageInput } from '../../codecs';\nimport { getEntries } from '@transcend-io/type-utils';\nimport { CODE_SCANNING_CONFIGS } from './constants';\nimport { logger } from '../../logger';\n\n/**\n * Helper to scan and discovery all of the code packages within a folder\n *\n * @param options - Options\n * @returns the list of integrations\n */\nexport async function findCodePackagesInFolder({\n scanPath,\n ignoreDirs = [],\n repositoryName,\n}: {\n /** The name of the github repository reporting packages for */\n repositoryName: string;\n /** Where to look for package.json files */\n scanPath: string;\n /** The directories to ignore (excludes node_modules and serverless-build) */\n ignoreDirs?: string[];\n}): Promise<CodePackageInput[]> {\n const allCodePackages = await Promise.all(\n getEntries(CODE_SCANNING_CONFIGS).map(async ([codePackageType, config]) => {\n const {\n ignoreDirs: configIgnoreDirs,\n supportedFiles,\n scanFunction,\n } = config;\n const dirsToIgnore = [...ignoreDirs, ...configIgnoreDirs].filter(\n (dir) => dir.length > 0,\n );\n try {\n const filesToScan: string[] = await fastGlob(\n `${scanPath}/**/${supportedFiles.join('|')}`,\n {\n ignore: dirsToIgnore.map((dir: string) => `${scanPath}/**/${dir}`),\n unique: true,\n onlyFiles: true,\n },\n );\n logger.info(\n colors.magenta(\n `Scanning: ${filesToScan.length} files of type ${codePackageType}`,\n ),\n );\n const allPackages = filesToScan\n .map((filePath) =>\n scanFunction(filePath).map((result) => ({\n ...result,\n relativePath: filePath.replace(`${scanPath}/`, ''),\n })),\n )\n .flat();\n logger.info(\n colors.green(\n `Found: ${allPackages.length} packages and ${\n allPackages\n .map(\n ({ softwareDevelopmentKits = [] }) => softwareDevelopmentKits,\n )\n .flat().length\n } sdks`,\n ),\n );\n\n return allPackages.map(\n (pkg): CodePackageInput => ({\n ...pkg,\n type: codePackageType,\n repositoryName,\n }),\n );\n } catch (error) {\n throw new Error(\n `Error scanning globs ${supportedFiles} with error: ${error}`,\n );\n }\n }),\n );\n\n return allCodePackages.flat();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"code-scanning-BwfVNIHr.cjs","names":["CodePackageType","name","listFiles","CodePackageType","listFiles","CodePackageType","yaml","CodePackageType","name","name","t","CodePackageType","CodePackageType"],"sources":["../src/lib/code-scanning/integrations/cocoaPods.ts","../src/lib/code-scanning/integrations/gradle.ts","../src/lib/code-scanning/integrations/javascriptPackageJson.ts","../src/lib/code-scanning/integrations/pythonRequirementsTxt.ts","../src/lib/code-scanning/integrations/gemfile.ts","../src/lib/code-scanning/integrations/pubspec.ts","../src/lib/code-scanning/integrations/composerJson.ts","../src/lib/code-scanning/integrations/swift.ts","../src/lib/code-scanning/integrations/kotlin.ts","../src/lib/code-scanning/constants.ts","../src/lib/code-scanning/findCodePackagesInFolder.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageSdk } from '../../../codecs';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\nconst POD_TARGET_REGEX = /target ('|\")(.*?)('|\")/;\nconst POD_PACKAGE_REGEX = /pod ('|\")(.*?)('|\")(, ('|\")~> (.+?)('|\")|)/;\n\nexport const cocoaPods: CodeScanningConfig = {\n supportedFiles: ['Podfile'],\n ignoreDirs: ['Pods', 'Build'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(POD_TARGET_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2'],\n },\n fileContents,\n );\n const packages = findAllWithRegex(\n {\n value: new RegExp(POD_PACKAGE_REGEX, 'g'),\n matches: [\n 'quote1',\n 'name',\n 'quote2',\n 'extra',\n 'quote3',\n 'version',\n 'quote4',\n ],\n },\n fileContents,\n );\n\n const deps: CodePackageSdk[] = targets.map((target, ind) => ({\n name: target.name,\n type: CodePackageType.CocoaPods,\n softwareDevelopmentKits: packages\n .filter(\n (pkg) =>\n pkg.matchIndex > target.matchIndex &&\n (!targets[ind + 1] || pkg.matchIndex < targets[ind + 1].matchIndex),\n )\n .map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n }));\n\n return deps;\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { dirname } from 'node:path';\n\nconst GRADLE_IMPLEMENTATION_REGEX =\n /implementation( *)('|\")(.+?):(.+?):(.+?|)('|\")/;\nconst GRADLE_PLUGIN_REGEX = /apply plugin: *('|\")(.+?)(:(.+?)|)('|\")/;\nconst GRADLE_IMPLEMENTATION_GROUP_REGEX =\n /implementation group:( *)('|\")(.+?)('|\"),( *)name:( *)('|\")(.+?)('|\"),( *)version:( *)('|\")(.+?)('|\")/;\nconst GRADLE_APPLICATION_NAME_REGEX = /applicationId( *)\"(.+?)\"/;\n\n/**\n * So far, there are three ways of defining dependencies that is supported\n * implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.core', version: '3.28.0'\n * or\n * implementation 'com.google.firebase:firebase-analytics:18.0.0'\n * or\n * apply plugin: 'com.google.gms.google-services'\n *\n * single and double quotes are both recognized\n */\nexport const gradle: CodeScanningConfig = {\n supportedFiles: ['build.gradle**'],\n ignoreDirs: [\n 'gradle-app.setting',\n 'gradle-wrapper.jar',\n 'gradle-wrapper.properties',\n ],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_REGEX, 'g'),\n matches: ['space', 'quote1', 'name', 'path', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetPlugins = findAllWithRegex(\n {\n value: new RegExp(GRADLE_PLUGIN_REGEX, 'g'),\n matches: ['quote1', 'name', 'group', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetGroups = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_GROUP_REGEX, 'g'),\n matches: [\n 'space1',\n 'quote1',\n 'group',\n 'quote2',\n 'space2',\n 'space3',\n 'quote3',\n 'name',\n 'quote4',\n 'space4',\n 'space5',\n 'quote5',\n 'version',\n 'quote6',\n ],\n },\n fileContents,\n );\n const applications = findAllWithRegex(\n {\n value: new RegExp(GRADLE_APPLICATION_NAME_REGEX, 'g'),\n matches: ['space', 'name'],\n },\n fileContents,\n );\n if (applications.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n\n return [\n {\n name: applications[0]?.name || directory.split('/').pop()!,\n softwareDevelopmentKits: [\n ...targets,\n ...targetGroups,\n ...targetPlugins,\n ].map((target) => ({\n name: target.name,\n version: target.version || undefined,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageSdk } from '../../../codecs';\nimport { dirname } from 'node:path';\n\nexport const javascriptPackageJson: CodeScanningConfig = {\n supportedFiles: ['package.json'],\n ignoreDirs: ['node_modules', 'serverless-build', 'lambda-build'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n dependencies = {},\n devDependencies = {},\n optionalDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(devDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ...Object.entries(optionalDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { listFiles } from '../../api-keys';\nimport { dirname, join } from 'node:path';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\nconst REQUIREMENTS_PACKAGE_MATCH = /(.+?)(=+)(.+)/;\nconst PACKAGE_NAME = /name *= *('|\")(.+?)('|\")/;\nconst PACKAGE_DESCRIPTION = /description *= *('|\")(.+?)('|\")/;\n\nexport const pythonRequirementsTxt: CodeScanningConfig = {\n supportedFiles: ['requirements.txt'],\n ignoreDirs: ['build', 'lib', 'lib64'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse setup file for name\n const setupFile = filesInFolder.find((file) => file === 'setup.py');\n const setupFileContents = setupFile\n ? readFileSync(join(directory, setupFile), 'utf-8')\n : undefined;\n const packageName = setupFileContents\n ? (PACKAGE_NAME.exec(setupFileContents) || [])[2]\n : undefined;\n const packageDescription = setupFileContents\n ? (PACKAGE_DESCRIPTION.exec(setupFileContents) || [])[2]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(REQUIREMENTS_PACKAGE_MATCH, 'g'),\n matches: ['name', 'equals', 'version'],\n },\n fileContents,\n );\n\n return [\n {\n name: packageName || directory.split('/').pop()!,\n description: packageDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\nimport { listFiles } from '../../api-keys';\nimport { dirname } from 'node:path';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\nconst GEM_PACKAGE_REGEX = /gem *('|\")(.+?)('|\")(, *('|\")(.+?)('|\")|)/;\nconst GEMFILE_PACKAGE_NAME_REGEX = /spec\\.name *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_DESCRIPTION_REGEX =\n /spec\\.description *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_SUMMARY_REGEX = /spec\\.summary *= *('|\")(.+?)('|\")/;\n\nexport const gemfile: CodeScanningConfig = {\n supportedFiles: ['Gemfile'],\n ignoreDirs: ['bin'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse gemspec file for name\n const gemspec = filesInFolder.find((file) => file === '.gemspec');\n const gemspecContents = gemspec\n ? readFileSync(gemspec, 'utf-8')\n : undefined;\n const gemfileName = gemspecContents\n ? (GEMFILE_PACKAGE_NAME_REGEX.exec(gemspecContents) || [])[2]\n : undefined;\n const gemfileDescription = gemspecContents\n ? (GEMFILE_PACKAGE_DESCRIPTION_REGEX.exec(gemspecContents) ||\n GEMFILE_PACKAGE_SUMMARY_REGEX.exec(gemspecContents) ||\n [])[1]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GEM_PACKAGE_REGEX, 'g'),\n matches: [\n 'quote1',\n 'name',\n 'quote2',\n 'hasVersion',\n 'quote3',\n 'version',\n 'quote4',\n ],\n },\n fileContents,\n );\n\n return [\n {\n name: gemfileName || directory.split('/').pop()!,\n description: gemfileDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport yaml from 'js-yaml';\nimport { dirname } from 'node:path';\n\n/**\n * Remove YAML comments from a string\n *\n * @param yamlString - YAML string\n * @returns String without comments\n */\nfunction removeYAMLComments(yamlString: string): string {\n return yamlString\n .split('\\n')\n .map((line) => {\n // Remove inline comments\n const commentIndex = line.indexOf('#');\n if (commentIndex > -1) {\n // Check if '#' is not inside a string\n if (\n !line.substring(0, commentIndex).includes('\"') &&\n !line.substring(0, commentIndex).includes(\"'\")\n ) {\n return line.substring(0, commentIndex).trim();\n }\n }\n return line;\n })\n .filter((line) => line.length > 0)\n .join('\\n');\n}\n\nexport const pubspec: CodeScanningConfig = {\n supportedFiles: ['pubspec.yml'],\n ignoreDirs: ['build'],\n scanFunction: (filePath) => {\n const directory = dirname(filePath);\n const fileContents = readFileSync(filePath, 'utf-8');\n const {\n name,\n description,\n dev_dependencies = {},\n dependencies = {},\n } = yaml.load(removeYAMLComments(fileContents)) as {\n /** Name */\n name?: string;\n /** Description */\n description?: string;\n /** Dev dependencies */\n dev_dependencies?: { [k in string]: number | Record<string, string> };\n /** Dependencies */\n dependencies?: { [k in string]: number | Record<string, string> };\n };\n return [\n {\n name: name || directory.split('/').pop()!,\n description,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n })),\n ...Object.entries(dev_dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n isDevDependency: true,\n })),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageSdk } from '../../../codecs';\nimport { dirname } from 'node:path';\n\nexport const composerJson: CodeScanningConfig = {\n supportedFiles: ['composer.json'],\n ignoreDirs: ['vendor', 'node_modules', 'cache', 'build', 'dist'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n require: requireDependencies = {},\n 'require-dev': requiredDevDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(requireDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(requiredDevDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { CodeScanningConfig } from '../types';\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport * as t from 'io-ts';\nimport { dirname } from 'node:path';\n\nconst SwiftPackage = t.type({\n pins: t.array(\n t.type({\n identity: t.string,\n kind: t.string,\n location: t.string,\n state: t.intersection([\n t.type({\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n version: t.number,\n});\n\nconst SwiftPackageV1 = t.type({\n object: t.type({\n pins: t.array(\n t.type({\n package: t.string,\n repositoryURL: t.string,\n state: t.intersection([\n t.type({\n branch: t.union([t.string, t.undefined, t.null]),\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n }),\n version: t.number,\n});\n\nexport const swift: CodeScanningConfig = {\n supportedFiles: ['Package.resolved'],\n ignoreDirs: [],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n // Attempt latest version first\n try {\n const parsed = decodeCodec(SwiftPackage, fileContents);\n const splitPath = dirname(filePath).split('/');\n const originalName = splitPath[splitPath.length - 1];\n let name = originalName;\n if (name === 'swiftpm') {\n name = splitPath[splitPath.length - 2];\n if (name === 'xcshareddata') {\n name = splitPath[splitPath.length - 3];\n } else if (!name) {\n name = originalName;\n }\n if (name === 'project.xcworkspace') {\n name = splitPath[splitPath.length - 4];\n }\n }\n return [\n {\n name,\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.pins.map((target) => ({\n name: target.identity,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e) {\n // Throw non codec errors\n if (!e?.message?.includes('Failed to decode codec')) {\n throw e;\n }\n\n // Attempt v1\n try {\n const parsed = decodeCodec(SwiftPackageV1, fileContents);\n return [\n {\n name: dirname(filePath).split('/').pop() || '', // TODO pull from Package.swift ->> name if possible\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.object.pins.map((target) => ({\n name: target.package,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e2) {\n if (!e2?.message?.includes('Failed to decode codec')) {\n throw e2;\n }\n throw e;\n }\n }\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { CodeScanningConfig } from '../types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\n/**\n * Kotlin DSL (build.gradle.kts) dependency & plugin parsing\n */\n\nconst KTS_DEP_CONFIGS =\n // eslint-disable-next-line max-len\n '(implementation|api|kapt|ksp|debugImplementation|releaseImplementation|androidTestImplementation|testImplementation|compileOnly|runtimeOnly)';\n\n// e.g. implementation(\"com.google.firebase:firebase-analytics:18.0.0\")\nconst KTS_DEP_STRING_COORDS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)`,\n 'g',\n);\n// captures: [1]=config, [2]=group, [3]=artifact, [4]=version (may be '')\n\n// e.g. implementation(platform(\"com.google.firebase:firebase-bom:33.1.2\"))\nconst KTS_DEP_PLATFORM_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*platform\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)\\\\s*\\\\)`,\n 'g',\n);\n\n// e.g. implementation(libs.androidx.appcompat) / implementation(libs[\"androidx-core-ktx\"])\nconst KTS_DEP_LIBS_ALIAS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*libs(?:\\\\.[\\\\w\\\\-\\\\.]+|\\\\[[\"'][^\"']+[\"']\\\\])\\\\s*\\\\)`,\n 'g',\n);\n\n// Plugins:\n// plugins { id(\"com.google.gms.google-services\") version \"4.4.2\" apply false }\n// plugins { id(\"org.jetbrains.kotlin.android\") }\n// apply(plugin = \"newrelic\")\n// plugins { alias(libs.plugins.kotlin.android) }\nconst KTS_PLUGIN_ID_REGEX =\n /id\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)(?:\\s*version\\s*[\"']([^\"']+)[\"'])?/g;\nconst KTS_PLUGIN_APPLY_REGEX =\n /apply\\s*\\(\\s*plugin\\s*=\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\nconst KTS_PLUGIN_ALIAS_REGEX =\n /plugins\\s*\\{[^}]*alias\\s*\\(\\s*libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\])\\s*\\)[^}]*\\}/g;\n\n// applicationId in Kotlin DSL:\n// applicationId = \"com.foo.bar\"\n// applicationId(\"com.foo.bar\")\nconst KTS_APPLICATION_ID_EQ_REGEX = /applicationId\\s*=\\s*[\"']([^\"']+)[\"']/g;\nconst KTS_APPLICATION_ID_CALL_REGEX =\n /applicationId\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\n/**\n * Input dep entry (partial)\n */\ntype DepInput = {\n /** Name of the dependency */\n name: string;\n /** Version of the dependency */\n version?: string;\n};\n\n/**\n * Helper to normalize a parsed dep entry\n *\n * @param name - name\n * @param version - version\n * @returns normalized entry\n */\nfunction depEntry(name: string, version?: string): DepInput {\n const v =\n version && version.trim().length > 0 && version !== '_'\n ? version.trim()\n : undefined;\n return { name, version: v };\n}\n\nexport const kotlin: CodeScanningConfig = {\n supportedFiles: ['**/build.gradle.kts', '**/*.gradle.kts'],\n ignoreDirs: [\n 'gradle-app.setting',\n 'gradle-wrapper.jar',\n 'gradle-wrapper.properties',\n ],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n // ---------- applicationId ----------\n const appIds = [\n ...findAllWithRegex(\n { value: KTS_APPLICATION_ID_EQ_REGEX, matches: ['name'] },\n fileContents,\n ),\n ...findAllWithRegex(\n { value: KTS_APPLICATION_ID_CALL_REGEX, matches: ['name'] },\n fileContents,\n ),\n ];\n if (appIds.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n const appName = appIds[0]?.name || directory.split('/').pop()!;\n\n // ---------- dependencies ----------\n const deps: Array<DepInput> = [];\n\n // \"group:artifact:version\"\n for (const m of fileContents.matchAll(KTS_DEP_STRING_COORDS_REGEX)) {\n const [, , group, artifact, version] = m;\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // platform(\"group:artifact:version\")\n for (const m of fileContents.matchAll(KTS_DEP_PLATFORM_REGEX)) {\n const [, , group, artifact, version] = m;\n // Record as regular coord (you may prefer to tag as BoM separately)\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // libs aliases (version catalogs) — keep alias as name, unknown version\n for (const m of fileContents.matchAll(KTS_DEP_LIBS_ALIAS_REGEX)) {\n // Grab the exact token as name (best-effort)\n const token = m[0]\n .replace(/^[^(]+\\(\\s*/, '')\n .replace(/\\)\\s*$/, '')\n .trim(); // e.g., libs.androidx.appcompat or libs[\"androidx-core-ktx\"]\n deps.push(depEntry(token));\n }\n\n // ---------- plugins ----------\n const plugins: Array<DepInput> = [];\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_ID_REGEX)) {\n const [, pid, pver] = m;\n plugins.push(depEntry(pid, pver));\n }\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_APPLY_REGEX)) {\n const [, pid] = m;\n plugins.push(depEntry(pid));\n }\n\n // alias(libs.plugins...) — keep alias token (no version)\n if (KTS_PLUGIN_ALIAS_REGEX.test(fileContents)) {\n // Collect all alias lines to preserve identifiers; light parse:\n const aliasMatches = fileContents.matchAll(\n /alias\\s*\\(\\s*(libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\]))\\s*\\)/g,\n );\n for (const m of aliasMatches) {\n plugins.push(depEntry(m[1]));\n }\n }\n\n // ---------- compose final list ----------\n // Merge deps + plugins as \"softwareDevelopmentKits\"\n const softwareDevelopmentKits = [...deps, ...plugins]\n // de-dup by name+version\n .reduce(\n (acc, cur) => {\n const key = `${cur.name}@@${cur.version || ''}`;\n if (!acc.map.has(key)) {\n acc.map.set(key, cur);\n acc.list.push(cur);\n }\n return acc;\n },\n {\n map: new Map<string, DepInput>(),\n list: [] as Array<DepInput>,\n },\n ).list;\n\n return [\n {\n name: appName,\n softwareDevelopmentKits,\n },\n ];\n },\n};\n","import { CodeScanningConfig } from './types';\nimport {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n gemfile,\n composerJson,\n pubspec,\n swift,\n kotlin,\n pythonRequirementsTxt,\n} from './integrations';\nimport { CodePackageType } from '@transcend-io/privacy-types';\n\n/**\n * @deprecated TODO: https://transcend.height.app/T-32325 - use code scanning instead\n */\nexport const SILO_DISCOVERY_CONFIGS: {\n [k in string]: CodeScanningConfig;\n} = {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n pythonRequirementsTxt,\n gemfile,\n pubspec,\n swift,\n};\n\nexport const CODE_SCANNING_CONFIGS: {\n [k in CodePackageType]: CodeScanningConfig;\n} = {\n [CodePackageType.CocoaPods]: cocoaPods,\n [CodePackageType.Gradle]: gradle,\n [CodePackageType.PackageJson]: javascriptPackageJson,\n [CodePackageType.RequirementsTxt]: pythonRequirementsTxt,\n [CodePackageType.Gemfile]: gemfile,\n [CodePackageType.Pubspec]: pubspec,\n [CodePackageType.ComposerJson]: composerJson,\n [CodePackageType.Swift]: swift,\n [CodePackageType.Kotlin]: kotlin,\n};\n","import fastGlob from 'fast-glob';\nimport colors from 'colors';\nimport { CodePackageInput } from '../../codecs';\nimport { getEntries } from '@transcend-io/type-utils';\nimport { CODE_SCANNING_CONFIGS } from './constants';\nimport { logger } from '../../logger';\n\n/**\n * Helper to scan and discovery all of the code packages within a folder\n *\n * @param options - Options\n * @returns the list of integrations\n */\nexport async function findCodePackagesInFolder({\n scanPath,\n ignoreDirs = [],\n repositoryName,\n}: {\n /** The name of the github repository reporting packages for */\n repositoryName: string;\n /** Where to look for package.json files */\n scanPath: string;\n /** The directories to ignore (excludes node_modules and serverless-build) */\n ignoreDirs?: string[];\n}): Promise<CodePackageInput[]> {\n const allCodePackages = await Promise.all(\n getEntries(CODE_SCANNING_CONFIGS).map(async ([codePackageType, config]) => {\n const {\n ignoreDirs: configIgnoreDirs,\n supportedFiles,\n scanFunction,\n } = config;\n const dirsToIgnore = [...ignoreDirs, ...configIgnoreDirs].filter(\n (dir) => dir.length > 0,\n );\n try {\n const filesToScan: string[] = await fastGlob(\n `${scanPath}/**/${supportedFiles.join('|')}`,\n {\n ignore: dirsToIgnore.map((dir: string) => `${scanPath}/**/${dir}`),\n unique: true,\n onlyFiles: true,\n },\n );\n logger.info(\n colors.magenta(\n `Scanning: ${filesToScan.length} files of type ${codePackageType}`,\n ),\n );\n const allPackages = filesToScan\n .map((filePath) =>\n scanFunction(filePath).map((result) => ({\n ...result,\n relativePath: filePath.replace(`${scanPath}/`, ''),\n })),\n )\n .flat();\n logger.info(\n colors.green(\n `Found: ${allPackages.length} packages and ${\n allPackages\n .map(\n ({ softwareDevelopmentKits = [] }) => softwareDevelopmentKits,\n )\n .flat().length\n } sdks`,\n ),\n );\n\n return allPackages.map(\n (pkg): CodePackageInput => ({\n ...pkg,\n type: codePackageType,\n repositoryName,\n }),\n );\n } catch (error) {\n throw new Error(\n `Error scanning globs ${supportedFiles} with error: ${error}`,\n );\n }\n }),\n );\n\n return allCodePackages.flat();\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const e=require(`./enums-CBXlBJii.cjs`),t=require(`./constants-BD9ZSD52.cjs`);let n=require(`@stricli/core`),r=require(`@transcend-io/privacy-types`),i=require(`ms`);i=e.s(i);function a(e){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e))throw Error(`Invalid UUID format: ${e}`);return e}function o(e){try{return new URL(e).toString().replace(/\/$/,``)}catch{throw Error(`Invalid URL format: ${e}`)}}function s(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function c(e){let t=new Date(e);if(Number.isNaN(t.getTime()))throw TypeError(`Invalid date: ${e}. Try using the ISO 8601 format (YYYY-MM-DDTHH:MM:SS.SSSZ)`);return t}function l(e){if(typeof e==`number`&&Number.isFinite(e))return Math.round(e*1e3);if(typeof e==`string`){let t=e.trim();if(t===``)throw Error(`Invalid duration. Examples: "45", "2d", "1h", "90 minutes", "10s".`);let n=Number(t);if(t!==``&&Number.isFinite(n))return Math.round(n*1e3);let r;try{r=(0,i.default)(t)}catch{throw Error(`Invalid duration. Examples: "45", "2d", "1h", "90 minutes", "10s".`)}if(typeof r==`number`&&Number.isFinite(r))return r}throw Error(`Invalid duration. Examples: "45", "2d", "1h", "90 minutes", "10s".`)}const u=({scopes:e,requiresSiloScope:t=!1})=>{let n={kind:`parsed`,parse:String,brief:`The Transcend API key.`};return t&&(n.brief+=` This key must be associated with the data silo(s) being operated on.`),e===`Varies`?{...n,brief:`${n.brief} The scopes required will vary depending on the operation performed. If in doubt, the ${r.TRANSCEND_SCOPES[r.ScopeName.FullAdmin].title} scope will always work.`}:e.length===0?{...n,brief:`${n.brief} No scopes are required for this command.`}:{...n,brief:`${n.brief} Requires scopes: ${e.map(e=>`"${r.TRANSCEND_SCOPES[e].title}"`).join(`, `)}`}},d=(e=t.a)=>({kind:`parsed`,parse:o,brief:`URL of the Transcend backend. Use https://api.us.transcend.io for US hosting`,default:e}),f=(e=t.o)=>({kind:`parsed`,parse:o,brief:`URL of the Transcend consent backend. Use https://consent.us.transcend.io for US hosting`,default:e}),p=()=>({kind:`parsed`,parse:String,brief:`The Sombra internal key, use for additional authentication when self-hosting Sombra`,optional:!0}),m=[e.o.DataSilos,e.o.Enrichers,e.o.Templates,e.o.ApiKeys],h=Object.values(r.ConsentTrackerStatus),g=(0,n.buildCommand)({loader:async()=>{let{pull:e}=await Promise.resolve().then(()=>require(`./impl-oR9gq6xk.cjs`));return e},parameters:{flags:{auth:u({scopes:`Varies`}),resources:{kind:`enum`,values:[`all`,...Object.values(e.o)],brief:`The different resource types to pull in. Defaults to ${m.join(`,`)}.`,variadic:`,`,optional:!0},file:{kind:`parsed`,parse:String,brief:`Path to the YAML file to pull into`,default:`./transcend.yml`},transcendUrl:d(),dataSiloIds:{kind:`parsed`,parse:String,variadic:`,`,brief:`The UUIDs of the data silos that should be pulled into the YAML file`,optional:!0},integrationNames:{kind:`parsed`,parse:String,variadic:`,`,brief:`The types of integrations to pull down`,optional:!0},trackerStatuses:{kind:`enum`,values:Object.values(r.ConsentTrackerStatus),variadic:`,`,brief:`The statuses of consent manager trackers to pull down. Defaults to all statuses.`,optional:!0},pageSize:{kind:`parsed`,parse:n.numberParser,brief:`The page size to use when paginating over the API`,default:`50`},skipDatapoints:{kind:`boolean`,brief:`When true, skip pulling in datapoints alongside data silo resource`,default:!1},skipSubDatapoints:{kind:`boolean`,brief:`When true, skip pulling in subDatapoints alongside data silo resource`,default:!1},includeGuessedCategories:{kind:`boolean`,brief:`When true, included guessed data categories that came from the content classifier`,default:!1},debug:{kind:`boolean`,brief:`Set to true to include debug logs while pulling the configuration`,default:!1}}},docs:{brief:`Pull metadata from Transcend into transcend.yml`,fullDescription:`Generates a transcend.yml by pulling the configuration from your Transcend instance.
1
+ const e=require(`./enums-CBXlBJii.cjs`),t=require(`./constants-B-TmLA0w.cjs`);let n=require(`@stricli/core`),r=require(`@transcend-io/privacy-types`),i=require(`ms`);i=e.s(i);function a(e){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e))throw Error(`Invalid UUID format: ${e}`);return e}function o(e){try{return new URL(e).toString().replace(/\/$/,``)}catch{throw Error(`Invalid URL format: ${e}`)}}function s(e){return e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}function c(e){let t=new Date(e);if(Number.isNaN(t.getTime()))throw TypeError(`Invalid date: ${e}. Try using the ISO 8601 format (YYYY-MM-DDTHH:MM:SS.SSSZ)`);return t}function l(e){if(typeof e==`number`&&Number.isFinite(e))return Math.round(e*1e3);if(typeof e==`string`){let t=e.trim();if(t===``)throw Error(`Invalid duration. Examples: "45", "2d", "1h", "90 minutes", "10s".`);let n=Number(t);if(t!==``&&Number.isFinite(n))return Math.round(n*1e3);let r;try{r=(0,i.default)(t)}catch{throw Error(`Invalid duration. Examples: "45", "2d", "1h", "90 minutes", "10s".`)}if(typeof r==`number`&&Number.isFinite(r))return r}throw Error(`Invalid duration. Examples: "45", "2d", "1h", "90 minutes", "10s".`)}const u=({scopes:e,requiresSiloScope:t=!1})=>{let n={kind:`parsed`,parse:String,brief:`The Transcend API key.`};return t&&(n.brief+=` This key must be associated with the data silo(s) being operated on.`),e===`Varies`?{...n,brief:`${n.brief} The scopes required will vary depending on the operation performed. If in doubt, the ${r.TRANSCEND_SCOPES[r.ScopeName.FullAdmin].title} scope will always work.`}:e.length===0?{...n,brief:`${n.brief} No scopes are required for this command.`}:{...n,brief:`${n.brief} Requires scopes: ${e.map(e=>`"${r.TRANSCEND_SCOPES[e].title}"`).join(`, `)}`}},d=(e=t.a)=>({kind:`parsed`,parse:o,brief:`URL of the Transcend backend. Use https://api.us.transcend.io for US hosting`,default:e}),f=(e=t.o)=>({kind:`parsed`,parse:o,brief:`URL of the Transcend consent backend. Use https://consent.us.transcend.io for US hosting`,default:e}),p=()=>({kind:`parsed`,parse:String,brief:`The Sombra internal key, use for additional authentication when self-hosting Sombra`,optional:!0}),m=[e.o.DataSilos,e.o.Enrichers,e.o.Templates,e.o.ApiKeys],h=Object.values(r.ConsentTrackerStatus),g=(0,n.buildCommand)({loader:async()=>{let{pull:e}=await Promise.resolve().then(()=>require(`./impl-Cc-Lfiig.cjs`));return e},parameters:{flags:{auth:u({scopes:`Varies`}),resources:{kind:`enum`,values:[`all`,...Object.values(e.o)],brief:`The different resource types to pull in. Defaults to ${m.join(`,`)}.`,variadic:`,`,optional:!0},file:{kind:`parsed`,parse:String,brief:`Path to the YAML file to pull into`,default:`./transcend.yml`},transcendUrl:d(),dataSiloIds:{kind:`parsed`,parse:String,variadic:`,`,brief:`The UUIDs of the data silos that should be pulled into the YAML file`,optional:!0},integrationNames:{kind:`parsed`,parse:String,variadic:`,`,brief:`The types of integrations to pull down`,optional:!0},trackerStatuses:{kind:`enum`,values:Object.values(r.ConsentTrackerStatus),variadic:`,`,brief:`The statuses of consent manager trackers to pull down. Defaults to all statuses.`,optional:!0},pageSize:{kind:`parsed`,parse:n.numberParser,brief:`The page size to use when paginating over the API`,default:`50`},skipDatapoints:{kind:`boolean`,brief:`When true, skip pulling in datapoints alongside data silo resource`,default:!1},skipSubDatapoints:{kind:`boolean`,brief:`When true, skip pulling in subDatapoints alongside data silo resource`,default:!1},includeGuessedCategories:{kind:`boolean`,brief:`When true, included guessed data categories that came from the content classifier`,default:!1},debug:{kind:`boolean`,brief:`Set to true to include debug logs while pulling the configuration`,default:!1}}},docs:{brief:`Pull metadata from Transcend into transcend.yml`,fullDescription:`Generates a transcend.yml by pulling the configuration from your Transcend instance.
2
2
 
3
3
  The API key needs various scopes depending on the resources being pulled (see the CLI's README for more details).
4
4
 
@@ -6,4 +6,4 @@ This command can be helpful if you are looking to:
6
6
 
7
7
  - Copy your data into another instance
8
8
  - Generate a transcend.yml file as a starting point to maintain parts of your data inventory in code.`}});Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return l}});
9
- //# sourceMappingURL=command-D5Fq3lQQ.cjs.map
9
+ //# sourceMappingURL=command-3fhEz5PC.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-D5Fq3lQQ.cjs","names":["TRANSCEND_SCOPES","ScopeName","DEFAULT_TRANSCEND_API","DEFAULT_TRANSCEND_CONSENT_API","TranscendPullResource","ConsentTrackerStatus","numberParser"],"sources":["../src/lib/cli/parsers.ts","../src/lib/cli/common-parameters.ts","../src/commands/inventory/pull/command.ts"],"sourcesContent":["import ms, { type StringValue as MsStringValue } from 'ms';\n\n/**\n * Validates and returns a UUID string.\n *\n * @param input - The input string to validate as UUID\n * @returns The validated UUID string\n * @throws Error if input is not a valid UUID\n */\nexport function uuidParser(input: string): string {\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(input)) {\n throw new Error(`Invalid UUID format: ${input}`);\n }\n return input;\n}\n\n/**\n * Validates and returns a URL string.\n *\n * @param input - The input string to validate as URL\n * @returns The validated URL string\n * @throws Error if input is not a valid URL\n */\nexport function urlParser(input: string): string {\n try {\n const url = new URL(input);\n return url.toString().replace(/\\/$/, '');\n } catch {\n throw new Error(`Invalid URL format: ${input}`);\n }\n}\n\n/**\n * Parse a comma-separated string to array.\n * NOTE: Prefer using `variadic` for list arguments instead of this function. This should only be used for arguments which have a default value.\n *\n * @param input - The comma-separated string to parse\n * @returns Array of trimmed, non-empty strings\n */\nexport function arrayParser(input: string): string[] {\n return input\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n}\n\n/**\n * Parse a date string to a Date object.\n *\n * @param input - The date string to parse\n * @returns The parsed Date object\n * @throws TypeError if input is not a valid date\n */\nexport function dateParser(input: string): Date {\n const date = new Date(input);\n if (Number.isNaN(date.getTime())) {\n throw new TypeError(\n `Invalid date: ${input}. Try using the ISO 8601 format (YYYY-MM-DDTHH:MM:SS.SSSZ)`,\n );\n }\n return date;\n}\n\n/**\n * Parse a duration string to milliseconds.\n * Accepts concise/natural-ish strings (powered by `ms`) and returns milliseconds.\n * Examples: \"3600\", \"2d\", \"1h\", \"90 minutes\", \"10s\".\n *\n * @param input - The duration to parse\n * @returns The parsed duration in milliseconds\n * @throws Error if input is not a valid duration\n */\nexport function parseDurationToMs(input: unknown): number {\n if (typeof input === 'number' && Number.isFinite(input)) {\n // backward-compat: numbers => seconds\n return Math.round(input * 1000);\n }\n\n if (typeof input === 'string') {\n const trimmed = input.trim();\n // empty string → our standardized error (avoid ms throwing its own)\n if (trimmed === '') {\n throw new Error(\n 'Invalid duration. Examples: \"45\", \"2d\", \"1h\", \"90 minutes\", \"10s\".',\n );\n }\n\n // bare numeric string => seconds (backward-compat)\n const asNumber = Number(trimmed);\n if (trimmed !== '' && Number.isFinite(asNumber)) {\n return Math.round(asNumber * 1000);\n }\n\n // let ms parse human strings\n let parsed: number | undefined;\n try {\n parsed = ms(trimmed as MsStringValue);\n } catch {\n // normalize ms' error to ours\n throw new Error(\n 'Invalid duration. Examples: \"45\", \"2d\", \"1h\", \"90 minutes\", \"10s\".',\n );\n }\n if (typeof parsed === 'number' && Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n throw new Error(\n 'Invalid duration. Examples: \"45\", \"2d\", \"1h\", \"90 minutes\", \"10s\".',\n );\n}\n","import { ScopeName, TRANSCEND_SCOPES } from '@transcend-io/privacy-types';\nimport { urlParser } from './parsers';\nimport {\n DEFAULT_TRANSCEND_API,\n DEFAULT_TRANSCEND_CONSENT_API,\n} from '../../constants';\nimport type { LocalContext } from '../../context';\nimport type { TypedFlagParameter } from '@stricli/core';\n\n/**\n * Common parameter builders for CLI commands\n * These reduce duplication and ensure consistency across commands\n */\n\n/**\n * Creates a standard authentication parameter\n *\n * @param root0 - The scopes and whether it requires a silo scope\n * @returns The parameter object\n */\nexport const createAuthParameter = ({\n scopes,\n requiresSiloScope = false,\n}: {\n /** The scopes required for the command */\n scopes: ScopeName[] | 'Varies';\n /** Whether the command requires a silo scope */\n requiresSiloScope?: boolean;\n}): TypedFlagParameter<string, LocalContext> => {\n const parameter = {\n kind: 'parsed' as const,\n parse: String,\n brief: 'The Transcend API key.',\n };\n\n if (requiresSiloScope) {\n parameter.brief +=\n ' This key must be associated with the data silo(s) being operated on.';\n }\n\n if (scopes === 'Varies') {\n return {\n ...parameter,\n brief: `${\n parameter.brief\n } The scopes required will vary depending on the operation performed. If in doubt, the ${\n TRANSCEND_SCOPES[ScopeName.FullAdmin].title\n } scope will always work.`,\n };\n }\n\n if (scopes.length === 0) {\n return {\n ...parameter,\n brief: `${parameter.brief} No scopes are required for this command.`,\n };\n }\n\n return {\n ...parameter,\n brief: `${parameter.brief} Requires scopes: ${scopes\n .map((s) => `\"${TRANSCEND_SCOPES[s].title}\"`)\n .join(', ')}`,\n };\n};\n\n/**\n * Creates a standard Transcend URL parameter\n *\n * @param defaultUrl - The default URL to use if not provided\n * @returns The parameter object\n */\nexport const createTranscendUrlParameter = (\n defaultUrl = DEFAULT_TRANSCEND_API,\n): TypedFlagParameter<string, LocalContext> => ({\n kind: 'parsed',\n parse: urlParser,\n brief:\n 'URL of the Transcend backend. Use https://api.us.transcend.io for US hosting',\n default: defaultUrl,\n});\n\n/**\n * Creates a standard Consent URL parameter\n *\n * @param defaultUrl - The default URL to use if not provided\n * @returns The parameter object\n */\nexport const createConsentUrlParameter = (\n defaultUrl = DEFAULT_TRANSCEND_CONSENT_API,\n): TypedFlagParameter<string, LocalContext> => ({\n kind: 'parsed',\n parse: urlParser,\n brief:\n 'URL of the Transcend consent backend. Use https://consent.us.transcend.io for US hosting',\n default: defaultUrl,\n});\n\n/**\n * Creates a standard Sombra authentication parameter\n *\n * @returns The parameter object\n */\nexport const createSombraAuthParameter = (): TypedFlagParameter<\n string | undefined,\n LocalContext\n> => ({\n kind: 'parsed',\n parse: String,\n brief:\n 'The Sombra internal key, use for additional authentication when self-hosting Sombra',\n optional: true,\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { TranscendPullResource } from '../../../enums';\n\nexport const DEFAULT_TRANSCEND_PULL_RESOURCES = [\n TranscendPullResource.DataSilos,\n TranscendPullResource.Enrichers,\n TranscendPullResource.Templates,\n TranscendPullResource.ApiKeys,\n];\n\nexport const DEFAULT_CONSENT_TRACKER_STATUSES =\n Object.values(ConsentTrackerStatus);\n\nexport const pullCommand = buildCommand({\n loader: async () => {\n const { pull } = await import('./impl');\n return pull;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: 'Varies',\n }),\n resources: {\n kind: 'enum',\n values: ['all', ...Object.values(TranscendPullResource)],\n brief: `The different resource types to pull in. Defaults to ${DEFAULT_TRANSCEND_PULL_RESOURCES.join(\n ',',\n )}.`,\n variadic: ',',\n optional: true,\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the YAML file to pull into',\n default: './transcend.yml',\n },\n transcendUrl: createTranscendUrlParameter(),\n dataSiloIds: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief:\n 'The UUIDs of the data silos that should be pulled into the YAML file',\n optional: true,\n },\n integrationNames: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'The types of integrations to pull down',\n optional: true,\n },\n trackerStatuses: {\n kind: 'enum',\n values: Object.values(ConsentTrackerStatus),\n variadic: ',',\n brief:\n 'The statuses of consent manager trackers to pull down. Defaults to all statuses.',\n optional: true,\n },\n pageSize: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The page size to use when paginating over the API',\n default: '50',\n },\n skipDatapoints: {\n kind: 'boolean',\n brief:\n 'When true, skip pulling in datapoints alongside data silo resource',\n default: false,\n },\n skipSubDatapoints: {\n kind: 'boolean',\n brief:\n 'When true, skip pulling in subDatapoints alongside data silo resource',\n default: false,\n },\n includeGuessedCategories: {\n kind: 'boolean',\n brief:\n 'When true, included guessed data categories that came from the content classifier',\n default: false,\n },\n debug: {\n kind: 'boolean',\n brief:\n 'Set to true to include debug logs while pulling the configuration',\n default: false,\n },\n },\n },\n docs: {\n brief: 'Pull metadata from Transcend into transcend.yml',\n fullDescription: `Generates a transcend.yml by pulling the configuration from your Transcend instance.\n\nThe API key needs various scopes depending on the resources being pulled (see the CLI's README for more details).\n\nThis command can be helpful if you are looking to:\n\n- Copy your data into another instance\n- Generate a transcend.yml file as a starting point to maintain parts of your data inventory in code.`,\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-3fhEz5PC.cjs","names":["TRANSCEND_SCOPES","ScopeName","DEFAULT_TRANSCEND_API","DEFAULT_TRANSCEND_CONSENT_API","TranscendPullResource","ConsentTrackerStatus","numberParser"],"sources":["../src/lib/cli/parsers.ts","../src/lib/cli/common-parameters.ts","../src/commands/inventory/pull/command.ts"],"sourcesContent":["import ms, { type StringValue as MsStringValue } from 'ms';\n\n/**\n * Validates and returns a UUID string.\n *\n * @param input - The input string to validate as UUID\n * @returns The validated UUID string\n * @throws Error if input is not a valid UUID\n */\nexport function uuidParser(input: string): string {\n const uuidRegex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(input)) {\n throw new Error(`Invalid UUID format: ${input}`);\n }\n return input;\n}\n\n/**\n * Validates and returns a URL string.\n *\n * @param input - The input string to validate as URL\n * @returns The validated URL string\n * @throws Error if input is not a valid URL\n */\nexport function urlParser(input: string): string {\n try {\n const url = new URL(input);\n return url.toString().replace(/\\/$/, '');\n } catch {\n throw new Error(`Invalid URL format: ${input}`);\n }\n}\n\n/**\n * Parse a comma-separated string to array.\n * NOTE: Prefer using `variadic` for list arguments instead of this function. This should only be used for arguments which have a default value.\n *\n * @param input - The comma-separated string to parse\n * @returns Array of trimmed, non-empty strings\n */\nexport function arrayParser(input: string): string[] {\n return input\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n}\n\n/**\n * Parse a date string to a Date object.\n *\n * @param input - The date string to parse\n * @returns The parsed Date object\n * @throws TypeError if input is not a valid date\n */\nexport function dateParser(input: string): Date {\n const date = new Date(input);\n if (Number.isNaN(date.getTime())) {\n throw new TypeError(\n `Invalid date: ${input}. Try using the ISO 8601 format (YYYY-MM-DDTHH:MM:SS.SSSZ)`,\n );\n }\n return date;\n}\n\n/**\n * Parse a duration string to milliseconds.\n * Accepts concise/natural-ish strings (powered by `ms`) and returns milliseconds.\n * Examples: \"3600\", \"2d\", \"1h\", \"90 minutes\", \"10s\".\n *\n * @param input - The duration to parse\n * @returns The parsed duration in milliseconds\n * @throws Error if input is not a valid duration\n */\nexport function parseDurationToMs(input: unknown): number {\n if (typeof input === 'number' && Number.isFinite(input)) {\n // backward-compat: numbers => seconds\n return Math.round(input * 1000);\n }\n\n if (typeof input === 'string') {\n const trimmed = input.trim();\n // empty string → our standardized error (avoid ms throwing its own)\n if (trimmed === '') {\n throw new Error(\n 'Invalid duration. Examples: \"45\", \"2d\", \"1h\", \"90 minutes\", \"10s\".',\n );\n }\n\n // bare numeric string => seconds (backward-compat)\n const asNumber = Number(trimmed);\n if (trimmed !== '' && Number.isFinite(asNumber)) {\n return Math.round(asNumber * 1000);\n }\n\n // let ms parse human strings\n let parsed: number | undefined;\n try {\n parsed = ms(trimmed as MsStringValue);\n } catch {\n // normalize ms' error to ours\n throw new Error(\n 'Invalid duration. Examples: \"45\", \"2d\", \"1h\", \"90 minutes\", \"10s\".',\n );\n }\n if (typeof parsed === 'number' && Number.isFinite(parsed)) {\n return parsed;\n }\n }\n\n throw new Error(\n 'Invalid duration. Examples: \"45\", \"2d\", \"1h\", \"90 minutes\", \"10s\".',\n );\n}\n","import { ScopeName, TRANSCEND_SCOPES } from '@transcend-io/privacy-types';\nimport { urlParser } from './parsers';\nimport {\n DEFAULT_TRANSCEND_API,\n DEFAULT_TRANSCEND_CONSENT_API,\n} from '../../constants';\nimport type { LocalContext } from '../../context';\nimport type { TypedFlagParameter } from '@stricli/core';\n\n/**\n * Common parameter builders for CLI commands\n * These reduce duplication and ensure consistency across commands\n */\n\n/**\n * Creates a standard authentication parameter\n *\n * @param root0 - The scopes and whether it requires a silo scope\n * @returns The parameter object\n */\nexport const createAuthParameter = ({\n scopes,\n requiresSiloScope = false,\n}: {\n /** The scopes required for the command */\n scopes: ScopeName[] | 'Varies';\n /** Whether the command requires a silo scope */\n requiresSiloScope?: boolean;\n}): TypedFlagParameter<string, LocalContext> => {\n const parameter = {\n kind: 'parsed' as const,\n parse: String,\n brief: 'The Transcend API key.',\n };\n\n if (requiresSiloScope) {\n parameter.brief +=\n ' This key must be associated with the data silo(s) being operated on.';\n }\n\n if (scopes === 'Varies') {\n return {\n ...parameter,\n brief: `${\n parameter.brief\n } The scopes required will vary depending on the operation performed. If in doubt, the ${\n TRANSCEND_SCOPES[ScopeName.FullAdmin].title\n } scope will always work.`,\n };\n }\n\n if (scopes.length === 0) {\n return {\n ...parameter,\n brief: `${parameter.brief} No scopes are required for this command.`,\n };\n }\n\n return {\n ...parameter,\n brief: `${parameter.brief} Requires scopes: ${scopes\n .map((s) => `\"${TRANSCEND_SCOPES[s].title}\"`)\n .join(', ')}`,\n };\n};\n\n/**\n * Creates a standard Transcend URL parameter\n *\n * @param defaultUrl - The default URL to use if not provided\n * @returns The parameter object\n */\nexport const createTranscendUrlParameter = (\n defaultUrl = DEFAULT_TRANSCEND_API,\n): TypedFlagParameter<string, LocalContext> => ({\n kind: 'parsed',\n parse: urlParser,\n brief:\n 'URL of the Transcend backend. Use https://api.us.transcend.io for US hosting',\n default: defaultUrl,\n});\n\n/**\n * Creates a standard Consent URL parameter\n *\n * @param defaultUrl - The default URL to use if not provided\n * @returns The parameter object\n */\nexport const createConsentUrlParameter = (\n defaultUrl = DEFAULT_TRANSCEND_CONSENT_API,\n): TypedFlagParameter<string, LocalContext> => ({\n kind: 'parsed',\n parse: urlParser,\n brief:\n 'URL of the Transcend consent backend. Use https://consent.us.transcend.io for US hosting',\n default: defaultUrl,\n});\n\n/**\n * Creates a standard Sombra authentication parameter\n *\n * @returns The parameter object\n */\nexport const createSombraAuthParameter = (): TypedFlagParameter<\n string | undefined,\n LocalContext\n> => ({\n kind: 'parsed',\n parse: String,\n brief:\n 'The Sombra internal key, use for additional authentication when self-hosting Sombra',\n optional: true,\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { TranscendPullResource } from '../../../enums';\n\nexport const DEFAULT_TRANSCEND_PULL_RESOURCES = [\n TranscendPullResource.DataSilos,\n TranscendPullResource.Enrichers,\n TranscendPullResource.Templates,\n TranscendPullResource.ApiKeys,\n];\n\nexport const DEFAULT_CONSENT_TRACKER_STATUSES =\n Object.values(ConsentTrackerStatus);\n\nexport const pullCommand = buildCommand({\n loader: async () => {\n const { pull } = await import('./impl');\n return pull;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: 'Varies',\n }),\n resources: {\n kind: 'enum',\n values: ['all', ...Object.values(TranscendPullResource)],\n brief: `The different resource types to pull in. Defaults to ${DEFAULT_TRANSCEND_PULL_RESOURCES.join(\n ',',\n )}.`,\n variadic: ',',\n optional: true,\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the YAML file to pull into',\n default: './transcend.yml',\n },\n transcendUrl: createTranscendUrlParameter(),\n dataSiloIds: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief:\n 'The UUIDs of the data silos that should be pulled into the YAML file',\n optional: true,\n },\n integrationNames: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'The types of integrations to pull down',\n optional: true,\n },\n trackerStatuses: {\n kind: 'enum',\n values: Object.values(ConsentTrackerStatus),\n variadic: ',',\n brief:\n 'The statuses of consent manager trackers to pull down. Defaults to all statuses.',\n optional: true,\n },\n pageSize: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The page size to use when paginating over the API',\n default: '50',\n },\n skipDatapoints: {\n kind: 'boolean',\n brief:\n 'When true, skip pulling in datapoints alongside data silo resource',\n default: false,\n },\n skipSubDatapoints: {\n kind: 'boolean',\n brief:\n 'When true, skip pulling in subDatapoints alongside data silo resource',\n default: false,\n },\n includeGuessedCategories: {\n kind: 'boolean',\n brief:\n 'When true, included guessed data categories that came from the content classifier',\n default: false,\n },\n debug: {\n kind: 'boolean',\n brief:\n 'Set to true to include debug logs while pulling the configuration',\n default: false,\n },\n },\n },\n docs: {\n brief: 'Pull metadata from Transcend into transcend.yml',\n fullDescription: `Generates a transcend.yml by pulling the configuration from your Transcend instance.\n\nThe API key needs various scopes depending on the resources being pulled (see the CLI's README for more details).\n\nThis command can be helpful if you are looking to:\n\n- Copy your data into another instance\n- Generate a transcend.yml file as a starting point to maintain parts of your data inventory in code.`,\n },\n});\n"],"mappings":"+KASA,SAAgB,EAAW,EAAuB,CAGhD,GAAI,CADF,6EACa,KAAK,EAAM,CACxB,MAAU,MAAM,wBAAwB,IAAQ,CAElD,OAAO,EAUT,SAAgB,EAAU,EAAuB,CAC/C,GAAI,CAEF,OADY,IAAI,IAAI,EAAM,CACf,UAAU,CAAC,QAAQ,MAAO,GAAG,MAClC,CACN,MAAU,MAAM,uBAAuB,IAAQ,EAWnD,SAAgB,EAAY,EAAyB,CACnD,OAAO,EACJ,MAAM,IAAI,CACV,IAAK,GAAM,EAAE,MAAM,CAAC,CACpB,OAAQ,GAAM,EAAE,OAAS,EAAE,CAUhC,SAAgB,EAAW,EAAqB,CAC9C,IAAM,EAAO,IAAI,KAAK,EAAM,CAC5B,GAAI,OAAO,MAAM,EAAK,SAAS,CAAC,CAC9B,MAAU,UACR,iBAAiB,EAAM,4DACxB,CAEH,OAAO,EAYT,SAAgB,EAAkB,EAAwB,CACxD,GAAI,OAAO,GAAU,UAAY,OAAO,SAAS,EAAM,CAErD,OAAO,KAAK,MAAM,EAAQ,IAAK,CAGjC,GAAI,OAAO,GAAU,SAAU,CAC7B,IAAM,EAAU,EAAM,MAAM,CAE5B,GAAI,IAAY,GACd,MAAU,MACR,qEACD,CAIH,IAAM,EAAW,OAAO,EAAQ,CAChC,GAAI,IAAY,IAAM,OAAO,SAAS,EAAS,CAC7C,OAAO,KAAK,MAAM,EAAW,IAAK,CAIpC,IAAI,EACJ,GAAI,CACF,GAAA,EAAA,EAAA,SAAY,EAAyB,MAC/B,CAEN,MAAU,MACR,qEACD,CAEH,GAAI,OAAO,GAAW,UAAY,OAAO,SAAS,EAAO,CACvD,OAAO,EAIX,MAAU,MACR,qEACD,CC5FH,MAAa,GAAuB,CAClC,SACA,oBAAoB,MAM0B,CAC9C,IAAM,EAAY,CAChB,KAAM,SACN,MAAO,OACP,MAAO,yBACR,CAyBD,OAvBI,IACF,EAAU,OACR,yEAGA,IAAW,SACN,CACL,GAAG,EACH,MAAO,GACL,EAAU,MACX,wFACCA,EAAAA,iBAAiBC,EAAAA,UAAU,WAAW,MACvC,0BACF,CAGC,EAAO,SAAW,EACb,CACL,GAAG,EACH,MAAO,GAAG,EAAU,MAAM,2CAC3B,CAGI,CACL,GAAG,EACH,MAAO,GAAG,EAAU,MAAM,oBAAoB,EAC3C,IAAK,GAAM,IAAID,EAAAA,iBAAiB,GAAG,MAAM,GAAG,CAC5C,KAAK,KAAK,GACd,EASU,GACX,EAAaE,EAAAA,KACiC,CAC9C,KAAM,SACN,MAAO,EACP,MACE,+EACF,QAAS,EACV,EAQY,GACX,EAAaC,EAAAA,KACiC,CAC9C,KAAM,SACN,MAAO,EACP,MACE,2FACF,QAAS,EACV,EAOY,OAGP,CACJ,KAAM,SACN,MAAO,OACP,MACE,sFACF,SAAU,GACX,ECxGY,EAAmC,CAC9CC,EAAAA,EAAsB,UACtBA,EAAAA,EAAsB,UACtBA,EAAAA,EAAsB,UACtBA,EAAAA,EAAsB,QACvB,CAEY,EACX,OAAO,OAAOC,EAAAA,qBAAqB,CAExB,GAAA,EAAA,EAAA,cAA2B,CACtC,OAAQ,SAAY,CAClB,GAAM,CAAE,QAAS,MAAA,QAAA,SAAA,CAAA,SAAA,QAAM,sBAAA,CAAA,CACvB,OAAO,GAET,WAAY,CACV,MAAO,CACL,KAAM,EAAoB,CACxB,OAAQ,SACT,CAAC,CACF,UAAW,CACT,KAAM,OACN,OAAQ,CAAC,MAAO,GAAG,OAAO,OAAOD,EAAAA,EAAsB,CAAC,CACxD,MAAO,wDAAwD,EAAiC,KAC9F,IACD,CAAC,GACF,SAAU,IACV,SAAU,GACX,CACD,KAAM,CACJ,KAAM,SACN,MAAO,OACP,MAAO,qCACP,QAAS,kBACV,CACD,aAAc,GAA6B,CAC3C,YAAa,CACX,KAAM,SACN,MAAO,OACP,SAAU,IACV,MACE,uEACF,SAAU,GACX,CACD,iBAAkB,CAChB,KAAM,SACN,MAAO,OACP,SAAU,IACV,MAAO,yCACP,SAAU,GACX,CACD,gBAAiB,CACf,KAAM,OACN,OAAQ,OAAO,OAAOC,EAAAA,qBAAqB,CAC3C,SAAU,IACV,MACE,mFACF,SAAU,GACX,CACD,SAAU,CACR,KAAM,SACN,MAAOC,EAAAA,aACP,MAAO,oDACP,QAAS,KACV,CACD,eAAgB,CACd,KAAM,UACN,MACE,qEACF,QAAS,GACV,CACD,kBAAmB,CACjB,KAAM,UACN,MACE,wEACF,QAAS,GACV,CACD,yBAA0B,CACxB,KAAM,UACN,MACE,oFACF,QAAS,GACV,CACD,MAAO,CACL,KAAM,UACN,MACE,oEACF,QAAS,GACV,CACF,CACF,CACD,KAAM,CACJ,MAAO,kDACP,gBAAiB;;;;;;;uGAQlB,CACF,CAAC"}
@@ -1,4 +1,4 @@
1
- const e=require(`./enums-CBXlBJii.cjs`),t=require(`./constants-BD9ZSD52.cjs`),n=require(`./syncConfigurationToTranscend-B9c2w6d0.cjs`),r=require(`./logger-BaHHbWVd.cjs`),i=require(`./codecs-JSDJgtyL.cjs`);let a=require(`@transcend-io/privacy-types`),o=require(`colors`);o=e.s(o);async function s({auth:e,deploy:i=!1,transcendUrl:s=t.a,bundleTypes:c=Object.values(a.ConsentBundleType)}){let l=n.ti(s,e),u=await n.Fr(l);await n.Es(c,async e=>{r.t.info(o.default.magenta(`Update Consent Manager bundle with ID "${u}" and type "${e}" to latest version...`)),await n.Qr(l,{id:u,bundleType:e}),r.t.info(o.default.green(`Updated Consent Manager bundle with ID "${u}" and type "${e}" to latest version!`))}),i&&await n.Es(c,async e=>{r.t.info(o.default.magenta(`Deploying Consent Manager bundle with ID "${u}" and type "${e}"...`)),await n.Zr(l,{id:u,bundleType:e}),r.t.info(o.default.green(`Deployed Consent Manager bundle with ID "${u}" and type "${e}"!`))})}const c=[`ID`,`Activity`,`Encounters`,`Last Seen At`,`Has Native Do Not Sell/Share Support`,`IAB USP API Support`,`Service Description`,`Website URL`,`Categories of Recipients`];async function l({auth:e,trackerStatus:a,file:s,classifyService:l=!1,transcendUrl:u=t.a}){let d=n.ti(u,e);r.t.info(o.default.magenta(`Reading "${s}" from disk`)),await n.kt(d,n.oi(s,i.I).map(({Type:e,Notes:t,Service:r,Purpose:i,Status:o,Owners:s,Teams:l,"Connections Made To":u,...d})=>({value:u,type:e,description:t,trackingPurposes:n.li(i),status:o||a,owners:s?n.li(s):void 0,teams:l?n.li(l):void 0,attributes:Object.entries(d).filter(([e])=>!c.includes(e)).map(([e,t])=>({key:e,values:n.li(t)}))})),l)||(r.t.error(o.default.red(`Encountered error(s) syncing data flows from CSV, see logs above for more info. `)),process.exit(1))}const u=[`ID`,`Activity`,`Encounters`,`Last Seen At`,`Has Native Do Not Sell/Share Support`,`IAB USP API Support`,`Service Description`,`Website URL`,`Categories of Recipients`];async function d({auth:e,trackerStatus:a,file:s,transcendUrl:c=t.a}){let l=n.ti(c,e);r.t.info(o.default.magenta(`Reading "${s}" from disk`)),await n.Pt(l,n.oi(s,i.A).map(({"Is Regex?":e,Notes:t,Service:r,Purpose:i,Status:o,Owners:s,Teams:c,Name:l,...d})=>({...typeof e==`string`?{isRegex:e.toLowerCase()===`true`}:{},name:l,description:t,trackingPurposes:n.li(i),status:o||a,owners:s?n.li(s):void 0,teams:c?n.li(c):void 0,attributes:Object.entries(d).filter(([e])=>!u.includes(e)).map(([e,t])=>({key:e,values:n.li(t)}))})))||(r.t.error(o.default.red(`Encountered error(s) syncing cookies from CSV, see logs above for more info. `)),process.exit(1))}const f=60*1e3*60*24*7;async function p(e,{bin:t,start:r,end:i=new Date}){let a=await n.Fr(e);if(Math.floor(r.getTime()/1e3)>Math.floor(i.getTime()/1e3))throw Error(`Received "end" date that happened before "start" date`);if(t===`1h`&&i.getTime()-r.getTime()>6048e5*2)throw Error(`When using bin=1h, start and end time can be no more than 2 weeks apart`);let o=r.toISOString(),s=i.toISOString(),[c,l,u]=await Promise.all([n.Nr(e,{dataSource:`PRIVACY_SIGNAL_TIMESERIES`,startDate:o,endDate:s,forceRefetch:!0,airgapBundleId:a,binInterval:t,smoothTimeseries:!1}),n.Nr(e,{dataSource:`CONSENT_CHANGES_TIMESERIES`,startDate:o,endDate:s,forceRefetch:!0,airgapBundleId:a,binInterval:t,smoothTimeseries:!1}),n.Nr(e,{dataSource:`CONSENT_SESSIONS_BY_REGIME`,startDate:o,endDate:s,forceRefetch:!0,airgapBundleId:a,binInterval:t,smoothTimeseries:!1})]);return{PRIVACY_SIGNAL_TIMESERIES:c,CONSENT_CHANGES_TIMESERIES:l,CONSENT_SESSIONS_BY_REGIME:u}}const m=e=>new URL(`https://${e}`).hostname.split(`.`).slice(-2).join(`.`),h=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;async function g(e,{xdiLocation:i,transcendUrl:a=t.a,removeIpAddresses:s=!0,domainBlockList:c=[`localhost`],xdiAllowedCommands:l=`ConsentManager:Sync`}){let u=await n.Ts(Array.isArray(e)?e:[{apiKey:e,organizationId:``,organizationName:``}],async e=>(r.t.info(o.default.magenta(`Pulling consent metadata for organization - ${e.organizationName}`)),await n.Mr(n.ti(a,e.apiKey))),{concurrency:5}),d={};return u.forEach(e=>{let t=e.partition?.partition||e.bundleURL.split(`/`).reverse()[1];d[t]||(d[t]=[]);let r=n.js(e.configuration.domains.filter(e=>!s||!h.test(e)).map(e=>m(e)),c);d[t]=[...new Set([...d[t]||[],...r])]}),{html:`
1
+ const e=require(`./enums-CBXlBJii.cjs`),t=require(`./constants-B-TmLA0w.cjs`),n=require(`./syncConfigurationToTranscend-Bpge5AcC.cjs`),r=require(`./logger-BaHHbWVd.cjs`),i=require(`./codecs-JSDJgtyL.cjs`);let a=require(`@transcend-io/privacy-types`),o=require(`colors`);o=e.s(o);async function s({auth:e,deploy:i=!1,transcendUrl:s=t.a,bundleTypes:c=Object.values(a.ConsentBundleType)}){let l=n.ti(s,e),u=await n.Fr(l);await n.Es(c,async e=>{r.t.info(o.default.magenta(`Update Consent Manager bundle with ID "${u}" and type "${e}" to latest version...`)),await n.Qr(l,{id:u,bundleType:e}),r.t.info(o.default.green(`Updated Consent Manager bundle with ID "${u}" and type "${e}" to latest version!`))}),i&&await n.Es(c,async e=>{r.t.info(o.default.magenta(`Deploying Consent Manager bundle with ID "${u}" and type "${e}"...`)),await n.Zr(l,{id:u,bundleType:e}),r.t.info(o.default.green(`Deployed Consent Manager bundle with ID "${u}" and type "${e}"!`))})}const c=[`ID`,`Activity`,`Encounters`,`Last Seen At`,`Has Native Do Not Sell/Share Support`,`IAB USP API Support`,`Service Description`,`Website URL`,`Categories of Recipients`];async function l({auth:e,trackerStatus:a,file:s,classifyService:l=!1,transcendUrl:u=t.a}){let d=n.ti(u,e);r.t.info(o.default.magenta(`Reading "${s}" from disk`)),await n.kt(d,n.oi(s,i.I).map(({Type:e,Notes:t,Service:r,Purpose:i,Status:o,Owners:s,Teams:l,"Connections Made To":u,...d})=>({value:u,type:e,description:t,trackingPurposes:n.li(i),status:o||a,owners:s?n.li(s):void 0,teams:l?n.li(l):void 0,attributes:Object.entries(d).filter(([e])=>!c.includes(e)).map(([e,t])=>({key:e,values:n.li(t)}))})),l)||(r.t.error(o.default.red(`Encountered error(s) syncing data flows from CSV, see logs above for more info. `)),process.exit(1))}const u=[`ID`,`Activity`,`Encounters`,`Last Seen At`,`Has Native Do Not Sell/Share Support`,`IAB USP API Support`,`Service Description`,`Website URL`,`Categories of Recipients`];async function d({auth:e,trackerStatus:a,file:s,transcendUrl:c=t.a}){let l=n.ti(c,e);r.t.info(o.default.magenta(`Reading "${s}" from disk`)),await n.Pt(l,n.oi(s,i.A).map(({"Is Regex?":e,Notes:t,Service:r,Purpose:i,Status:o,Owners:s,Teams:c,Name:l,...d})=>({...typeof e==`string`?{isRegex:e.toLowerCase()===`true`}:{},name:l,description:t,trackingPurposes:n.li(i),status:o||a,owners:s?n.li(s):void 0,teams:c?n.li(c):void 0,attributes:Object.entries(d).filter(([e])=>!u.includes(e)).map(([e,t])=>({key:e,values:n.li(t)}))})))||(r.t.error(o.default.red(`Encountered error(s) syncing cookies from CSV, see logs above for more info. `)),process.exit(1))}const f=60*1e3*60*24*7;async function p(e,{bin:t,start:r,end:i=new Date}){let a=await n.Fr(e);if(Math.floor(r.getTime()/1e3)>Math.floor(i.getTime()/1e3))throw Error(`Received "end" date that happened before "start" date`);if(t===`1h`&&i.getTime()-r.getTime()>6048e5*2)throw Error(`When using bin=1h, start and end time can be no more than 2 weeks apart`);let o=r.toISOString(),s=i.toISOString(),[c,l,u]=await Promise.all([n.Nr(e,{dataSource:`PRIVACY_SIGNAL_TIMESERIES`,startDate:o,endDate:s,forceRefetch:!0,airgapBundleId:a,binInterval:t,smoothTimeseries:!1}),n.Nr(e,{dataSource:`CONSENT_CHANGES_TIMESERIES`,startDate:o,endDate:s,forceRefetch:!0,airgapBundleId:a,binInterval:t,smoothTimeseries:!1}),n.Nr(e,{dataSource:`CONSENT_SESSIONS_BY_REGIME`,startDate:o,endDate:s,forceRefetch:!0,airgapBundleId:a,binInterval:t,smoothTimeseries:!1})]);return{PRIVACY_SIGNAL_TIMESERIES:c,CONSENT_CHANGES_TIMESERIES:l,CONSENT_SESSIONS_BY_REGIME:u}}const m=e=>new URL(`https://${e}`).hostname.split(`.`).slice(-2).join(`.`),h=/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;async function g(e,{xdiLocation:i,transcendUrl:a=t.a,removeIpAddresses:s=!0,domainBlockList:c=[`localhost`],xdiAllowedCommands:l=`ConsentManager:Sync`}){let u=await n.Ts(Array.isArray(e)?e:[{apiKey:e,organizationId:``,organizationName:``}],async e=>(r.t.info(o.default.magenta(`Pulling consent metadata for organization - ${e.organizationName}`)),await n.Mr(n.ti(a,e.apiKey))),{concurrency:5}),d={};return u.forEach(e=>{let t=e.partition?.partition||e.bundleURL.split(`/`).reverse()[1];d[t]||(d[t]=[]);let r=n.js(e.configuration.domains.filter(e=>!s||!h.test(e)).map(e=>m(e)),c);d[t]=[...new Set([...d[t]||[],...r])]}),{html:`
2
2
  <!DOCTYPE html>
3
3
  <script
4
4
  src="${i}"
@@ -9,4 +9,4 @@ data-xdi-commands="${l}"
9
9
 
10
10
  ~~~~~~~~~~~
11
11
  Airgap scripts to host:`),t.forEach(({attributes:e,title:t},n)=>{e?.find(e=>e.key===`Airgap Production URL`)?.values?.forEach(e=>{r.t.info(`${n}) ${t} - ${e}`)})}),t}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return _}});
12
- //# sourceMappingURL=consent-manager-BX6ZnSbw.cjs.map
12
+ //# sourceMappingURL=consent-manager-DXWjvCtI.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"consent-manager-BX6ZnSbw.cjs","names":["DEFAULT_TRANSCEND_API","ConsentBundleType","buildTranscendGraphQLClient","fetchConsentManagerId","mapSeries","updateConsentManagerToLatest","deployConsentManager","OMIT_COLUMNS","DEFAULT_TRANSCEND_API","buildTranscendGraphQLClient","syncDataFlows","readCsv","DataFlowCsvInput","splitCsvToList","value","DEFAULT_TRANSCEND_API","buildTranscendGraphQLClient","syncCookies","readCsv","CookieCsvInput","splitCsvToList","fetchConsentManagerId","fetchConsentManagerAnalyticsData","DEFAULT_TRANSCEND_API","map","fetchConsentManager","buildTranscendGraphQLClient","difference"],"sources":["../src/lib/consent-manager/updateConsentManagerVersionToLatest.ts","../src/lib/consent-manager/uploadDataFlowsFromCsv.ts","../src/lib/consent-manager/uploadCookiesFromCsv.ts","../src/lib/consent-manager/pullConsentManagerMetrics.ts","../src/lib/consent-manager/domainToHost.ts","../src/lib/consent-manager/buildXdiSyncEndpoint.ts","../src/lib/consent-manager/consentManagersToBusinessEntities.ts"],"sourcesContent":["import { ConsentBundleType } from '@transcend-io/privacy-types';\nimport { mapSeries } from '../bluebird';\nimport {\n updateConsentManagerToLatest,\n buildTranscendGraphQLClient,\n fetchConsentManagerId,\n deployConsentManager,\n} from '../graphql';\nimport colors from 'colors';\n\nimport { logger } from '../../logger';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\n/**\n * Update the consent manager to latest version\n *\n * @param options - Options\n */\nexport async function updateConsentManagerVersionToLatest({\n auth,\n deploy = false,\n transcendUrl = DEFAULT_TRANSCEND_API,\n bundleTypes = Object.values(ConsentBundleType),\n}: {\n /** Transcend API key authentication */\n auth: string;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Deploy consent manager with this update */\n deploy?: boolean;\n /** The bundle types to update and deploy */\n bundleTypes?: ConsentBundleType[];\n}): Promise<void> {\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Grab Consent Manager ID\n const consentManagerId = await fetchConsentManagerId(client);\n\n // Update each bundle type to latest version\n await mapSeries(bundleTypes, async (bundleType) => {\n logger.info(\n colors.magenta(\n `Update Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\" to latest version...`,\n ),\n );\n await updateConsentManagerToLatest(client, {\n id: consentManagerId,\n bundleType,\n });\n logger.info(\n colors.green(\n `Updated Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\" to latest version!`,\n ),\n );\n });\n\n // deploy Consent Managers\n if (deploy) {\n // Update each bundle type to latest version\n await mapSeries(bundleTypes, async (bundleType) => {\n logger.info(\n colors.magenta(\n `Deploying Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\"...`,\n ),\n );\n await deployConsentManager(client, {\n id: consentManagerId,\n bundleType,\n });\n logger.info(\n colors.green(\n `Deployed Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\"!`,\n ),\n );\n });\n }\n}\n","import colors from 'colors';\nimport { logger } from '../../logger';\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, syncDataFlows } from '../graphql';\nimport { readCsv } from '../requests/readCsv';\nimport { DataFlowInput, DataFlowCsvInput } from '../../codecs';\nimport { splitCsvToList } from '../requests';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\nconst OMIT_COLUMNS = [\n 'ID',\n 'Activity',\n 'Encounters',\n 'Last Seen At',\n 'Has Native Do Not Sell/Share Support',\n 'IAB USP API Support',\n 'Service Description',\n 'Website URL',\n 'Categories of Recipients',\n];\n\n/**\n * Upload a set of data flows from CSV\n *\n * @param options - Options\n */\nexport async function uploadDataFlowsFromCsv({\n auth,\n trackerStatus,\n file,\n classifyService = false,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Sombra API key authentication */\n trackerStatus: ConsentTrackerStatus;\n /** classify data flow service if missing */\n classifyService?: boolean;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<void> {\n // Build a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Read from CSV the set of data flow inputs\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const dataFlowInputs = readCsv(file, DataFlowCsvInput);\n\n // Convert these data flow inputs into a format that the other function can use\n const validatedDataFlowInputs = dataFlowInputs.map(\n ({\n Type,\n Notes,\n // TODO: https://transcend.height.app/T-26391 - export in CSV\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Service,\n Purpose,\n Status,\n Owners,\n Teams,\n 'Connections Made To': value,\n ...rest\n }): DataFlowInput => ({\n value,\n type: Type,\n description: Notes,\n trackingPurposes: splitCsvToList(Purpose),\n // TODO: https://transcend.height.app/T-26391\n // service: Service,\n // Apply the trackerStatus to all values in the CSV -> allows for customer to define tracker status\n // on a row by row basis if needed\n status: Status || trackerStatus,\n owners: Owners ? splitCsvToList(Owners) : undefined,\n teams: Teams ? splitCsvToList(Teams) : undefined,\n // all remaining options are attribute\n attributes: Object.entries(rest)\n // filter out native columns that are exported from the admin dashboard\n // but not custom attributes\n .filter(([key]) => !OMIT_COLUMNS.includes(key))\n .map(([key, value]) => ({\n key,\n values: splitCsvToList(value),\n })),\n }),\n );\n\n // Upload the data flows into Transcend dashboard\n const syncedDataFlows = await syncDataFlows(\n client,\n validatedDataFlowInputs,\n classifyService,\n );\n\n // Log errors\n if (!syncedDataFlows) {\n logger.error(\n colors.red(\n 'Encountered error(s) syncing data flows from CSV, see logs above for more info. ',\n ),\n );\n process.exit(1);\n }\n}\n","import colors from 'colors';\nimport { logger } from '../../logger';\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, syncCookies } from '../graphql';\nimport { readCsv } from '../requests/readCsv';\nimport { CookieInput, CookieCsvInput } from '../../codecs';\nimport { splitCsvToList } from '../requests';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\nconst OMIT_COLUMNS = [\n 'ID',\n 'Activity',\n 'Encounters',\n 'Last Seen At',\n 'Has Native Do Not Sell/Share Support',\n 'IAB USP API Support',\n 'Service Description',\n 'Website URL',\n 'Categories of Recipients',\n];\n\n/**\n * Upload a set of cookies from CSV\n *\n * @param options - Options\n */\nexport async function uploadCookiesFromCsv({\n auth,\n trackerStatus,\n file,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Sombra API key authentication */\n trackerStatus: ConsentTrackerStatus;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<void> {\n // Build a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Read from CSV the set of cookie inputs\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const cookieInputs = readCsv(file, CookieCsvInput);\n\n // Convert these inputs into a format that the other function can use\n const validatedCookieInputs = cookieInputs.map(\n ({\n 'Is Regex?': isRegex,\n Notes,\n // TODO: https://transcend.height.app/T-26391 - export in CSV\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Service,\n Purpose,\n Status,\n Owners,\n Teams,\n Name,\n ...rest\n }): CookieInput => ({\n ...(typeof isRegex === 'string'\n ? { isRegex: isRegex.toLowerCase() === 'true' }\n : {}),\n name: Name,\n description: Notes,\n trackingPurposes: splitCsvToList(Purpose),\n // TODO: https://transcend.height.app/T-26391\n // service: Service,\n // Apply the trackerStatus to all values in the CSV -> allows for customer to define tracker status\n // on a row by row basis if needed\n status: Status || trackerStatus,\n owners: Owners ? splitCsvToList(Owners) : undefined,\n teams: Teams ? splitCsvToList(Teams) : undefined,\n // all remaining options are attribute\n attributes: Object.entries(rest)\n // filter out native columns that are exported from the admin dashboard\n // but not custom attributes\n .filter(([key]) => !OMIT_COLUMNS.includes(key))\n .map(([key, value]) => ({\n key,\n values: splitCsvToList(value),\n })),\n }),\n );\n\n // Upload the cookies into Transcend dashboard\n const syncedCookies = await syncCookies(client, validatedCookieInputs);\n\n // Log errors\n if (!syncedCookies) {\n logger.error(\n colors.red(\n 'Encountered error(s) syncing cookies from CSV, see logs above for more info. ',\n ),\n );\n process.exit(1);\n }\n}\n","import type { GraphQLClient } from 'graphql-request';\nimport {\n ConsentManagerMetric,\n ConsentManagerMetricBin,\n fetchConsentManagerAnalyticsData,\n fetchConsentManagerId,\n} from '../graphql';\n\n/**\n * One second of time in ms\n */\nconst ONE_SECOND = 1000;\nconst ONE_MINUTE = 60 * ONE_SECOND;\nconst ONE_HOUR = 60 * ONE_MINUTE;\nconst ONE_DAY = 24 * ONE_HOUR;\nconst ONE_WEEK = 7 * ONE_DAY;\n\n/**\n * Pull consent manager metrics in an organization\n *\n * @param client - GraphQL client\n * @param options - Options\n * @returns The consent manager metrics\n */\nexport async function pullConsentManagerMetrics(\n client: GraphQLClient,\n {\n bin,\n start,\n end = new Date(),\n }: {\n /** Start date to pull metrics from */\n start: Date;\n /** End date to pull metrics from (assumes now) */\n end?: Date;\n /** Bin size to pull metrics */\n bin: ConsentManagerMetricBin;\n },\n): Promise<{\n /** Privacy signal data */\n PRIVACY_SIGNAL_TIMESERIES: ConsentManagerMetric[];\n /** Consent changes data */\n CONSENT_CHANGES_TIMESERIES: ConsentManagerMetric[];\n /** Consent sessions by regime */\n CONSENT_SESSIONS_BY_REGIME: ConsentManagerMetric[];\n}> {\n // Grab the bundleId associated with this API key\n const airgapBundleId = await fetchConsentManagerId(client);\n\n // convert start and end to times\n const startTime = Math.floor(start.getTime() / 1000);\n const endTime = Math.floor(end.getTime() / 1000);\n if (startTime > endTime) {\n throw new Error('Received \"end\" date that happened before \"start\" date');\n }\n\n // do not allow hourly bins greater than 2 weeks\n if (bin === '1h' && end.getTime() - start.getTime() > ONE_WEEK * 2) {\n throw new Error(\n 'When using bin=1h, start and end time can be no more than 2 weeks apart',\n );\n }\n\n // Pull in the metrics\n const startDate = start.toISOString();\n const endDate = end.toISOString();\n const [privacySignalData, consentChangesData, consentSessionsByRegimeData] =\n await Promise.all([\n fetchConsentManagerAnalyticsData(client, {\n dataSource: 'PRIVACY_SIGNAL_TIMESERIES',\n startDate,\n endDate,\n forceRefetch: true,\n airgapBundleId,\n binInterval: bin,\n smoothTimeseries: false,\n }),\n fetchConsentManagerAnalyticsData(client, {\n dataSource: 'CONSENT_CHANGES_TIMESERIES',\n startDate,\n endDate,\n forceRefetch: true,\n airgapBundleId,\n binInterval: bin,\n smoothTimeseries: false,\n }),\n fetchConsentManagerAnalyticsData(client, {\n dataSource: 'CONSENT_SESSIONS_BY_REGIME',\n startDate,\n endDate,\n forceRefetch: true,\n airgapBundleId,\n binInterval: bin,\n smoothTimeseries: false,\n }),\n ]);\n\n return {\n PRIVACY_SIGNAL_TIMESERIES: privacySignalData,\n CONSENT_CHANGES_TIMESERIES: consentChangesData,\n CONSENT_SESSIONS_BY_REGIME: consentSessionsByRegimeData,\n };\n}\n","/**\n * Convert a domain to host\n *\n * @param domain - e.g. test.acme.com\n * @returns Host acme.com\n */\nexport const domainToHost = (domain: string): string =>\n new URL(`https://${domain}`).hostname.split('.').slice(-2).join('.');\n","import colors from 'colors';\n\nimport { buildTranscendGraphQLClient, fetchConsentManager } from '../graphql';\nimport { difference } from 'lodash-es';\nimport { map } from '../bluebird';\nimport { StoredApiKey } from '../../codecs';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\nimport { logger } from '../../logger';\nimport { domainToHost } from './domainToHost';\n\n/**\n * Sync group configuration mapping\n * e.g.\n * {\n * \"abdb5e78-0d69-4554-a3bd-84b72ca3b3d9\": [\n * \"test.com\"\n * ],\n * \"f6b3ba87-c9df-444f-b420-6fac49e35910\": [\n * \"blue.com\"\n * ]\n * }\n */\nexport type XdiSyncGroups = { [k in string]: string[] };\n\n/** Regular expression for IP addresses - remove these from sync endpoint */\nexport const IP_ADDRESS_REGEX =\n // eslint-disable-next-line max-len\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n\n/**\n * Build the sync endpoint definition for a set of Transcend accounts\n *\n * @param apiKeys - The API keys that will be used to pull down configurations for\n * @param options - Options\n * @returns The XDI configuration\n */\nexport async function buildXdiSyncEndpoint(\n apiKeys: string | StoredApiKey[],\n {\n xdiLocation,\n transcendUrl = DEFAULT_TRANSCEND_API,\n removeIpAddresses = true,\n domainBlockList = ['localhost'],\n xdiAllowedCommands = 'ConsentManager:Sync',\n }: {\n /** The file location where the XDI file is hosted */\n xdiLocation: string;\n /** URL of Transcend API */\n transcendUrl?: string;\n /** When true, remove IP addresses (defaults to true) */\n removeIpAddresses?: boolean;\n /** Block list of domains to omit from sync endpoint - includes `localhost` by default */\n domainBlockList?: string[];\n /** Allows XDI commands */\n xdiAllowedCommands?: string;\n },\n): Promise<{\n /** Sync group configurations */\n syncGroups: XdiSyncGroups;\n /** The HTML string */\n html: string;\n}> {\n // Convert API keys to list\n const apiKeysAsList = Array.isArray(apiKeys)\n ? apiKeys\n : [{ apiKey: apiKeys, organizationId: '', organizationName: '' }];\n\n // Fetch configuration for each account\n const consentManagers = await map(\n apiKeysAsList,\n async (apiKey) => {\n logger.info(\n colors.magenta(\n `Pulling consent metadata for organization - ${apiKey.organizationName}`,\n ),\n );\n\n // Create a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, apiKey.apiKey);\n\n // Grab consent manager\n const consentManager = await fetchConsentManager(client);\n return consentManager;\n },\n { concurrency: 5 },\n );\n\n // construct the sync groups\n const syncGroups: XdiSyncGroups = {};\n consentManagers.forEach((consentManager) => {\n // grab the partition key\n const partitionKey =\n // take explicit key first\n consentManager.partition?.partition ||\n // fallback to bundle ID\n consentManager.bundleURL.split('/').reverse()[1];\n\n // Ensure that partition exists in the sync groups\n if (!syncGroups[partitionKey]) {\n syncGroups[partitionKey] = [];\n }\n\n // Map domain list to a host list\n const hosts = difference(\n consentManager.configuration.domains\n .filter(\n // ignore IP addresses\n (domain) => !removeIpAddresses || !IP_ADDRESS_REGEX.test(domain),\n )\n .map((domain) => domainToHost(domain)),\n // ignore block list\n domainBlockList,\n );\n // merge existing sync group with hosts for this consent manager\n syncGroups[partitionKey] = [\n ...new Set([...(syncGroups[partitionKey] || []), ...hosts]),\n ];\n });\n\n // Construct the HTML\n const syncEndpointHtml = `\n<!DOCTYPE html>\n<script\nsrc=\"${xdiLocation}\"\ndata-sync-groups='${JSON.stringify(syncGroups, null, 2)}'\ndata-xdi-commands=\"${xdiAllowedCommands}\"\n></script>\n`;\n\n return {\n html: syncEndpointHtml,\n syncGroups,\n };\n}\n","import { BusinessEntityInput, ConsentManagerInput } from '../../codecs';\nimport { logger } from '../../logger';\n\n/**\n * Combine multiple consent manager configurations into a list of business entity configurations\n *\n * @param inputs - Consent manager configurations to combine\n * @returns Business entity configuration input\n */\nexport function consentManagersToBusinessEntities(\n inputs: {\n /** Name of business entity */\n name: string;\n /** Consent manager input */\n input?: ConsentManagerInput;\n }[],\n): BusinessEntityInput[] {\n // Construct the business entities YAML definition\n const businessEntities = inputs.map(\n ({ name, input }): BusinessEntityInput => ({\n // Title of Transcend Instance\n title: name.replace('.yml', ''),\n attributes: [\n // Sync domain list\n ...(input?.domains\n ? [\n {\n key: 'Transcend Domain List',\n values: [...new Set(input.domains)],\n },\n ]\n : []),\n // Sync bundle URLs\n ...(input?.bundleUrls\n ? [\n {\n key: 'Airgap Production URL',\n values: [input.bundleUrls.PRODUCTION],\n },\n {\n key: 'Airgap Test URL',\n values: [input.bundleUrls.TEST],\n },\n {\n key: 'Airgap XDI URL',\n values: [\n input.bundleUrls.PRODUCTION.replace('airgap.js', 'xdi.js'),\n ],\n },\n ]\n : []),\n // Sync partition keys\n ...(input?.partition\n ? [\n {\n key: 'Consent Partition Key',\n values: [input.partition],\n },\n ]\n : []),\n ],\n }),\n );\n\n // Log out info on airgap scripts to host\n logger.info('\\n\\n~~~~~~~~~~~\\nAirgap scripts to host:');\n businessEntities.forEach(({ attributes, title }, ind) => {\n attributes\n ?.find((attr) => attr.key === 'Airgap Production URL')\n ?.values?.forEach((url) => {\n logger.info(`${ind}) ${title} - ${url}`);\n });\n });\n\n return businessEntities;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"consent-manager-DXWjvCtI.cjs","names":["DEFAULT_TRANSCEND_API","ConsentBundleType","buildTranscendGraphQLClient","fetchConsentManagerId","mapSeries","updateConsentManagerToLatest","deployConsentManager","OMIT_COLUMNS","DEFAULT_TRANSCEND_API","buildTranscendGraphQLClient","syncDataFlows","readCsv","DataFlowCsvInput","splitCsvToList","value","DEFAULT_TRANSCEND_API","buildTranscendGraphQLClient","syncCookies","readCsv","CookieCsvInput","splitCsvToList","fetchConsentManagerId","fetchConsentManagerAnalyticsData","DEFAULT_TRANSCEND_API","map","fetchConsentManager","buildTranscendGraphQLClient","difference"],"sources":["../src/lib/consent-manager/updateConsentManagerVersionToLatest.ts","../src/lib/consent-manager/uploadDataFlowsFromCsv.ts","../src/lib/consent-manager/uploadCookiesFromCsv.ts","../src/lib/consent-manager/pullConsentManagerMetrics.ts","../src/lib/consent-manager/domainToHost.ts","../src/lib/consent-manager/buildXdiSyncEndpoint.ts","../src/lib/consent-manager/consentManagersToBusinessEntities.ts"],"sourcesContent":["import { ConsentBundleType } from '@transcend-io/privacy-types';\nimport { mapSeries } from '../bluebird';\nimport {\n updateConsentManagerToLatest,\n buildTranscendGraphQLClient,\n fetchConsentManagerId,\n deployConsentManager,\n} from '../graphql';\nimport colors from 'colors';\n\nimport { logger } from '../../logger';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\n/**\n * Update the consent manager to latest version\n *\n * @param options - Options\n */\nexport async function updateConsentManagerVersionToLatest({\n auth,\n deploy = false,\n transcendUrl = DEFAULT_TRANSCEND_API,\n bundleTypes = Object.values(ConsentBundleType),\n}: {\n /** Transcend API key authentication */\n auth: string;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Deploy consent manager with this update */\n deploy?: boolean;\n /** The bundle types to update and deploy */\n bundleTypes?: ConsentBundleType[];\n}): Promise<void> {\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Grab Consent Manager ID\n const consentManagerId = await fetchConsentManagerId(client);\n\n // Update each bundle type to latest version\n await mapSeries(bundleTypes, async (bundleType) => {\n logger.info(\n colors.magenta(\n `Update Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\" to latest version...`,\n ),\n );\n await updateConsentManagerToLatest(client, {\n id: consentManagerId,\n bundleType,\n });\n logger.info(\n colors.green(\n `Updated Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\" to latest version!`,\n ),\n );\n });\n\n // deploy Consent Managers\n if (deploy) {\n // Update each bundle type to latest version\n await mapSeries(bundleTypes, async (bundleType) => {\n logger.info(\n colors.magenta(\n `Deploying Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\"...`,\n ),\n );\n await deployConsentManager(client, {\n id: consentManagerId,\n bundleType,\n });\n logger.info(\n colors.green(\n `Deployed Consent Manager bundle with ID \"${consentManagerId}\" and type \"${bundleType}\"!`,\n ),\n );\n });\n }\n}\n","import colors from 'colors';\nimport { logger } from '../../logger';\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, syncDataFlows } from '../graphql';\nimport { readCsv } from '../requests/readCsv';\nimport { DataFlowInput, DataFlowCsvInput } from '../../codecs';\nimport { splitCsvToList } from '../requests';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\nconst OMIT_COLUMNS = [\n 'ID',\n 'Activity',\n 'Encounters',\n 'Last Seen At',\n 'Has Native Do Not Sell/Share Support',\n 'IAB USP API Support',\n 'Service Description',\n 'Website URL',\n 'Categories of Recipients',\n];\n\n/**\n * Upload a set of data flows from CSV\n *\n * @param options - Options\n */\nexport async function uploadDataFlowsFromCsv({\n auth,\n trackerStatus,\n file,\n classifyService = false,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Sombra API key authentication */\n trackerStatus: ConsentTrackerStatus;\n /** classify data flow service if missing */\n classifyService?: boolean;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<void> {\n // Build a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Read from CSV the set of data flow inputs\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const dataFlowInputs = readCsv(file, DataFlowCsvInput);\n\n // Convert these data flow inputs into a format that the other function can use\n const validatedDataFlowInputs = dataFlowInputs.map(\n ({\n Type,\n Notes,\n // TODO: https://transcend.height.app/T-26391 - export in CSV\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Service,\n Purpose,\n Status,\n Owners,\n Teams,\n 'Connections Made To': value,\n ...rest\n }): DataFlowInput => ({\n value,\n type: Type,\n description: Notes,\n trackingPurposes: splitCsvToList(Purpose),\n // TODO: https://transcend.height.app/T-26391\n // service: Service,\n // Apply the trackerStatus to all values in the CSV -> allows for customer to define tracker status\n // on a row by row basis if needed\n status: Status || trackerStatus,\n owners: Owners ? splitCsvToList(Owners) : undefined,\n teams: Teams ? splitCsvToList(Teams) : undefined,\n // all remaining options are attribute\n attributes: Object.entries(rest)\n // filter out native columns that are exported from the admin dashboard\n // but not custom attributes\n .filter(([key]) => !OMIT_COLUMNS.includes(key))\n .map(([key, value]) => ({\n key,\n values: splitCsvToList(value),\n })),\n }),\n );\n\n // Upload the data flows into Transcend dashboard\n const syncedDataFlows = await syncDataFlows(\n client,\n validatedDataFlowInputs,\n classifyService,\n );\n\n // Log errors\n if (!syncedDataFlows) {\n logger.error(\n colors.red(\n 'Encountered error(s) syncing data flows from CSV, see logs above for more info. ',\n ),\n );\n process.exit(1);\n }\n}\n","import colors from 'colors';\nimport { logger } from '../../logger';\nimport { ConsentTrackerStatus } from '@transcend-io/privacy-types';\nimport { buildTranscendGraphQLClient, syncCookies } from '../graphql';\nimport { readCsv } from '../requests/readCsv';\nimport { CookieInput, CookieCsvInput } from '../../codecs';\nimport { splitCsvToList } from '../requests';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\nconst OMIT_COLUMNS = [\n 'ID',\n 'Activity',\n 'Encounters',\n 'Last Seen At',\n 'Has Native Do Not Sell/Share Support',\n 'IAB USP API Support',\n 'Service Description',\n 'Website URL',\n 'Categories of Recipients',\n];\n\n/**\n * Upload a set of cookies from CSV\n *\n * @param options - Options\n */\nexport async function uploadCookiesFromCsv({\n auth,\n trackerStatus,\n file,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Sombra API key authentication */\n trackerStatus: ConsentTrackerStatus;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<void> {\n // Build a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Read from CSV the set of cookie inputs\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const cookieInputs = readCsv(file, CookieCsvInput);\n\n // Convert these inputs into a format that the other function can use\n const validatedCookieInputs = cookieInputs.map(\n ({\n 'Is Regex?': isRegex,\n Notes,\n // TODO: https://transcend.height.app/T-26391 - export in CSV\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Service,\n Purpose,\n Status,\n Owners,\n Teams,\n Name,\n ...rest\n }): CookieInput => ({\n ...(typeof isRegex === 'string'\n ? { isRegex: isRegex.toLowerCase() === 'true' }\n : {}),\n name: Name,\n description: Notes,\n trackingPurposes: splitCsvToList(Purpose),\n // TODO: https://transcend.height.app/T-26391\n // service: Service,\n // Apply the trackerStatus to all values in the CSV -> allows for customer to define tracker status\n // on a row by row basis if needed\n status: Status || trackerStatus,\n owners: Owners ? splitCsvToList(Owners) : undefined,\n teams: Teams ? splitCsvToList(Teams) : undefined,\n // all remaining options are attribute\n attributes: Object.entries(rest)\n // filter out native columns that are exported from the admin dashboard\n // but not custom attributes\n .filter(([key]) => !OMIT_COLUMNS.includes(key))\n .map(([key, value]) => ({\n key,\n values: splitCsvToList(value),\n })),\n }),\n );\n\n // Upload the cookies into Transcend dashboard\n const syncedCookies = await syncCookies(client, validatedCookieInputs);\n\n // Log errors\n if (!syncedCookies) {\n logger.error(\n colors.red(\n 'Encountered error(s) syncing cookies from CSV, see logs above for more info. ',\n ),\n );\n process.exit(1);\n }\n}\n","import type { GraphQLClient } from 'graphql-request';\nimport {\n ConsentManagerMetric,\n ConsentManagerMetricBin,\n fetchConsentManagerAnalyticsData,\n fetchConsentManagerId,\n} from '../graphql';\n\n/**\n * One second of time in ms\n */\nconst ONE_SECOND = 1000;\nconst ONE_MINUTE = 60 * ONE_SECOND;\nconst ONE_HOUR = 60 * ONE_MINUTE;\nconst ONE_DAY = 24 * ONE_HOUR;\nconst ONE_WEEK = 7 * ONE_DAY;\n\n/**\n * Pull consent manager metrics in an organization\n *\n * @param client - GraphQL client\n * @param options - Options\n * @returns The consent manager metrics\n */\nexport async function pullConsentManagerMetrics(\n client: GraphQLClient,\n {\n bin,\n start,\n end = new Date(),\n }: {\n /** Start date to pull metrics from */\n start: Date;\n /** End date to pull metrics from (assumes now) */\n end?: Date;\n /** Bin size to pull metrics */\n bin: ConsentManagerMetricBin;\n },\n): Promise<{\n /** Privacy signal data */\n PRIVACY_SIGNAL_TIMESERIES: ConsentManagerMetric[];\n /** Consent changes data */\n CONSENT_CHANGES_TIMESERIES: ConsentManagerMetric[];\n /** Consent sessions by regime */\n CONSENT_SESSIONS_BY_REGIME: ConsentManagerMetric[];\n}> {\n // Grab the bundleId associated with this API key\n const airgapBundleId = await fetchConsentManagerId(client);\n\n // convert start and end to times\n const startTime = Math.floor(start.getTime() / 1000);\n const endTime = Math.floor(end.getTime() / 1000);\n if (startTime > endTime) {\n throw new Error('Received \"end\" date that happened before \"start\" date');\n }\n\n // do not allow hourly bins greater than 2 weeks\n if (bin === '1h' && end.getTime() - start.getTime() > ONE_WEEK * 2) {\n throw new Error(\n 'When using bin=1h, start and end time can be no more than 2 weeks apart',\n );\n }\n\n // Pull in the metrics\n const startDate = start.toISOString();\n const endDate = end.toISOString();\n const [privacySignalData, consentChangesData, consentSessionsByRegimeData] =\n await Promise.all([\n fetchConsentManagerAnalyticsData(client, {\n dataSource: 'PRIVACY_SIGNAL_TIMESERIES',\n startDate,\n endDate,\n forceRefetch: true,\n airgapBundleId,\n binInterval: bin,\n smoothTimeseries: false,\n }),\n fetchConsentManagerAnalyticsData(client, {\n dataSource: 'CONSENT_CHANGES_TIMESERIES',\n startDate,\n endDate,\n forceRefetch: true,\n airgapBundleId,\n binInterval: bin,\n smoothTimeseries: false,\n }),\n fetchConsentManagerAnalyticsData(client, {\n dataSource: 'CONSENT_SESSIONS_BY_REGIME',\n startDate,\n endDate,\n forceRefetch: true,\n airgapBundleId,\n binInterval: bin,\n smoothTimeseries: false,\n }),\n ]);\n\n return {\n PRIVACY_SIGNAL_TIMESERIES: privacySignalData,\n CONSENT_CHANGES_TIMESERIES: consentChangesData,\n CONSENT_SESSIONS_BY_REGIME: consentSessionsByRegimeData,\n };\n}\n","/**\n * Convert a domain to host\n *\n * @param domain - e.g. test.acme.com\n * @returns Host acme.com\n */\nexport const domainToHost = (domain: string): string =>\n new URL(`https://${domain}`).hostname.split('.').slice(-2).join('.');\n","import colors from 'colors';\n\nimport { buildTranscendGraphQLClient, fetchConsentManager } from '../graphql';\nimport { difference } from 'lodash-es';\nimport { map } from '../bluebird';\nimport { StoredApiKey } from '../../codecs';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\nimport { logger } from '../../logger';\nimport { domainToHost } from './domainToHost';\n\n/**\n * Sync group configuration mapping\n * e.g.\n * {\n * \"abdb5e78-0d69-4554-a3bd-84b72ca3b3d9\": [\n * \"test.com\"\n * ],\n * \"f6b3ba87-c9df-444f-b420-6fac49e35910\": [\n * \"blue.com\"\n * ]\n * }\n */\nexport type XdiSyncGroups = { [k in string]: string[] };\n\n/** Regular expression for IP addresses - remove these from sync endpoint */\nexport const IP_ADDRESS_REGEX =\n // eslint-disable-next-line max-len\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n\n/**\n * Build the sync endpoint definition for a set of Transcend accounts\n *\n * @param apiKeys - The API keys that will be used to pull down configurations for\n * @param options - Options\n * @returns The XDI configuration\n */\nexport async function buildXdiSyncEndpoint(\n apiKeys: string | StoredApiKey[],\n {\n xdiLocation,\n transcendUrl = DEFAULT_TRANSCEND_API,\n removeIpAddresses = true,\n domainBlockList = ['localhost'],\n xdiAllowedCommands = 'ConsentManager:Sync',\n }: {\n /** The file location where the XDI file is hosted */\n xdiLocation: string;\n /** URL of Transcend API */\n transcendUrl?: string;\n /** When true, remove IP addresses (defaults to true) */\n removeIpAddresses?: boolean;\n /** Block list of domains to omit from sync endpoint - includes `localhost` by default */\n domainBlockList?: string[];\n /** Allows XDI commands */\n xdiAllowedCommands?: string;\n },\n): Promise<{\n /** Sync group configurations */\n syncGroups: XdiSyncGroups;\n /** The HTML string */\n html: string;\n}> {\n // Convert API keys to list\n const apiKeysAsList = Array.isArray(apiKeys)\n ? apiKeys\n : [{ apiKey: apiKeys, organizationId: '', organizationName: '' }];\n\n // Fetch configuration for each account\n const consentManagers = await map(\n apiKeysAsList,\n async (apiKey) => {\n logger.info(\n colors.magenta(\n `Pulling consent metadata for organization - ${apiKey.organizationName}`,\n ),\n );\n\n // Create a GraphQL client\n const client = buildTranscendGraphQLClient(transcendUrl, apiKey.apiKey);\n\n // Grab consent manager\n const consentManager = await fetchConsentManager(client);\n return consentManager;\n },\n { concurrency: 5 },\n );\n\n // construct the sync groups\n const syncGroups: XdiSyncGroups = {};\n consentManagers.forEach((consentManager) => {\n // grab the partition key\n const partitionKey =\n // take explicit key first\n consentManager.partition?.partition ||\n // fallback to bundle ID\n consentManager.bundleURL.split('/').reverse()[1];\n\n // Ensure that partition exists in the sync groups\n if (!syncGroups[partitionKey]) {\n syncGroups[partitionKey] = [];\n }\n\n // Map domain list to a host list\n const hosts = difference(\n consentManager.configuration.domains\n .filter(\n // ignore IP addresses\n (domain) => !removeIpAddresses || !IP_ADDRESS_REGEX.test(domain),\n )\n .map((domain) => domainToHost(domain)),\n // ignore block list\n domainBlockList,\n );\n // merge existing sync group with hosts for this consent manager\n syncGroups[partitionKey] = [\n ...new Set([...(syncGroups[partitionKey] || []), ...hosts]),\n ];\n });\n\n // Construct the HTML\n const syncEndpointHtml = `\n<!DOCTYPE html>\n<script\nsrc=\"${xdiLocation}\"\ndata-sync-groups='${JSON.stringify(syncGroups, null, 2)}'\ndata-xdi-commands=\"${xdiAllowedCommands}\"\n></script>\n`;\n\n return {\n html: syncEndpointHtml,\n syncGroups,\n };\n}\n","import { BusinessEntityInput, ConsentManagerInput } from '../../codecs';\nimport { logger } from '../../logger';\n\n/**\n * Combine multiple consent manager configurations into a list of business entity configurations\n *\n * @param inputs - Consent manager configurations to combine\n * @returns Business entity configuration input\n */\nexport function consentManagersToBusinessEntities(\n inputs: {\n /** Name of business entity */\n name: string;\n /** Consent manager input */\n input?: ConsentManagerInput;\n }[],\n): BusinessEntityInput[] {\n // Construct the business entities YAML definition\n const businessEntities = inputs.map(\n ({ name, input }): BusinessEntityInput => ({\n // Title of Transcend Instance\n title: name.replace('.yml', ''),\n attributes: [\n // Sync domain list\n ...(input?.domains\n ? [\n {\n key: 'Transcend Domain List',\n values: [...new Set(input.domains)],\n },\n ]\n : []),\n // Sync bundle URLs\n ...(input?.bundleUrls\n ? [\n {\n key: 'Airgap Production URL',\n values: [input.bundleUrls.PRODUCTION],\n },\n {\n key: 'Airgap Test URL',\n values: [input.bundleUrls.TEST],\n },\n {\n key: 'Airgap XDI URL',\n values: [\n input.bundleUrls.PRODUCTION.replace('airgap.js', 'xdi.js'),\n ],\n },\n ]\n : []),\n // Sync partition keys\n ...(input?.partition\n ? [\n {\n key: 'Consent Partition Key',\n values: [input.partition],\n },\n ]\n : []),\n ],\n }),\n );\n\n // Log out info on airgap scripts to host\n logger.info('\\n\\n~~~~~~~~~~~\\nAirgap scripts to host:');\n businessEntities.forEach(({ attributes, title }, ind) => {\n attributes\n ?.find((attr) => attr.key === 'Airgap Production URL')\n ?.values?.forEach((url) => {\n logger.info(`${ind}) ${title} - ${url}`);\n });\n });\n\n return businessEntities;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require(`./enums-CBXlBJii.cjs`);let t=require(`@transcend-io/privacy-types`);var n=typeof global==`object`&&global&&global.Object===Object&&global,r=n,i=typeof self==`object`&&self&&self.Object===Object&&self,a=r||i||Function(`return this`)(),o=a,s=o.Symbol,c=s,l=Object.prototype,u=l.hasOwnProperty,d=l.toString,f=c?c.toStringTag:void 0;function p(e){var t=u.call(e,f),n=e[f];try{e[f]=void 0;var r=!0}catch{}var i=d.call(e);return r&&(t?e[f]=n:delete e[f]),i}var m=p,h=Object.prototype.toString;function g(e){return h.call(e)}var _=g,v=`[object Null]`,y=`[object Undefined]`,ee=c?c.toStringTag:void 0;function te(e){return e==null?e===void 0?y:v:ee&&ee in Object(e)?m(e):_(e)}var b=te;function ne(e){return typeof e==`object`&&!!e}var x=ne,re=`[object Symbol]`;function ie(e){return typeof e==`symbol`||x(e)&&b(e)==re}var S=ie;function ae(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var oe=ae,se=Array.isArray,C=se,ce=1/0,le=c?c.prototype:void 0,ue=le?le.toString:void 0;function de(e){if(typeof e==`string`)return e;if(C(e))return oe(e,de)+``;if(S(e))return ue?ue.call(e):``;var t=e+``;return t==`0`&&1/e==-ce?`-0`:t}var fe=de;function pe(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}var w=pe;function me(e){return e}var he=me,ge=`[object AsyncFunction]`,_e=`[object Function]`,ve=`[object GeneratorFunction]`,ye=`[object Proxy]`;function be(e){if(!w(e))return!1;var t=b(e);return t==_e||t==ve||t==ge||t==ye}var xe=be,Se=o[`__core-js_shared__`],T=Se,Ce=function(){var e=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||``);return e?`Symbol(src)_1.`+e:``}();function we(e){return!!Ce&&Ce in e}var Te=we,Ee=Function.prototype.toString;function De(e){if(e!=null){try{return Ee.call(e)}catch{}try{return e+``}catch{}}return``}var E=De,Oe=/[\\^$.*+?()[\]{}|]/g,ke=/^\[object .+?Constructor\]$/,Ae=Function.prototype,je=Object.prototype,Me=Ae.toString,Ne=je.hasOwnProperty,Pe=RegExp(`^`+Me.call(Ne).replace(Oe,`\\$&`).replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,`$1.*?`)+`$`);function Fe(e){return!w(e)||Te(e)?!1:(xe(e)?Pe:ke).test(E(e))}var Ie=Fe;function Le(e,t){return e?.[t]}var Re=Le;function ze(e,t){var n=Re(e,t);return Ie(n)?n:void 0}var D=ze,Be=D(o,`WeakMap`),Ve=Be,He=function(){try{var e=D(Object,`defineProperty`);return e({},``,{}),e}catch{}}(),Ue=He,We=9007199254740991,Ge=/^(?:0|[1-9]\d*)$/;function Ke(e,t){var n=typeof e;return t??=We,!!t&&(n==`number`||n!=`symbol`&&Ge.test(e))&&e>-1&&e%1==0&&e<t}var qe=Ke;function Je(e,t,n){t==`__proto__`&&Ue?Ue(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Ye=Je;function Xe(e,t){return e===t||e!==e&&t!==t}var Ze=Xe,Qe=9007199254740991;function $e(e){return typeof e==`number`&&e>-1&&e%1==0&&e<=Qe}var et=$e;function tt(e){return e!=null&&et(e.length)&&!xe(e)}var O=tt,nt=Object.prototype;function rt(e){var t=e&&e.constructor;return e===(typeof t==`function`&&t.prototype||nt)}var it=rt;function at(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var ot=at,st=`[object Arguments]`;function ct(e){return x(e)&&b(e)==st}var lt=ct,ut=Object.prototype,dt=ut.hasOwnProperty,ft=ut.propertyIsEnumerable,pt=lt(function(){return arguments}())?lt:function(e){return x(e)&&dt.call(e,`callee`)&&!ft.call(e,`callee`)},k=pt;function mt(){return!1}var ht=mt,gt=typeof exports==`object`&&exports&&!exports.nodeType&&exports,_t=gt&&typeof module==`object`&&module&&!module.nodeType&&module,vt=_t&&_t.exports===gt?o.Buffer:void 0,yt=(vt?vt.isBuffer:void 0)||ht,A=yt,bt=`[object Arguments]`,xt=`[object Array]`,St=`[object Boolean]`,Ct=`[object Date]`,wt=`[object Error]`,Tt=`[object Function]`,Et=`[object Map]`,Dt=`[object Number]`,Ot=`[object Object]`,kt=`[object RegExp]`,At=`[object Set]`,jt=`[object String]`,Mt=`[object WeakMap]`,Nt=`[object ArrayBuffer]`,Pt=`[object DataView]`,Ft=`[object Float32Array]`,It=`[object Float64Array]`,Lt=`[object Int8Array]`,Rt=`[object Int16Array]`,zt=`[object Int32Array]`,Bt=`[object Uint8Array]`,Vt=`[object Uint8ClampedArray]`,Ht=`[object Uint16Array]`,Ut=`[object Uint32Array]`,j={};j[Ft]=j[It]=j[Lt]=j[Rt]=j[zt]=j[Bt]=j[Vt]=j[Ht]=j[Ut]=!0,j[bt]=j[xt]=j[Nt]=j[St]=j[Pt]=j[Ct]=j[wt]=j[Tt]=j[Et]=j[Dt]=j[Ot]=j[kt]=j[At]=j[jt]=j[Mt]=!1;function Wt(e){return x(e)&&et(e.length)&&!!j[b(e)]}var Gt=Wt;function Kt(e){return function(t){return e(t)}}var qt=Kt,Jt=typeof exports==`object`&&exports&&!exports.nodeType&&exports,M=Jt&&typeof module==`object`&&module&&!module.nodeType&&module,N=M&&M.exports===Jt&&r.process,Yt=function(){try{return M&&M.require&&M.require(`util`).types||N&&N.binding&&N.binding(`util`)}catch{}}(),Xt=Yt,Zt=Xt&&Xt.isTypedArray,Qt=Zt?qt(Zt):Gt,$t=Qt,en=Object.prototype.hasOwnProperty;function tn(e,t){var n=C(e),r=!n&&k(e),i=!n&&!r&&A(e),a=!n&&!r&&!i&&$t(e),o=n||r||i||a,s=o?ot(e.length,String):[],c=s.length;for(var l in e)(t||en.call(e,l))&&!(o&&(l==`length`||i&&(l==`offset`||l==`parent`)||a&&(l==`buffer`||l==`byteLength`||l==`byteOffset`)||qe(l,c)))&&s.push(l);return s}var nn=tn;function rn(e,t){return function(n){return e(t(n))}}var an=rn,on=an(Object.keys,Object),sn=on,cn=Object.prototype.hasOwnProperty;function ln(e){if(!it(e))return sn(e);var t=[];for(var n in Object(e))cn.call(e,n)&&n!=`constructor`&&t.push(n);return t}var un=ln;function dn(e){return O(e)?nn(e):un(e)}var P=dn,fn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,pn=/^\w*$/;function mn(e,t){if(C(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||S(e)?!0:pn.test(e)||!fn.test(e)||t!=null&&e in Object(t)}var F=mn,hn=D(Object,`create`),I=hn;function gn(){this.__data__=I?I(null):{},this.size=0}var _n=gn;function vn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var yn=vn,bn=`__lodash_hash_undefined__`,xn=Object.prototype.hasOwnProperty;function Sn(e){var t=this.__data__;if(I){var n=t[e];return n===bn?void 0:n}return xn.call(t,e)?t[e]:void 0}var Cn=Sn,wn=Object.prototype.hasOwnProperty;function Tn(e){var t=this.__data__;return I?t[e]!==void 0:wn.call(t,e)}var En=Tn,Dn=`__lodash_hash_undefined__`;function On(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=I&&t===void 0?Dn:t,this}var kn=On;function L(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}L.prototype.clear=_n,L.prototype.delete=yn,L.prototype.get=Cn,L.prototype.has=En,L.prototype.set=kn;var An=L;function jn(){this.__data__=[],this.size=0}var Mn=jn;function Nn(e,t){for(var n=e.length;n--;)if(Ze(e[n][0],t))return n;return-1}var R=Nn,Pn=Array.prototype.splice;function Fn(e){var t=this.__data__,n=R(t,e);return n<0?!1:(n==t.length-1?t.pop():Pn.call(t,n,1),--this.size,!0)}var In=Fn;function Ln(e){var t=this.__data__,n=R(t,e);return n<0?void 0:t[n][1]}var Rn=Ln;function zn(e){return R(this.__data__,e)>-1}var Bn=zn;function Vn(e,t){var n=this.__data__,r=R(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Hn=Vn;function z(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}z.prototype.clear=Mn,z.prototype.delete=In,z.prototype.get=Rn,z.prototype.has=Bn,z.prototype.set=Hn;var B=z,Un=D(o,`Map`),V=Un;function Wn(){this.size=0,this.__data__={hash:new An,map:new(V||B),string:new An}}var Gn=Wn;function Kn(e){var t=typeof e;return t==`string`||t==`number`||t==`symbol`||t==`boolean`?e!==`__proto__`:e===null}var qn=Kn;function Jn(e,t){var n=e.__data__;return qn(t)?n[typeof t==`string`?`string`:`hash`]:n.map}var H=Jn;function Yn(e){var t=H(this,e).delete(e);return this.size-=t?1:0,t}var Xn=Yn;function Zn(e){return H(this,e).get(e)}var Qn=Zn;function $n(e){return H(this,e).has(e)}var er=$n;function tr(e,t){var n=H(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var nr=tr;function U(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}U.prototype.clear=Gn,U.prototype.delete=Xn,U.prototype.get=Qn,U.prototype.has=er,U.prototype.set=nr;var W=U,rr=`Expected a function`;function G(e,t){if(typeof e!=`function`||t!=null&&typeof t!=`function`)throw TypeError(rr);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(G.Cache||W),n}G.Cache=W;var ir=G,ar=500;function or(e){var t=ir(e,function(e){return n.size===ar&&n.clear(),e}),n=t.cache;return t}var sr=or,cr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,lr=/\\(\\)?/g,ur=sr(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(cr,function(e,n,r,i){t.push(r?i.replace(lr,`$1`):n||e)}),t}),dr=ur;function fr(e){return e==null?``:fe(e)}var pr=fr;function mr(e,t){return C(e)?e:F(e,t)?[e]:dr(pr(e))}var hr=mr,gr=1/0;function _r(e){if(typeof e==`string`||S(e))return e;var t=e+``;return t==`0`&&1/e==-gr?`-0`:t}var K=_r;function vr(e,t){t=hr(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[K(t[n++])];return n&&n==r?e:void 0}var q=vr;function yr(e,t,n){var r=e==null?void 0:q(e,t);return r===void 0?n:r}var br=yr;function xr(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}var Sr=xr;function Cr(){this.__data__=new B,this.size=0}var wr=Cr;function Tr(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var Er=Tr;function Dr(e){return this.__data__.get(e)}var Or=Dr;function kr(e){return this.__data__.has(e)}var Ar=kr,jr=200;function Mr(e,t){var n=this.__data__;if(n instanceof B){var r=n.__data__;if(!V||r.length<jr-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new W(r)}return n.set(e,t),this.size=n.size,this}var Nr=Mr;function J(e){this.size=(this.__data__=new B(e)).size}J.prototype.clear=wr,J.prototype.delete=Er,J.prototype.get=Or,J.prototype.has=Ar,J.prototype.set=Nr;var Y=J;function Pr(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}var Fr=Pr;function Ir(){return[]}var Lr=Ir,Rr=Object.prototype.propertyIsEnumerable,zr=Object.getOwnPropertySymbols,Br=zr?function(e){return e==null?[]:(e=Object(e),Fr(zr(e),function(t){return Rr.call(e,t)}))}:Lr,Vr=Br;function Hr(e,t,n){var r=t(e);return C(e)?r:Sr(r,n(e))}var Ur=Hr;function Wr(e){return Ur(e,P,Vr)}var Gr=Wr,Kr=D(o,`DataView`),qr=Kr,Jr=D(o,`Promise`),Yr=Jr,Xr=D(o,`Set`),X=Xr,Zr=`[object Map]`,Qr=`[object Object]`,$r=`[object Promise]`,ei=`[object Set]`,ti=`[object WeakMap]`,ni=`[object DataView]`,ri=E(qr),ii=E(V),ai=E(Yr),oi=E(X),si=E(Ve),Z=b;(qr&&Z(new qr(new ArrayBuffer(1)))!=ni||V&&Z(new V)!=Zr||Yr&&Z(Yr.resolve())!=$r||X&&Z(new X)!=ei||Ve&&Z(new Ve)!=ti)&&(Z=function(e){var t=b(e),n=t==Qr?e.constructor:void 0,r=n?E(n):``;if(r)switch(r){case ri:return ni;case ii:return Zr;case ai:return $r;case oi:return ei;case si:return ti}return t});var ci=Z,li=o.Uint8Array,ui=li,di=`__lodash_hash_undefined__`;function fi(e){return this.__data__.set(e,di),this}var pi=fi;function mi(e){return this.__data__.has(e)}var hi=mi;function Q(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new W;++t<n;)this.add(e[t])}Q.prototype.add=Q.prototype.push=pi,Q.prototype.has=hi;var gi=Q;function _i(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var vi=_i;function yi(e,t){return e.has(t)}var bi=yi,xi=1,Si=2;function Ci(e,t,n,r,i,a){var o=n&xi,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&Si?new gi:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var m=e[d],h=t[d];if(r)var g=o?r(h,m,d,t,e,a):r(m,h,d,e,t,a);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!vi(t,function(e,t){if(!bi(p,t)&&(m===e||i(m,e,n,r,a)))return p.push(t)})){f=!1;break}}else if(!(m===h||i(m,h,n,r,a))){f=!1;break}}return a.delete(e),a.delete(t),f}var wi=Ci;function Ti(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}var Ei=Ti;function Di(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}var Oi=Di,ki=1,Ai=2,ji=`[object Boolean]`,Mi=`[object Date]`,Ni=`[object Error]`,Pi=`[object Map]`,Fi=`[object Number]`,Ii=`[object RegExp]`,Li=`[object Set]`,Ri=`[object String]`,zi=`[object Symbol]`,Bi=`[object ArrayBuffer]`,Vi=`[object DataView]`,Hi=c?c.prototype:void 0,Ui=Hi?Hi.valueOf:void 0;function Wi(e,t,n,r,i,a,o){switch(n){case Vi:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Bi:return!(e.byteLength!=t.byteLength||!a(new ui(e),new ui(t)));case ji:case Mi:case Fi:return Ze(+e,+t);case Ni:return e.name==t.name&&e.message==t.message;case Ii:case Ri:return e==t+``;case Pi:var s=Ei;case Li:var c=r&ki;if(s||=Oi,e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;r|=Ai,o.set(e,t);var u=wi(s(e),s(t),r,i,a,o);return o.delete(e),u;case zi:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}var Gi=Wi,Ki=1,qi=Object.prototype.hasOwnProperty;function Ji(e,t,n,r,i,a){var o=n&Ki,s=Gr(e),c=s.length;if(c!=Gr(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:qi.call(t,u)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var m=o;++l<c;){u=s[l];var h=e[u],g=t[u];if(r)var _=o?r(g,h,u,t,e,a):r(h,g,u,e,t,a);if(!(_===void 0?h===g||i(h,g,n,r,a):_)){p=!1;break}m||=u==`constructor`}if(p&&!m){var v=e.constructor,y=t.constructor;v!=y&&`constructor`in e&&`constructor`in t&&!(typeof v==`function`&&v instanceof v&&typeof y==`function`&&y instanceof y)&&(p=!1)}return a.delete(e),a.delete(t),p}var Yi=Ji,Xi=1,Zi=`[object Arguments]`,Qi=`[object Array]`,$=`[object Object]`,$i=Object.prototype.hasOwnProperty;function ea(e,t,n,r,i,a){var o=C(e),s=C(t),c=o?Qi:ci(e),l=s?Qi:ci(t);c=c==Zi?$:c,l=l==Zi?$:l;var u=c==$,d=l==$,f=c==l;if(f&&A(e)){if(!A(t))return!1;o=!0,u=!1}if(f&&!u)return a||=new Y,o||$t(e)?wi(e,t,n,r,i,a):Gi(e,t,c,n,r,i,a);if(!(n&Xi)){var p=u&&$i.call(e,`__wrapped__`),m=d&&$i.call(t,`__wrapped__`);if(p||m){var h=p?e.value():e,g=m?t.value():t;return a||=new Y,i(h,g,n,r,a)}}return f?(a||=new Y,Yi(e,t,n,r,i,a)):!1}var ta=ea;function na(e,t,n,r,i){return e===t?!0:e==null||t==null||!x(e)&&!x(t)?e!==e&&t!==t:ta(e,t,n,r,na,i)}var ra=na,ia=1,aa=2;function oa(e,t,n,r){var i=n.length,a=i,o=!r;if(e==null)return!a;for(e=Object(e);i--;){var s=n[i];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<a;){s=n[i];var c=s[0],l=e[c],u=s[1];if(o&&s[2]){if(l===void 0&&!(c in e))return!1}else{var d=new Y;if(r)var f=r(l,u,c,e,t,d);if(!(f===void 0?ra(u,l,ia|aa,r,d):f))return!1}}return!0}var sa=oa;function ca(e){return e===e&&!w(e)}var la=ca;function ua(e){for(var t=P(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,la(i)]}return t}var da=ua;function fa(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}var pa=fa;function ma(e){var t=da(e);return t.length==1&&t[0][2]?pa(t[0][0],t[0][1]):function(n){return n===e||sa(n,e,t)}}var ha=ma;function ga(e,t){return e!=null&&t in Object(e)}var _a=ga;function va(e,t,n){t=hr(t,e);for(var r=-1,i=t.length,a=!1;++r<i;){var o=K(t[r]);if(!(a=e!=null&&n(e,o)))break;e=e[o]}return a||++r!=i?a:(i=e==null?0:e.length,!!i&&et(i)&&qe(o,i)&&(C(e)||k(e)))}var ya=va;function ba(e,t){return e!=null&&ya(e,t,_a)}var xa=ba,Sa=1,Ca=2;function wa(e,t){return F(e)&&la(t)?pa(K(e),t):function(n){var r=br(n,e);return r===void 0&&r===t?xa(n,e):ra(t,r,Sa|Ca)}}var Ta=wa;function Ea(e){return function(t){return t?.[e]}}var Da=Ea;function Oa(e){return function(t){return q(t,e)}}var ka=Oa;function Aa(e){return F(e)?Da(K(e)):ka(e)}var ja=Aa;function Ma(e){return typeof e==`function`?e:e==null?he:typeof e==`object`?C(e)?Ta(e[0],e[1]):ha(e):ja(e)}var Na=Ma;function Pa(e,t,n,r){for(var i=-1,a=e==null?0:e.length;++i<a;){var o=e[i];t(r,o,n(o),e)}return r}var Fa=Pa;function Ia(e){return function(t,n,r){for(var i=-1,a=Object(t),o=r(t),s=o.length;s--;){var c=o[e?s:++i];if(n(a[c],c,a)===!1)break}return t}}var La=Ia,Ra=La(),za=Ra;function Ba(e,t){return e&&za(e,t,P)}var Va=Ba;function Ha(e,t){return function(n,r){if(n==null)return n;if(!O(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++a<i)&&r(o[a],a,o)!==!1;);return n}}var Ua=Ha,Wa=Ua(Va),Ga=Wa;function Ka(e,t,n,r){return Ga(e,function(e,i,a){t(r,e,n(e),a)}),r}var qa=Ka;function Ja(e,t){return function(n,r){var i=C(n)?Fa:qa,a=t?t():{};return i(n,e,Na(r,2),a)}}var Ya=Ja,Xa=Ya(function(e,t,n){Ye(e,n,t)}),Za=Xa,Qa=`A command line interface for programmatic operations across Transcend.`,$a=`8.33.0`;const eo=`transcend`,to=`https://app.transcend.io`,no=`${to}/infrastructure/integrations`,ro=`${to}/data-map/data-inventory/data-points`,io=process.env.TRANSCEND_API_URL||`https://api.transcend.io`,ao=process.env.TRANSCEND_CONSENT_API_URL||`https://consent.transcend.io`,oo={[e.o.ApiKeys]:[t.ScopeName.ViewApiKeys],[e.o.Templates]:[t.ScopeName.ManageEmailTemplates],[e.o.DataSilos]:[t.ScopeName.ManageDataMap,t.ScopeName.ConnectDataSilos],[e.o.Enrichers]:[t.ScopeName.ManageRequestIdentities],[e.o.BusinessEntities]:[t.ScopeName.ManageDataInventory],[e.o.ProcessingActivities]:[t.ScopeName.ManageDataMap],[e.o.Identifiers]:[t.ScopeName.ManageRequestIdentities],[e.o.Attributes]:[t.ScopeName.ManageGlobalAttributes],[e.o.DataFlows]:[t.ScopeName.ManageDataFlow],[e.o.Cookies]:[t.ScopeName.ManageDataFlow],[e.o.ConsentManager]:[t.ScopeName.ManageConsentManagerDeveloperSettings],[e.o.Partitions]:[t.ScopeName.ManageConsentManagerDeveloperSettings],[e.o.Actions]:[t.ScopeName.ManageDataSubjectRequestSettings],[e.o.DataSubjects]:[t.ScopeName.ManageDataSubjectRequestSettings],[e.o.Prompts]:[t.ScopeName.ManagePrompts],[e.o.PromptPartials]:[t.ScopeName.ManagePrompts],[e.o.PromptGroups]:[t.ScopeName.ManagePrompts],[e.o.Agents]:[t.ScopeName.ManagePathfinder],[e.o.AgentFunctions]:[t.ScopeName.ManagePathfinder],[e.o.AgentFiles]:[t.ScopeName.ManagePathfinder],[e.o.Vendors]:[t.ScopeName.ManageDataInventory],[e.o.DataCategories]:[t.ScopeName.ManageDataInventory],[e.o.ProcessingPurposes]:[t.ScopeName.ManageDataInventory],[e.o.ActionItems]:[t.ScopeName.ManageAllActionItems,t.ScopeName.ViewGlobalAttributes],[e.o.ActionItemCollections]:[t.ScopeName.ManageActionItemCollections],[e.o.Teams]:[t.ScopeName.ManageAccessControl],[e.o.Messages]:[t.ScopeName.ManageIntlMessages],[e.o.PrivacyCenters]:[t.ScopeName.ManagePrivacyCenter],[e.o.Policies]:[t.ScopeName.ManagePolicies],[e.o.Assessments]:[t.ScopeName.ManageAssessments],[e.o.AssessmentTemplates]:[t.ScopeName.ManageAssessments],[e.o.Purposes]:[t.ScopeName.ManageConsentManager,t.ScopeName.ManagePreferenceStoreSettings],[e.o.SystemDiscovery]:[t.ScopeName.ManageDataMap]},so={[e.o.ApiKeys]:[t.ScopeName.ViewApiKeys],[e.o.Templates]:[t.ScopeName.ViewEmailTemplates],[e.o.DataSilos]:[t.ScopeName.ViewDataMap,t.ScopeName.ViewDataSubjectRequestSettings],[e.o.Enrichers]:[t.ScopeName.ViewRequestIdentitySettings],[e.o.BusinessEntities]:[t.ScopeName.ViewDataInventory],[e.o.ProcessingActivities]:[t.ScopeName.ViewDataInventory],[e.o.Identifiers]:[t.ScopeName.ViewRequestIdentitySettings],[e.o.Attributes]:[t.ScopeName.ViewGlobalAttributes],[e.o.DataFlows]:[t.ScopeName.ViewDataFlow],[e.o.Cookies]:[t.ScopeName.ViewDataFlow],[e.o.ConsentManager]:[t.ScopeName.ViewConsentManager],[e.o.Partitions]:[t.ScopeName.ViewConsentManager],[e.o.Actions]:[t.ScopeName.ViewDataSubjectRequestSettings],[e.o.DataSubjects]:[t.ScopeName.ViewDataSubjectRequestSettings],[e.o.Prompts]:[t.ScopeName.ViewPrompts],[e.o.PromptPartials]:[t.ScopeName.ViewPrompts],[e.o.PromptGroups]:[t.ScopeName.ViewPrompts],[e.o.Agents]:[t.ScopeName.ViewPathfinder],[e.o.AgentFunctions]:[t.ScopeName.ViewPathfinder],[e.o.AgentFiles]:[t.ScopeName.ViewPathfinder],[e.o.Vendors]:[t.ScopeName.ViewDataInventory],[e.o.DataCategories]:[t.ScopeName.ViewDataInventory],[e.o.ProcessingPurposes]:[t.ScopeName.ViewDataInventory],[e.o.ActionItemCollections]:[t.ScopeName.ViewAllActionItems],[e.o.ActionItems]:[t.ScopeName.ViewAllActionItems],[e.o.Teams]:[t.ScopeName.ViewScopes],[e.o.Messages]:[t.ScopeName.ViewIntlMessages],[e.o.PrivacyCenters]:[t.ScopeName.ViewPrivacyCenter],[e.o.Policies]:[t.ScopeName.ViewPolicies],[e.o.Assessments]:[t.ScopeName.ViewAssessments],[e.o.AssessmentTemplates]:[t.ScopeName.ViewAssessments],[e.o.Purposes]:[t.ScopeName.ViewConsentManager,t.ScopeName.ViewPreferenceStoreSettings],[e.o.SystemDiscovery]:[t.ScopeName.ViewDataMap]},co={[e.o.ApiKeys]:`api-keys`,[e.o.Attributes]:`attributes`,[e.o.DataFlows]:`data-flows`,[e.o.Cookies]:`cookies`,[e.o.ConsentManager]:`consent-manager`,[e.o.Partitions]:`partitions`,[e.o.Actions]:`actions`,[e.o.DataSubjects]:`data-subjects`,[e.o.BusinessEntities]:`business-entities`,[e.o.ProcessingActivities]:`processing-activities`,[e.o.Identifiers]:`identifiers`,[e.o.Enrichers]:`enrichers`,[e.o.DataSilos]:`data-silos`,[e.o.Templates]:`templates`,[e.o.Prompts]:`prompts`,[e.o.PromptPartials]:`prompt-partials`,[e.o.PromptGroups]:`prompt-groups`,[e.o.Agents]:`agents`,[e.o.AgentFunctions]:`agent-functions`,[e.o.AgentFiles]:`agent-files`,[e.o.Vendors]:`vendors`,[e.o.DataCategories]:`data-categories`,[e.o.ProcessingPurposes]:`processing-purposes`,[e.o.ActionItems]:`action-items`,[e.o.ActionItemCollections]:`action-item-collections`,[e.o.Teams]:`teams`,[e.o.Messages]:`messages`,[e.o.PrivacyCenters]:`privacy-center`,[e.o.Policies]:`policies`,[e.o.Assessments]:`assessments`,[e.o.AssessmentTemplates]:`assessment-templates`,[e.o.Purposes]:`purposes`,[e.o.SystemDiscovery]:`system-discovery`},lo=Za(Object.entries(t.TRANSCEND_SCOPES).map(([e,t])=>({...t,name:e})),`title`),uo=Object.keys(lo),fo=new Set([429,502,500,504,329]),po=process.env.DEBUG===`1`;Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return gi}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return pr}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return qt}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return Ue}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return bi}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return Sr}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return Ya}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return io}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return Na}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return lo}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return oo}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return co}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return Za}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return $a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return po}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return uo}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return Qa}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ro}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return ao}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return`transcend`}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return no}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return fo}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return to}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return so}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return Ga}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return Oi}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Va}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return S}});
2
- //# sourceMappingURL=constants-BD9ZSD52.cjs.map
1
+ const e=require(`./enums-CBXlBJii.cjs`);let t=require(`@transcend-io/privacy-types`);var n=typeof global==`object`&&global&&global.Object===Object&&global,r=n,i=typeof self==`object`&&self&&self.Object===Object&&self,a=r||i||Function(`return this`)(),o=a,s=o.Symbol,c=s,l=Object.prototype,u=l.hasOwnProperty,d=l.toString,f=c?c.toStringTag:void 0;function p(e){var t=u.call(e,f),n=e[f];try{e[f]=void 0;var r=!0}catch{}var i=d.call(e);return r&&(t?e[f]=n:delete e[f]),i}var m=p,h=Object.prototype.toString;function g(e){return h.call(e)}var _=g,v=`[object Null]`,y=`[object Undefined]`,ee=c?c.toStringTag:void 0;function te(e){return e==null?e===void 0?y:v:ee&&ee in Object(e)?m(e):_(e)}var b=te;function ne(e){return typeof e==`object`&&!!e}var x=ne,re=`[object Symbol]`;function ie(e){return typeof e==`symbol`||x(e)&&b(e)==re}var S=ie;function ae(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var oe=ae,se=Array.isArray,C=se,ce=1/0,le=c?c.prototype:void 0,ue=le?le.toString:void 0;function de(e){if(typeof e==`string`)return e;if(C(e))return oe(e,de)+``;if(S(e))return ue?ue.call(e):``;var t=e+``;return t==`0`&&1/e==-ce?`-0`:t}var fe=de;function pe(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}var w=pe;function me(e){return e}var he=me,ge=`[object AsyncFunction]`,_e=`[object Function]`,ve=`[object GeneratorFunction]`,ye=`[object Proxy]`;function be(e){if(!w(e))return!1;var t=b(e);return t==_e||t==ve||t==ge||t==ye}var xe=be,Se=o[`__core-js_shared__`],T=Se,Ce=function(){var e=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||``);return e?`Symbol(src)_1.`+e:``}();function we(e){return!!Ce&&Ce in e}var Te=we,Ee=Function.prototype.toString;function De(e){if(e!=null){try{return Ee.call(e)}catch{}try{return e+``}catch{}}return``}var E=De,Oe=/[\\^$.*+?()[\]{}|]/g,ke=/^\[object .+?Constructor\]$/,Ae=Function.prototype,je=Object.prototype,Me=Ae.toString,Ne=je.hasOwnProperty,Pe=RegExp(`^`+Me.call(Ne).replace(Oe,`\\$&`).replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,`$1.*?`)+`$`);function Fe(e){return!w(e)||Te(e)?!1:(xe(e)?Pe:ke).test(E(e))}var Ie=Fe;function Le(e,t){return e?.[t]}var Re=Le;function ze(e,t){var n=Re(e,t);return Ie(n)?n:void 0}var D=ze,Be=D(o,`WeakMap`),Ve=Be,He=function(){try{var e=D(Object,`defineProperty`);return e({},``,{}),e}catch{}}(),Ue=He,We=9007199254740991,Ge=/^(?:0|[1-9]\d*)$/;function Ke(e,t){var n=typeof e;return t??=We,!!t&&(n==`number`||n!=`symbol`&&Ge.test(e))&&e>-1&&e%1==0&&e<t}var qe=Ke;function Je(e,t,n){t==`__proto__`&&Ue?Ue(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Ye=Je;function Xe(e,t){return e===t||e!==e&&t!==t}var Ze=Xe,Qe=9007199254740991;function $e(e){return typeof e==`number`&&e>-1&&e%1==0&&e<=Qe}var et=$e;function tt(e){return e!=null&&et(e.length)&&!xe(e)}var O=tt,nt=Object.prototype;function rt(e){var t=e&&e.constructor;return e===(typeof t==`function`&&t.prototype||nt)}var it=rt;function at(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var ot=at,st=`[object Arguments]`;function ct(e){return x(e)&&b(e)==st}var lt=ct,ut=Object.prototype,dt=ut.hasOwnProperty,ft=ut.propertyIsEnumerable,pt=lt(function(){return arguments}())?lt:function(e){return x(e)&&dt.call(e,`callee`)&&!ft.call(e,`callee`)},k=pt;function mt(){return!1}var ht=mt,gt=typeof exports==`object`&&exports&&!exports.nodeType&&exports,_t=gt&&typeof module==`object`&&module&&!module.nodeType&&module,vt=_t&&_t.exports===gt?o.Buffer:void 0,yt=(vt?vt.isBuffer:void 0)||ht,A=yt,bt=`[object Arguments]`,xt=`[object Array]`,St=`[object Boolean]`,Ct=`[object Date]`,wt=`[object Error]`,Tt=`[object Function]`,Et=`[object Map]`,Dt=`[object Number]`,Ot=`[object Object]`,kt=`[object RegExp]`,At=`[object Set]`,jt=`[object String]`,Mt=`[object WeakMap]`,Nt=`[object ArrayBuffer]`,Pt=`[object DataView]`,Ft=`[object Float32Array]`,It=`[object Float64Array]`,Lt=`[object Int8Array]`,Rt=`[object Int16Array]`,zt=`[object Int32Array]`,Bt=`[object Uint8Array]`,Vt=`[object Uint8ClampedArray]`,Ht=`[object Uint16Array]`,Ut=`[object Uint32Array]`,j={};j[Ft]=j[It]=j[Lt]=j[Rt]=j[zt]=j[Bt]=j[Vt]=j[Ht]=j[Ut]=!0,j[bt]=j[xt]=j[Nt]=j[St]=j[Pt]=j[Ct]=j[wt]=j[Tt]=j[Et]=j[Dt]=j[Ot]=j[kt]=j[At]=j[jt]=j[Mt]=!1;function Wt(e){return x(e)&&et(e.length)&&!!j[b(e)]}var Gt=Wt;function Kt(e){return function(t){return e(t)}}var qt=Kt,Jt=typeof exports==`object`&&exports&&!exports.nodeType&&exports,M=Jt&&typeof module==`object`&&module&&!module.nodeType&&module,N=M&&M.exports===Jt&&r.process,Yt=function(){try{return M&&M.require&&M.require(`util`).types||N&&N.binding&&N.binding(`util`)}catch{}}(),Xt=Yt,Zt=Xt&&Xt.isTypedArray,Qt=Zt?qt(Zt):Gt,$t=Qt,en=Object.prototype.hasOwnProperty;function tn(e,t){var n=C(e),r=!n&&k(e),i=!n&&!r&&A(e),a=!n&&!r&&!i&&$t(e),o=n||r||i||a,s=o?ot(e.length,String):[],c=s.length;for(var l in e)(t||en.call(e,l))&&!(o&&(l==`length`||i&&(l==`offset`||l==`parent`)||a&&(l==`buffer`||l==`byteLength`||l==`byteOffset`)||qe(l,c)))&&s.push(l);return s}var nn=tn;function rn(e,t){return function(n){return e(t(n))}}var an=rn,on=an(Object.keys,Object),sn=on,cn=Object.prototype.hasOwnProperty;function ln(e){if(!it(e))return sn(e);var t=[];for(var n in Object(e))cn.call(e,n)&&n!=`constructor`&&t.push(n);return t}var un=ln;function dn(e){return O(e)?nn(e):un(e)}var P=dn,fn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,pn=/^\w*$/;function mn(e,t){if(C(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||S(e)?!0:pn.test(e)||!fn.test(e)||t!=null&&e in Object(t)}var F=mn,hn=D(Object,`create`),I=hn;function gn(){this.__data__=I?I(null):{},this.size=0}var _n=gn;function vn(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var yn=vn,bn=`__lodash_hash_undefined__`,xn=Object.prototype.hasOwnProperty;function Sn(e){var t=this.__data__;if(I){var n=t[e];return n===bn?void 0:n}return xn.call(t,e)?t[e]:void 0}var Cn=Sn,wn=Object.prototype.hasOwnProperty;function Tn(e){var t=this.__data__;return I?t[e]!==void 0:wn.call(t,e)}var En=Tn,Dn=`__lodash_hash_undefined__`;function On(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=I&&t===void 0?Dn:t,this}var kn=On;function L(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}L.prototype.clear=_n,L.prototype.delete=yn,L.prototype.get=Cn,L.prototype.has=En,L.prototype.set=kn;var An=L;function jn(){this.__data__=[],this.size=0}var Mn=jn;function Nn(e,t){for(var n=e.length;n--;)if(Ze(e[n][0],t))return n;return-1}var R=Nn,Pn=Array.prototype.splice;function Fn(e){var t=this.__data__,n=R(t,e);return n<0?!1:(n==t.length-1?t.pop():Pn.call(t,n,1),--this.size,!0)}var In=Fn;function Ln(e){var t=this.__data__,n=R(t,e);return n<0?void 0:t[n][1]}var Rn=Ln;function zn(e){return R(this.__data__,e)>-1}var Bn=zn;function Vn(e,t){var n=this.__data__,r=R(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var Hn=Vn;function z(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}z.prototype.clear=Mn,z.prototype.delete=In,z.prototype.get=Rn,z.prototype.has=Bn,z.prototype.set=Hn;var B=z,Un=D(o,`Map`),V=Un;function Wn(){this.size=0,this.__data__={hash:new An,map:new(V||B),string:new An}}var Gn=Wn;function Kn(e){var t=typeof e;return t==`string`||t==`number`||t==`symbol`||t==`boolean`?e!==`__proto__`:e===null}var qn=Kn;function Jn(e,t){var n=e.__data__;return qn(t)?n[typeof t==`string`?`string`:`hash`]:n.map}var H=Jn;function Yn(e){var t=H(this,e).delete(e);return this.size-=t?1:0,t}var Xn=Yn;function Zn(e){return H(this,e).get(e)}var Qn=Zn;function $n(e){return H(this,e).has(e)}var er=$n;function tr(e,t){var n=H(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var nr=tr;function U(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}U.prototype.clear=Gn,U.prototype.delete=Xn,U.prototype.get=Qn,U.prototype.has=er,U.prototype.set=nr;var W=U,rr=`Expected a function`;function G(e,t){if(typeof e!=`function`||t!=null&&typeof t!=`function`)throw TypeError(rr);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(G.Cache||W),n}G.Cache=W;var ir=G,ar=500;function or(e){var t=ir(e,function(e){return n.size===ar&&n.clear(),e}),n=t.cache;return t}var sr=or,cr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,lr=/\\(\\)?/g,ur=sr(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(cr,function(e,n,r,i){t.push(r?i.replace(lr,`$1`):n||e)}),t}),dr=ur;function fr(e){return e==null?``:fe(e)}var pr=fr;function mr(e,t){return C(e)?e:F(e,t)?[e]:dr(pr(e))}var hr=mr,gr=1/0;function _r(e){if(typeof e==`string`||S(e))return e;var t=e+``;return t==`0`&&1/e==-gr?`-0`:t}var K=_r;function vr(e,t){t=hr(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[K(t[n++])];return n&&n==r?e:void 0}var q=vr;function yr(e,t,n){var r=e==null?void 0:q(e,t);return r===void 0?n:r}var br=yr;function xr(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}var Sr=xr;function Cr(){this.__data__=new B,this.size=0}var wr=Cr;function Tr(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var Er=Tr;function Dr(e){return this.__data__.get(e)}var Or=Dr;function kr(e){return this.__data__.has(e)}var Ar=kr,jr=200;function Mr(e,t){var n=this.__data__;if(n instanceof B){var r=n.__data__;if(!V||r.length<jr-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new W(r)}return n.set(e,t),this.size=n.size,this}var Nr=Mr;function J(e){this.size=(this.__data__=new B(e)).size}J.prototype.clear=wr,J.prototype.delete=Er,J.prototype.get=Or,J.prototype.has=Ar,J.prototype.set=Nr;var Y=J;function Pr(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}var Fr=Pr;function Ir(){return[]}var Lr=Ir,Rr=Object.prototype.propertyIsEnumerable,zr=Object.getOwnPropertySymbols,Br=zr?function(e){return e==null?[]:(e=Object(e),Fr(zr(e),function(t){return Rr.call(e,t)}))}:Lr,Vr=Br;function Hr(e,t,n){var r=t(e);return C(e)?r:Sr(r,n(e))}var Ur=Hr;function Wr(e){return Ur(e,P,Vr)}var Gr=Wr,Kr=D(o,`DataView`),qr=Kr,Jr=D(o,`Promise`),Yr=Jr,Xr=D(o,`Set`),X=Xr,Zr=`[object Map]`,Qr=`[object Object]`,$r=`[object Promise]`,ei=`[object Set]`,ti=`[object WeakMap]`,ni=`[object DataView]`,ri=E(qr),ii=E(V),ai=E(Yr),oi=E(X),si=E(Ve),Z=b;(qr&&Z(new qr(new ArrayBuffer(1)))!=ni||V&&Z(new V)!=Zr||Yr&&Z(Yr.resolve())!=$r||X&&Z(new X)!=ei||Ve&&Z(new Ve)!=ti)&&(Z=function(e){var t=b(e),n=t==Qr?e.constructor:void 0,r=n?E(n):``;if(r)switch(r){case ri:return ni;case ii:return Zr;case ai:return $r;case oi:return ei;case si:return ti}return t});var ci=Z,li=o.Uint8Array,ui=li,di=`__lodash_hash_undefined__`;function fi(e){return this.__data__.set(e,di),this}var pi=fi;function mi(e){return this.__data__.has(e)}var hi=mi;function Q(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new W;++t<n;)this.add(e[t])}Q.prototype.add=Q.prototype.push=pi,Q.prototype.has=hi;var gi=Q;function _i(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var vi=_i;function yi(e,t){return e.has(t)}var bi=yi,xi=1,Si=2;function Ci(e,t,n,r,i,a){var o=n&xi,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&Si?new gi:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var m=e[d],h=t[d];if(r)var g=o?r(h,m,d,t,e,a):r(m,h,d,e,t,a);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!vi(t,function(e,t){if(!bi(p,t)&&(m===e||i(m,e,n,r,a)))return p.push(t)})){f=!1;break}}else if(!(m===h||i(m,h,n,r,a))){f=!1;break}}return a.delete(e),a.delete(t),f}var wi=Ci;function Ti(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}var Ei=Ti;function Di(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}var Oi=Di,ki=1,Ai=2,ji=`[object Boolean]`,Mi=`[object Date]`,Ni=`[object Error]`,Pi=`[object Map]`,Fi=`[object Number]`,Ii=`[object RegExp]`,Li=`[object Set]`,Ri=`[object String]`,zi=`[object Symbol]`,Bi=`[object ArrayBuffer]`,Vi=`[object DataView]`,Hi=c?c.prototype:void 0,Ui=Hi?Hi.valueOf:void 0;function Wi(e,t,n,r,i,a,o){switch(n){case Vi:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Bi:return!(e.byteLength!=t.byteLength||!a(new ui(e),new ui(t)));case ji:case Mi:case Fi:return Ze(+e,+t);case Ni:return e.name==t.name&&e.message==t.message;case Ii:case Ri:return e==t+``;case Pi:var s=Ei;case Li:var c=r&ki;if(s||=Oi,e.size!=t.size&&!c)return!1;var l=o.get(e);if(l)return l==t;r|=Ai,o.set(e,t);var u=wi(s(e),s(t),r,i,a,o);return o.delete(e),u;case zi:if(Ui)return Ui.call(e)==Ui.call(t)}return!1}var Gi=Wi,Ki=1,qi=Object.prototype.hasOwnProperty;function Ji(e,t,n,r,i,a){var o=n&Ki,s=Gr(e),c=s.length;if(c!=Gr(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:qi.call(t,u)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var m=o;++l<c;){u=s[l];var h=e[u],g=t[u];if(r)var _=o?r(g,h,u,t,e,a):r(h,g,u,e,t,a);if(!(_===void 0?h===g||i(h,g,n,r,a):_)){p=!1;break}m||=u==`constructor`}if(p&&!m){var v=e.constructor,y=t.constructor;v!=y&&`constructor`in e&&`constructor`in t&&!(typeof v==`function`&&v instanceof v&&typeof y==`function`&&y instanceof y)&&(p=!1)}return a.delete(e),a.delete(t),p}var Yi=Ji,Xi=1,Zi=`[object Arguments]`,Qi=`[object Array]`,$=`[object Object]`,$i=Object.prototype.hasOwnProperty;function ea(e,t,n,r,i,a){var o=C(e),s=C(t),c=o?Qi:ci(e),l=s?Qi:ci(t);c=c==Zi?$:c,l=l==Zi?$:l;var u=c==$,d=l==$,f=c==l;if(f&&A(e)){if(!A(t))return!1;o=!0,u=!1}if(f&&!u)return a||=new Y,o||$t(e)?wi(e,t,n,r,i,a):Gi(e,t,c,n,r,i,a);if(!(n&Xi)){var p=u&&$i.call(e,`__wrapped__`),m=d&&$i.call(t,`__wrapped__`);if(p||m){var h=p?e.value():e,g=m?t.value():t;return a||=new Y,i(h,g,n,r,a)}}return f?(a||=new Y,Yi(e,t,n,r,i,a)):!1}var ta=ea;function na(e,t,n,r,i){return e===t?!0:e==null||t==null||!x(e)&&!x(t)?e!==e&&t!==t:ta(e,t,n,r,na,i)}var ra=na,ia=1,aa=2;function oa(e,t,n,r){var i=n.length,a=i,o=!r;if(e==null)return!a;for(e=Object(e);i--;){var s=n[i];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<a;){s=n[i];var c=s[0],l=e[c],u=s[1];if(o&&s[2]){if(l===void 0&&!(c in e))return!1}else{var d=new Y;if(r)var f=r(l,u,c,e,t,d);if(!(f===void 0?ra(u,l,ia|aa,r,d):f))return!1}}return!0}var sa=oa;function ca(e){return e===e&&!w(e)}var la=ca;function ua(e){for(var t=P(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,la(i)]}return t}var da=ua;function fa(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}var pa=fa;function ma(e){var t=da(e);return t.length==1&&t[0][2]?pa(t[0][0],t[0][1]):function(n){return n===e||sa(n,e,t)}}var ha=ma;function ga(e,t){return e!=null&&t in Object(e)}var _a=ga;function va(e,t,n){t=hr(t,e);for(var r=-1,i=t.length,a=!1;++r<i;){var o=K(t[r]);if(!(a=e!=null&&n(e,o)))break;e=e[o]}return a||++r!=i?a:(i=e==null?0:e.length,!!i&&et(i)&&qe(o,i)&&(C(e)||k(e)))}var ya=va;function ba(e,t){return e!=null&&ya(e,t,_a)}var xa=ba,Sa=1,Ca=2;function wa(e,t){return F(e)&&la(t)?pa(K(e),t):function(n){var r=br(n,e);return r===void 0&&r===t?xa(n,e):ra(t,r,Sa|Ca)}}var Ta=wa;function Ea(e){return function(t){return t?.[e]}}var Da=Ea;function Oa(e){return function(t){return q(t,e)}}var ka=Oa;function Aa(e){return F(e)?Da(K(e)):ka(e)}var ja=Aa;function Ma(e){return typeof e==`function`?e:e==null?he:typeof e==`object`?C(e)?Ta(e[0],e[1]):ha(e):ja(e)}var Na=Ma;function Pa(e,t,n,r){for(var i=-1,a=e==null?0:e.length;++i<a;){var o=e[i];t(r,o,n(o),e)}return r}var Fa=Pa;function Ia(e){return function(t,n,r){for(var i=-1,a=Object(t),o=r(t),s=o.length;s--;){var c=o[e?s:++i];if(n(a[c],c,a)===!1)break}return t}}var La=Ia,Ra=La(),za=Ra;function Ba(e,t){return e&&za(e,t,P)}var Va=Ba;function Ha(e,t){return function(n,r){if(n==null)return n;if(!O(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++a<i)&&r(o[a],a,o)!==!1;);return n}}var Ua=Ha,Wa=Ua(Va),Ga=Wa;function Ka(e,t,n,r){return Ga(e,function(e,i,a){t(r,e,n(e),a)}),r}var qa=Ka;function Ja(e,t){return function(n,r){var i=C(n)?Fa:qa,a=t?t():{};return i(n,e,Na(r,2),a)}}var Ya=Ja,Xa=Ya(function(e,t,n){Ye(e,n,t)}),Za=Xa,Qa=`A command line interface for programmatic operations across Transcend.`,$a=`8.34.0`;const eo=`transcend`,to=`https://app.transcend.io`,no=`${to}/infrastructure/integrations`,ro=`${to}/data-map/data-inventory/data-points`,io=process.env.TRANSCEND_API_URL||`https://api.transcend.io`,ao=process.env.TRANSCEND_CONSENT_API_URL||`https://consent.transcend.io`,oo={[e.o.ApiKeys]:[t.ScopeName.ViewApiKeys],[e.o.Templates]:[t.ScopeName.ManageEmailTemplates],[e.o.DataSilos]:[t.ScopeName.ManageDataMap,t.ScopeName.ConnectDataSilos],[e.o.Enrichers]:[t.ScopeName.ManageRequestIdentities],[e.o.BusinessEntities]:[t.ScopeName.ManageDataInventory],[e.o.ProcessingActivities]:[t.ScopeName.ManageDataMap],[e.o.Identifiers]:[t.ScopeName.ManageRequestIdentities],[e.o.Attributes]:[t.ScopeName.ManageGlobalAttributes],[e.o.DataFlows]:[t.ScopeName.ManageDataFlow],[e.o.Cookies]:[t.ScopeName.ManageDataFlow],[e.o.ConsentManager]:[t.ScopeName.ManageConsentManagerDeveloperSettings],[e.o.Partitions]:[t.ScopeName.ManageConsentManagerDeveloperSettings],[e.o.Actions]:[t.ScopeName.ManageDataSubjectRequestSettings],[e.o.DataSubjects]:[t.ScopeName.ManageDataSubjectRequestSettings],[e.o.Prompts]:[t.ScopeName.ManagePrompts],[e.o.PromptPartials]:[t.ScopeName.ManagePrompts],[e.o.PromptGroups]:[t.ScopeName.ManagePrompts],[e.o.Agents]:[t.ScopeName.ManagePathfinder],[e.o.AgentFunctions]:[t.ScopeName.ManagePathfinder],[e.o.AgentFiles]:[t.ScopeName.ManagePathfinder],[e.o.Vendors]:[t.ScopeName.ManageDataInventory],[e.o.DataCategories]:[t.ScopeName.ManageDataInventory],[e.o.ProcessingPurposes]:[t.ScopeName.ManageDataInventory],[e.o.ActionItems]:[t.ScopeName.ManageAllActionItems,t.ScopeName.ViewGlobalAttributes],[e.o.ActionItemCollections]:[t.ScopeName.ManageActionItemCollections],[e.o.Teams]:[t.ScopeName.ManageAccessControl],[e.o.Messages]:[t.ScopeName.ManageIntlMessages],[e.o.PrivacyCenters]:[t.ScopeName.ManagePrivacyCenter],[e.o.Policies]:[t.ScopeName.ManagePolicies],[e.o.Assessments]:[t.ScopeName.ManageAssessments],[e.o.AssessmentTemplates]:[t.ScopeName.ManageAssessments],[e.o.Purposes]:[t.ScopeName.ManageConsentManager,t.ScopeName.ManagePreferenceStoreSettings],[e.o.SystemDiscovery]:[t.ScopeName.ManageDataMap]},so={[e.o.ApiKeys]:[t.ScopeName.ViewApiKeys],[e.o.Templates]:[t.ScopeName.ViewEmailTemplates],[e.o.DataSilos]:[t.ScopeName.ViewDataMap,t.ScopeName.ViewDataSubjectRequestSettings],[e.o.Enrichers]:[t.ScopeName.ViewRequestIdentitySettings],[e.o.BusinessEntities]:[t.ScopeName.ViewDataInventory],[e.o.ProcessingActivities]:[t.ScopeName.ViewDataInventory],[e.o.Identifiers]:[t.ScopeName.ViewRequestIdentitySettings],[e.o.Attributes]:[t.ScopeName.ViewGlobalAttributes],[e.o.DataFlows]:[t.ScopeName.ViewDataFlow],[e.o.Cookies]:[t.ScopeName.ViewDataFlow],[e.o.ConsentManager]:[t.ScopeName.ViewConsentManager],[e.o.Partitions]:[t.ScopeName.ViewConsentManager],[e.o.Actions]:[t.ScopeName.ViewDataSubjectRequestSettings],[e.o.DataSubjects]:[t.ScopeName.ViewDataSubjectRequestSettings],[e.o.Prompts]:[t.ScopeName.ViewPrompts],[e.o.PromptPartials]:[t.ScopeName.ViewPrompts],[e.o.PromptGroups]:[t.ScopeName.ViewPrompts],[e.o.Agents]:[t.ScopeName.ViewPathfinder],[e.o.AgentFunctions]:[t.ScopeName.ViewPathfinder],[e.o.AgentFiles]:[t.ScopeName.ViewPathfinder],[e.o.Vendors]:[t.ScopeName.ViewDataInventory],[e.o.DataCategories]:[t.ScopeName.ViewDataInventory],[e.o.ProcessingPurposes]:[t.ScopeName.ViewDataInventory],[e.o.ActionItemCollections]:[t.ScopeName.ViewAllActionItems],[e.o.ActionItems]:[t.ScopeName.ViewAllActionItems],[e.o.Teams]:[t.ScopeName.ViewScopes],[e.o.Messages]:[t.ScopeName.ViewIntlMessages],[e.o.PrivacyCenters]:[t.ScopeName.ViewPrivacyCenter],[e.o.Policies]:[t.ScopeName.ViewPolicies],[e.o.Assessments]:[t.ScopeName.ViewAssessments],[e.o.AssessmentTemplates]:[t.ScopeName.ViewAssessments],[e.o.Purposes]:[t.ScopeName.ViewConsentManager,t.ScopeName.ViewPreferenceStoreSettings],[e.o.SystemDiscovery]:[t.ScopeName.ViewDataMap]},co={[e.o.ApiKeys]:`api-keys`,[e.o.Attributes]:`attributes`,[e.o.DataFlows]:`data-flows`,[e.o.Cookies]:`cookies`,[e.o.ConsentManager]:`consent-manager`,[e.o.Partitions]:`partitions`,[e.o.Actions]:`actions`,[e.o.DataSubjects]:`data-subjects`,[e.o.BusinessEntities]:`business-entities`,[e.o.ProcessingActivities]:`processing-activities`,[e.o.Identifiers]:`identifiers`,[e.o.Enrichers]:`enrichers`,[e.o.DataSilos]:`data-silos`,[e.o.Templates]:`templates`,[e.o.Prompts]:`prompts`,[e.o.PromptPartials]:`prompt-partials`,[e.o.PromptGroups]:`prompt-groups`,[e.o.Agents]:`agents`,[e.o.AgentFunctions]:`agent-functions`,[e.o.AgentFiles]:`agent-files`,[e.o.Vendors]:`vendors`,[e.o.DataCategories]:`data-categories`,[e.o.ProcessingPurposes]:`processing-purposes`,[e.o.ActionItems]:`action-items`,[e.o.ActionItemCollections]:`action-item-collections`,[e.o.Teams]:`teams`,[e.o.Messages]:`messages`,[e.o.PrivacyCenters]:`privacy-center`,[e.o.Policies]:`policies`,[e.o.Assessments]:`assessments`,[e.o.AssessmentTemplates]:`assessment-templates`,[e.o.Purposes]:`purposes`,[e.o.SystemDiscovery]:`system-discovery`},lo=Za(Object.entries(t.TRANSCEND_SCOPES).map(([e,t])=>({...t,name:e})),`title`),uo=Object.keys(lo),fo=new Set([429,502,500,504,329]),po=process.env.DEBUG===`1`;Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return gi}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return pr}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return qt}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return Ue}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return bi}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return Sr}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return Ya}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return io}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return Na}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return lo}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return oo}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return co}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return Za}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return $a}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return po}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return uo}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return Qa}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ro}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return ao}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return`transcend`}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return no}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return fo}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return to}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return so}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return Ga}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return Oi}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Va}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return S}});
2
+ //# sourceMappingURL=constants-B-TmLA0w.cjs.map