@transcend-io/cli 8.37.0 → 8.37.2

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 (138) hide show
  1. package/README.md +35 -19
  2. package/dist/{api-keys-eh_rPCV_.cjs → api-keys-Bvt2HbSv.cjs} +2 -2
  3. package/dist/{api-keys-eh_rPCV_.cjs.map → api-keys-Bvt2HbSv.cjs.map} +1 -1
  4. package/dist/{app-D0ewaGAn.cjs → app-CdWFyBYu.cjs} +18 -18
  5. package/dist/app-CdWFyBYu.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-BB6Ncuzh.cjs → code-scanning-BZzwKEfY.cjs} +2 -2
  10. package/dist/{code-scanning-BB6Ncuzh.cjs.map → code-scanning-BZzwKEfY.cjs.map} +1 -1
  11. package/dist/{command-BUkTNNIa.cjs → command-DNcjQs8y.cjs} +2 -2
  12. package/dist/{command-BUkTNNIa.cjs.map → command-DNcjQs8y.cjs.map} +1 -1
  13. package/dist/{consent-manager-Df8gw2Qh.cjs → consent-manager-oip5m3XC.cjs} +2 -2
  14. package/dist/{consent-manager-Df8gw2Qh.cjs.map → consent-manager-oip5m3XC.cjs.map} +1 -1
  15. package/dist/{constants-7qBywLgI.cjs → constants-K6pQQtc7.cjs} +2 -2
  16. package/dist/{constants-7qBywLgI.cjs.map → constants-K6pQQtc7.cjs.map} +1 -1
  17. package/dist/{cron-BhfbISdy.cjs → cron-lijiEqFA.cjs} +2 -2
  18. package/dist/{cron-BhfbISdy.cjs.map → cron-lijiEqFA.cjs.map} +1 -1
  19. package/dist/{data-inventory-D36n1YAJ.cjs → data-inventory-BKAQGjFN.cjs} +2 -2
  20. package/dist/{data-inventory-D36n1YAJ.cjs.map → data-inventory-BKAQGjFN.cjs.map} +1 -1
  21. package/dist/{dataFlowsToDataSilos-BLNhWeOw.cjs → dataFlowsToDataSilos-CnvG2jqy.cjs} +2 -2
  22. package/dist/{dataFlowsToDataSilos-BLNhWeOw.cjs.map → dataFlowsToDataSilos-CnvG2jqy.cjs.map} +1 -1
  23. package/dist/{impl-BNEgHNz7.cjs → impl-1-1sg4WF.cjs} +2 -2
  24. package/dist/{impl-BNEgHNz7.cjs.map → impl-1-1sg4WF.cjs.map} +1 -1
  25. package/dist/{impl-CdXk78ar.cjs → impl-57HOh2c3.cjs} +2 -2
  26. package/dist/{impl-CdXk78ar.cjs.map → impl-57HOh2c3.cjs.map} +1 -1
  27. package/dist/{impl-BC1mCUl1.cjs → impl-58WnFNmn.cjs} +2 -2
  28. package/dist/{impl-BC1mCUl1.cjs.map → impl-58WnFNmn.cjs.map} +1 -1
  29. package/dist/impl-B4OVz7FC.cjs +2 -0
  30. package/dist/impl-B4OVz7FC.cjs.map +1 -0
  31. package/dist/{impl-5AfPlpzA.cjs → impl-BFRrE04X.cjs} +2 -2
  32. package/dist/{impl-5AfPlpzA.cjs.map → impl-BFRrE04X.cjs.map} +1 -1
  33. package/dist/{impl-DxDGyjMI.cjs → impl-BSS_avMv.cjs} +2 -2
  34. package/dist/{impl-DxDGyjMI.cjs.map → impl-BSS_avMv.cjs.map} +1 -1
  35. package/dist/{impl-DEULjxRp.cjs → impl-BVmw0mE4.cjs} +2 -2
  36. package/dist/{impl-DEULjxRp.cjs.map → impl-BVmw0mE4.cjs.map} +1 -1
  37. package/dist/{impl-IQ7JOZxt.cjs → impl-Bf_hLViY.cjs} +2 -2
  38. package/dist/{impl-IQ7JOZxt.cjs.map → impl-Bf_hLViY.cjs.map} +1 -1
  39. package/dist/{impl-47WGWxyj.cjs → impl-BkEg-Nm6.cjs} +2 -2
  40. package/dist/{impl-47WGWxyj.cjs.map → impl-BkEg-Nm6.cjs.map} +1 -1
  41. package/dist/{impl-DDHduv-X.cjs → impl-Bmln6D88.cjs} +2 -2
  42. package/dist/{impl-DDHduv-X.cjs.map → impl-Bmln6D88.cjs.map} +1 -1
  43. package/dist/impl-BqIqzp40.cjs +2 -0
  44. package/dist/impl-BqIqzp40.cjs.map +1 -0
  45. package/dist/{impl-DVCUGrVY.cjs → impl-BszlCtcR.cjs} +2 -2
  46. package/dist/{impl-DVCUGrVY.cjs.map → impl-BszlCtcR.cjs.map} +1 -1
  47. package/dist/impl-BtuKKdl3.cjs +2 -0
  48. package/dist/impl-BtuKKdl3.cjs.map +1 -0
  49. package/dist/{impl-DI3lTLCy.cjs → impl-C2e4xVvX.cjs} +2 -2
  50. package/dist/{impl-DI3lTLCy.cjs.map → impl-C2e4xVvX.cjs.map} +1 -1
  51. package/dist/impl-C65nk0G8.cjs +2 -0
  52. package/dist/impl-C65nk0G8.cjs.map +1 -0
  53. package/dist/{impl-DHUnZ-Qx.cjs → impl-CCdxbRmg.cjs} +2 -2
  54. package/dist/{impl-DHUnZ-Qx.cjs.map → impl-CCdxbRmg.cjs.map} +1 -1
  55. package/dist/{impl-Dxgw6Xfk.cjs → impl-CMwmo2vR.cjs} +2 -2
  56. package/dist/{impl-Dxgw6Xfk.cjs.map → impl-CMwmo2vR.cjs.map} +1 -1
  57. package/dist/impl-Cb64HwGx.cjs +2 -0
  58. package/dist/impl-Cb64HwGx.cjs.map +1 -0
  59. package/dist/{impl-4NCrJ_Y6.cjs → impl-CdfA8kxo.cjs} +2 -2
  60. package/dist/{impl-4NCrJ_Y6.cjs.map → impl-CdfA8kxo.cjs.map} +1 -1
  61. package/dist/{impl-DlB56v12.cjs → impl-CkfOZzpI.cjs} +2 -2
  62. package/dist/{impl-DlB56v12.cjs.map → impl-CkfOZzpI.cjs.map} +1 -1
  63. package/dist/{impl-bgI-lF8x.cjs → impl-ClujxTb8.cjs} +2 -2
  64. package/dist/{impl-bgI-lF8x.cjs.map → impl-ClujxTb8.cjs.map} +1 -1
  65. package/dist/{impl-orpaJd8b.cjs → impl-D-IWtHQi.cjs} +2 -2
  66. package/dist/{impl-orpaJd8b.cjs.map → impl-D-IWtHQi.cjs.map} +1 -1
  67. package/dist/{impl-DQTfX_qq.cjs → impl-D9-ZQmJB.cjs} +2 -2
  68. package/dist/{impl-DQTfX_qq.cjs.map → impl-D9-ZQmJB.cjs.map} +1 -1
  69. package/dist/{impl-Du1Ty4JE.cjs → impl-DGel0ZLe.cjs} +2 -2
  70. package/dist/{impl-Du1Ty4JE.cjs.map → impl-DGel0ZLe.cjs.map} +1 -1
  71. package/dist/{impl-BPq8EyHn.cjs → impl-DL2j8g1C.cjs} +2 -2
  72. package/dist/{impl-BPq8EyHn.cjs.map → impl-DL2j8g1C.cjs.map} +1 -1
  73. package/dist/{impl-CkkD_smS.cjs → impl-DSNgFKP_.cjs} +2 -2
  74. package/dist/{impl-CkkD_smS.cjs.map → impl-DSNgFKP_.cjs.map} +1 -1
  75. package/dist/{impl-CfsKuglq.cjs → impl-DU85U1jO.cjs} +2 -2
  76. package/dist/{impl-CfsKuglq.cjs.map → impl-DU85U1jO.cjs.map} +1 -1
  77. package/dist/{impl-DS2IlxS3.cjs → impl-DV5f54rm.cjs} +2 -2
  78. package/dist/{impl-DS2IlxS3.cjs.map → impl-DV5f54rm.cjs.map} +1 -1
  79. package/dist/impl-DXKJH0AZ.cjs +2 -0
  80. package/dist/impl-DXKJH0AZ.cjs.map +1 -0
  81. package/dist/{impl-BfN9XMNM.cjs → impl-DbxzDk8h.cjs} +2 -2
  82. package/dist/{impl-BfN9XMNM.cjs.map → impl-DbxzDk8h.cjs.map} +1 -1
  83. package/dist/{impl-CVsXgVaf.cjs → impl-DhnCAbU-.cjs} +2 -2
  84. package/dist/{impl-CVsXgVaf.cjs.map → impl-DhnCAbU-.cjs.map} +1 -1
  85. package/dist/{impl-BxOeeF35.cjs → impl-Dj2fTDNO.cjs} +2 -2
  86. package/dist/{impl-BxOeeF35.cjs.map → impl-Dj2fTDNO.cjs.map} +1 -1
  87. package/dist/{impl-C1IjDv1N.cjs → impl-KAorCmlT.cjs} +2 -2
  88. package/dist/{impl-C1IjDv1N.cjs.map → impl-KAorCmlT.cjs.map} +1 -1
  89. package/dist/{impl-Bv2mYf1w.cjs → impl-LMp29vxd.cjs} +2 -2
  90. package/dist/{impl-Bv2mYf1w.cjs.map → impl-LMp29vxd.cjs.map} +1 -1
  91. package/dist/{impl-feFIqpBO.cjs → impl-MrsSr72p.cjs} +2 -2
  92. package/dist/{impl-feFIqpBO.cjs.map → impl-MrsSr72p.cjs.map} +1 -1
  93. package/dist/{impl-Boa1Uuzk.cjs → impl-SZp3iTUp.cjs} +2 -2
  94. package/dist/{impl-Boa1Uuzk.cjs.map → impl-SZp3iTUp.cjs.map} +1 -1
  95. package/dist/{impl-8Basu9U-.cjs → impl-W6jE_UV0.cjs} +2 -2
  96. package/dist/{impl-8Basu9U-.cjs.map → impl-W6jE_UV0.cjs.map} +1 -1
  97. package/dist/{impl-Cotrjytz.cjs → impl-XwC7A99P.cjs} +2 -2
  98. package/dist/{impl-Cotrjytz.cjs.map → impl-XwC7A99P.cjs.map} +1 -1
  99. package/dist/{impl-DKMxd5Wy.cjs → impl-ebVxRYAc.cjs} +2 -2
  100. package/dist/{impl-DKMxd5Wy.cjs.map → impl-ebVxRYAc.cjs.map} +1 -1
  101. package/dist/impl-k61p_VQY.cjs +2 -0
  102. package/dist/impl-k61p_VQY.cjs.map +1 -0
  103. package/dist/impl-kMebV10f.cjs +2 -0
  104. package/dist/impl-kMebV10f.cjs.map +1 -0
  105. package/dist/{impl--PmMYd1g.cjs → impl-oYFKp06U.cjs} +2 -2
  106. package/dist/{impl--PmMYd1g.cjs.map → impl-oYFKp06U.cjs.map} +1 -1
  107. package/dist/index.cjs +1 -1
  108. package/dist/index.d.cts +74 -11
  109. package/dist/{manual-enrichment-CzRiIFev.cjs → manual-enrichment-C6h9gjY1.cjs} +2 -2
  110. package/dist/{manual-enrichment-CzRiIFev.cjs.map → manual-enrichment-C6h9gjY1.cjs.map} +1 -1
  111. package/dist/{pooling-BJAPXDiq.cjs → pooling-DLEGcLtt.cjs} +5 -5
  112. package/dist/pooling-DLEGcLtt.cjs.map +1 -0
  113. package/dist/{preference-management-DV6NIcXt.cjs → preference-management-B36PQuMK.cjs} +2 -2
  114. package/dist/{preference-management-DV6NIcXt.cjs.map → preference-management-B36PQuMK.cjs.map} +1 -1
  115. package/dist/{syncConfigurationToTranscend-Bd0ZTIm1.cjs → syncConfigurationToTranscend-DKliAJhK.cjs} +12 -6
  116. package/dist/syncConfigurationToTranscend-DKliAJhK.cjs.map +1 -0
  117. package/dist/{uploadConsents-XYRco1_L.cjs → uploadConsents-MtgCk8B0.cjs} +2 -2
  118. package/dist/{uploadConsents-XYRco1_L.cjs.map → uploadConsents-MtgCk8B0.cjs.map} +1 -1
  119. package/package.json +1 -1
  120. package/dist/app-D0ewaGAn.cjs.map +0 -1
  121. package/dist/impl--CgaKM4x.cjs +0 -2
  122. package/dist/impl--CgaKM4x.cjs.map +0 -1
  123. package/dist/impl-ByQI5s4b.cjs +0 -2
  124. package/dist/impl-ByQI5s4b.cjs.map +0 -1
  125. package/dist/impl-Crhm9eFe.cjs +0 -2
  126. package/dist/impl-Crhm9eFe.cjs.map +0 -1
  127. package/dist/impl-D2P_gDE8.cjs +0 -2
  128. package/dist/impl-D2P_gDE8.cjs.map +0 -1
  129. package/dist/impl-DNDs3FFG.cjs +0 -2
  130. package/dist/impl-DNDs3FFG.cjs.map +0 -1
  131. package/dist/impl-DZbi3AkB.cjs +0 -2
  132. package/dist/impl-DZbi3AkB.cjs.map +0 -1
  133. package/dist/impl-DcMkDhXY.cjs +0 -2
  134. package/dist/impl-DcMkDhXY.cjs.map +0 -1
  135. package/dist/impl-xUzH7vUF.cjs +0 -2
  136. package/dist/impl-xUzH7vUF.cjs.map +0 -1
  137. package/dist/pooling-BJAPXDiq.cjs.map +0 -1
  138. package/dist/syncConfigurationToTranscend-Bd0ZTIm1.cjs.map +0 -1
package/README.md CHANGED
@@ -190,7 +190,7 @@ data-silos:
190
190
 
191
191
  ```txt
192
192
  USAGE
193
- transcend request approve (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) [--origins PRIVACY_CENTER|ADMIN_DASHBOARD|API|SHOPIFY] [--silentModeBefore value] [--createdAtBefore value] [--createdAtAfter value] [--transcendUrl value] [--concurrency value]
193
+ transcend request approve (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) [--origins PRIVACY_CENTER|ADMIN_DASHBOARD|API|SHOPIFY] [--silentModeBefore value] [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--transcendUrl value] [--concurrency value]
194
194
  transcend request approve --help
195
195
 
196
196
  Bulk approve a set of privacy requests from the DSR Automation -> Incoming Requests tab.
@@ -202,6 +202,8 @@ FLAGS
202
202
  [--silentModeBefore] Any requests made before this date should be marked as silent mode
203
203
  [--createdAtBefore] Approve requests that were submitted before this time
204
204
  [--createdAtAfter] Approve requests that were submitted after this time
205
+ [--updatedAtBefore] Approve requests that were last updated before this time
206
+ [--updatedAtAfter] Approve requests that were last updated after this time
205
207
  [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io]
206
208
  [--concurrency] The concurrency to use when uploading requests in parallel [default = 50]
207
209
  -h --help Print help information and exit
@@ -390,7 +392,7 @@ transcend request upload \
390
392
 
391
393
  ```txt
392
394
  USAGE
393
- transcend request download-files (--auth value) [--sombraAuth value] [--concurrency value] [--requestIds value]... [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--folderPath value] [--createdAtBefore value] [--createdAtAfter value] [--approveAfterDownload] [--transcendUrl value]
395
+ transcend request download-files (--auth value) [--sombraAuth value] [--concurrency value] [--requestIds value]... [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--folderPath value] [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--approveAfterDownload] [--transcendUrl value]
394
396
  transcend request download-files --help
395
397
 
396
398
  Download the files associated with a Data Subject Access Request (DSAR) from DSR Automation -> Incoming Requests tab.
@@ -404,6 +406,8 @@ FLAGS
404
406
  [--folderPath] The folder to download files to [default = ./dsr-files]
405
407
  [--createdAtBefore] Download requests that were submitted before this time
406
408
  [--createdAtAfter] Download requests that were submitted after this time
409
+ [--updatedAtBefore] Download requests that were last updated before this time
410
+ [--updatedAtAfter] Download requests that were last updated after this time
407
411
  [--approveAfterDownload] If the request is in status=APPROVING, approve the request after its downloaded [default = false]
408
412
  [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io]
409
413
  -h --help Print help information and exit
@@ -472,7 +476,7 @@ transcend request download-files \
472
476
 
473
477
  ```txt
474
478
  USAGE
475
- transcend request cancel (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--requestIds value]... [--silentModeBefore value] [--createdAtBefore value] [--createdAtAfter value] [--cancellationTitle value] [--transcendUrl value] [--concurrency value]
479
+ transcend request cancel (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--requestIds value]... [--silentModeBefore value] [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--cancellationTitle value] [--transcendUrl value] [--concurrency value]
476
480
  transcend request cancel --help
477
481
 
478
482
  Bulk cancel a set of privacy requests from the DSR Automation -> Incoming Requests tab.
@@ -485,6 +489,8 @@ FLAGS
485
489
  [--silentModeBefore] Any requests made before this date should be marked as silent mode for canceling to skip email sending
486
490
  [--createdAtBefore] Cancel requests that were submitted before this time
487
491
  [--createdAtAfter] Cancel requests that were submitted after this time
492
+ [--updatedAtBefore] Cancel requests that were last updated before this time
493
+ [--updatedAtAfter] Cancel requests that were last updated after this time
488
494
  [--cancellationTitle] The title of the email template that should be sent to the requests upon cancelation [default = Request Canceled]
489
495
  [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io]
490
496
  [--concurrency] The concurrency to use when uploading requests in parallel [default = 50]
@@ -556,7 +562,7 @@ transcend request cancel \
556
562
 
557
563
  ```txt
558
564
  USAGE
559
- transcend request restart (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) (--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED) [--transcendUrl value] [--requestReceiptFolder value] [--sombraAuth value] [--concurrency value] [--requestIds value]... [--emailIsVerified] [--createdAt value] [--silentModeBefore value] [--createdAtBefore value] [--createdAtAfter value] [--sendEmailReceipt] [--copyIdentifiers] [--skipWaitingPeriod]
565
+ transcend request restart (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) (--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED) [--transcendUrl value] [--requestReceiptFolder value] [--sombraAuth value] [--concurrency value] [--requestIds value]... [--emailIsVerified] [--createdAt value] [--silentModeBefore value] [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--sendEmailReceipt] [--copyIdentifiers] [--skipWaitingPeriod]
560
566
  transcend request restart --help
561
567
 
562
568
  Bulk update a set of privacy requests based on a set of request filters.
@@ -575,6 +581,8 @@ FLAGS
575
581
  [--silentModeBefore] Requests older than this date should be marked as silent mode
576
582
  [--createdAtBefore] Restart requests that were submitted before this time
577
583
  [--createdAtAfter] Restart requests that were submitted after this time
584
+ [--updatedAtBefore] Restart requests that were last updated before this time
585
+ [--updatedAtAfter] Restart requests that were last updated after this time
578
586
  [--sendEmailReceipt] Send email receipts to the restarted requests [default = false]
579
587
  [--copyIdentifiers] Copy over all enriched identifiers from the initial request [default = false]
580
588
  [--skipWaitingPeriod] Skip queued state of request and go straight to compiling [default = false]
@@ -705,23 +713,25 @@ transcend request restart \
705
713
 
706
714
  ```txt
707
715
  USAGE
708
- transcend request notify-additional-time (--auth value) (--createdAtBefore value) [--createdAtAfter value] [--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD] [--daysLeft value] [--days value] [--requestIds value]... [--emailTemplate value] [--transcendUrl value] [--concurrency value]
716
+ transcend request notify-additional-time (--auth value) (--createdAtBefore value) [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD] [--daysLeft value] [--days value] [--requestIds value]... [--emailTemplate value] [--transcendUrl value] [--concurrency value]
709
717
  transcend request notify-additional-time --help
710
718
 
711
719
  Bulk notify a set of privacy requests from the DSR Automation -> Incoming Requests tab that more time is needed to complete the request. Note any request in silent mode will not be emailed.
712
720
 
713
721
  FLAGS
714
- --auth The Transcend API key. Requires scopes: "View Incoming Requests", "Request Approval and Communication"
715
- --createdAtBefore Notify requests that are open but submitted before this time
716
- [--createdAtAfter] Notify requests that are open but submitted after this time
717
- [--actions] The request actions to notify [AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD, separator = ,]
718
- [--daysLeft] Only notify requests that have less than this number of days until they are considered expired [default = 10]
719
- [--days] The number of days to adjust the expiration of the request to [default = 45]
720
- [--requestIds]... Specify the specific request IDs to notify [separator = ,]
721
- [--emailTemplate] The title of the email template that should be sent to the requests [default = Additional Time Needed]
722
- [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io]
723
- [--concurrency] The concurrency to use when uploading requests in parallel [default = 50]
724
- -h --help Print help information and exit
722
+ --auth The Transcend API key. Requires scopes: "View Incoming Requests", "Request Approval and Communication"
723
+ --createdAtBefore Notify requests that are open but submitted before this time
724
+ [--createdAtAfter] Notify requests that are open but submitted after this time
725
+ [--updatedAtBefore] Notify requests that were last updated before this time
726
+ [--updatedAtAfter] Notify requests that were last updated after this time
727
+ [--actions] The request actions to notify [AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD, separator = ,]
728
+ [--daysLeft] Only notify requests that have less than this number of days until they are considered expired [default = 10]
729
+ [--days] The number of days to adjust the expiration of the request to [default = 45]
730
+ [--requestIds]... Specify the specific request IDs to notify [separator = ,]
731
+ [--emailTemplate] The title of the email template that should be sent to the requests [default = Additional Time Needed]
732
+ [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io]
733
+ [--concurrency] The concurrency to use when uploading requests in parallel [default = 50]
734
+ -h --help Print help information and exit
725
735
  ```
726
736
 
727
737
  #### Examples
@@ -808,7 +818,7 @@ transcend request notify-additional-time \
808
818
 
809
819
  ```txt
810
820
  USAGE
811
- transcend request mark-silent (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--requestIds value]... [--createdAtBefore value] [--createdAtAfter value] [--transcendUrl value] [--concurrency value]
821
+ transcend request mark-silent (--auth value) (--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD) [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--requestIds value]... [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--transcendUrl value] [--concurrency value]
812
822
  transcend request mark-silent --help
813
823
 
814
824
  Bulk update a set of privacy requests from the DSR Automation -> Incoming Requests tab to be in silent mode.
@@ -820,6 +830,8 @@ FLAGS
820
830
  [--requestIds]... Specify the specific request IDs to mark silent [separator = ,]
821
831
  [--createdAtBefore] Mark silent requests that were submitted before this time
822
832
  [--createdAtAfter] Mark silent requests that were submitted after this time
833
+ [--updatedAtBefore] Mark silent requests that were last updated before this time
834
+ [--updatedAtAfter] Mark silent requests that were last updated after this time
823
835
  [--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting [default = https://api.transcend.io]
824
836
  [--concurrency] The concurrency to use when uploading requests in parallel [default = 50]
825
837
  -h --help Print help information and exit
@@ -878,7 +890,7 @@ transcend request mark-silent --auth="$TRANSCEND_API_KEY" --actions=ERASURE --co
878
890
 
879
891
  ```txt
880
892
  USAGE
881
- transcend request enricher-restart (--auth value) (--enricherId value) [--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD] [--requestEnricherStatuses QUEUED|WAITING|SKIPPED|ERROR|RESOLVED|ACTION_REQUIRED|REMOTE_PROCESSING|WAITING_ON_DEPENDENCIES|POLLING] [--transcendUrl value] [--concurrency value] [--requestIds value]... [--createdAtBefore value] [--createdAtAfter value]
893
+ transcend request enricher-restart (--auth value) (--enricherId value) [--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD] [--requestEnricherStatuses QUEUED|WAITING|SKIPPED|ERROR|RESOLVED|ACTION_REQUIRED|REMOTE_PROCESSING|WAITING_ON_DEPENDENCIES|POLLING] [--transcendUrl value] [--concurrency value] [--requestIds value]... [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value]
882
894
  transcend request enricher-restart --help
883
895
 
884
896
  Bulk restart a particular enricher across a series of DSRs.
@@ -896,6 +908,8 @@ FLAGS
896
908
  [--requestIds]... Specify the specific request IDs to restart [separator = ,]
897
909
  [--createdAtBefore] Restart requests that were submitted before this time
898
910
  [--createdAtAfter] Restart requests that were submitted after this time
911
+ [--updatedAtBefore] Restart requests that were last updated before this time
912
+ [--updatedAtAfter] Restart requests that were last updated after this time
899
913
  -h --help Print help information and exit
900
914
  ```
901
915
 
@@ -1000,7 +1014,7 @@ transcend request reject-unverified-identifiers \
1000
1014
 
1001
1015
  ```txt
1002
1016
  USAGE
1003
- transcend request export (--auth value) [--sombraAuth value] [--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD] [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--transcendUrl value] [--file value] [--concurrency value] [--skipRequestIdentifiers] [--createdAtBefore value] [--createdAtAfter value] [--showTests] [--pageLimit value]
1017
+ transcend request export (--auth value) [--sombraAuth value] [--actions AUTOMATED_DECISION_MAKING_OPT_OUT|USE_OF_SENSITIVE_INFORMATION_OPT_OUT|CONTACT_OPT_OUT|SALE_OPT_OUT|TRACKING_OPT_OUT|CUSTOM_OPT_OUT|AUTOMATED_DECISION_MAKING_OPT_IN|USE_OF_SENSITIVE_INFORMATION_OPT_IN|SALE_OPT_IN|TRACKING_OPT_IN|CONTACT_OPT_IN|CUSTOM_OPT_IN|ACCESS|ERASURE|RECTIFICATION|RESTRICTION|BUSINESS_PURPOSE|PLACE_ON_LEGAL_HOLD|REMOVE_FROM_LEGAL_HOLD] [--statuses REQUEST_MADE|FAILED_VERIFICATION|ENRICHING|ON_HOLD|WAITING|COMPILING|APPROVING|DELAYED|COMPLETED|DOWNLOADABLE|VIEW_CATEGORIES|CANCELED|SECONDARY|SECONDARY_COMPLETED|SECONDARY_APPROVING|REVOKED] [--transcendUrl value] [--file value] [--concurrency value] [--skipRequestIdentifiers] [--createdAtBefore value] [--createdAtAfter value] [--updatedAtBefore value] [--updatedAtAfter value] [--showTests] [--pageLimit value]
1004
1018
  transcend request export --help
1005
1019
 
1006
1020
  Export privacy requests and request identifiers to a CSV file.
@@ -1016,6 +1030,8 @@ FLAGS
1016
1030
  [--skipRequestIdentifiers/--noSkipRequestIdentifiers] Skip exporting request identifiers
1017
1031
  [--createdAtBefore] Pull requests that were submitted before this time
1018
1032
  [--createdAtAfter] Pull requests that were submitted after this time
1033
+ [--updatedAtBefore] Pull requests that were last updated before this time
1034
+ [--updatedAtAfter] Pull requests that were last updated after this time
1019
1035
  [--showTests/--noShowTests] Filter for test requests or production requests - when not provided, pulls both
1020
1036
  [--pageLimit] The page limit to use when pulling in pages of requests [default = 100]
1021
1037
  -h --help Print help information and exit
@@ -1,2 +1,2 @@
1
- const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./constants-7qBywLgI.cjs`),n=require(`./syncConfigurationToTranscend-Bd0ZTIm1.cjs`),r=require(`./logger-DQwEYtSS.cjs`),i=require(`./codecs-Bvmb8o9R.cjs`);let a=require(`@transcend-io/type-utils`),o=require(`node:fs`),s=require(`node:path`),c=require(`colors`);c=e.t(c);let l=require(`io-ts`);l=e.t(l);async function u({email:e,password:i,scopes:a,apiKeyTitle:o,parentOrganizationId:s,deleteExistingApiKey:l=!0,createNewApiKey:u=!0,transcendUrl:d=t.a}){let f=await n.ni(d,{});r.t.info(c.default.magenta(`Logging in using email and password.`));let{roles:p,loginCookie:m}=await n.Hn(f,{email:e,password:i});r.t.info(c.default.green(`Successfully logged in and found ${p.length} role${p.length===1?``:`s`}!`));let h=s?p.filter(e=>e.organization.id===s||e.organization.parentOrganizationId===s):p;f.setHeaders({Cookie:m});let g=[],_=[];return r.t.info(c.default.magenta(`Generating API keys with title: ${o}, scopes: ${a.join(`,`)}.`)),await n.Es(h,async t=>{try{await n.Vn(f,{roleId:t.id,email:e}),r.t.info(c.default.magenta(`Checking if API key already exists in organization "${t.organization.name}" with title: "${o}".`));let[i]=await n.ar(f,[o]);if(i&&l)r.t.info(c.default.yellow(`Deleting existing API key in "${t.organization.name}" with title: "${o}".`)),await n.Bn(f,i.id),r.t.info(c.default.green(`Successfully deleted API key in "${t.organization.name}" with title: "${o}".`));else if(i)throw Error(`API key already exists with title: "${o}"`);if(u){r.t.info(c.default.magenta(`Creating API key in "${t.organization.name}" with title: "${o}".`));let{apiKey:e}=await n.zn(f,{title:o,scopes:a});g.push({organizationName:t.organization.name,organizationId:t.organization.id,apiKey:e}),r.t.info(c.default.green(`Successfully created API key in "${t.organization.name}" with title: "${o}".`))}else g.push({organizationName:t.organization.name,organizationId:t.organization.id,apiKey:``})}catch(e){r.t.error(c.default.red(`Failed to create API key in organization "${t.organization.name}"! - ${e.message}`)),_.push({organizationName:t.organization.name,organizationId:t.organization.id,error:e.message})}}),r.t.info(c.default.green(`Successfully created ${g.length} API key${g.length===1?``:`s`}`)),_.length>0&&r.t.error(c.default.red(`Failed to create ${_.length} API key${_.length===1?``:`s`}!`)),{errors:_,apiKeys:g}}function d(e){return e||(r.t.error(c.default.red(`A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY`)),process.exit(1)),(0,o.existsSync)(e)?(0,a.decodeCodec)(l.array(i.mt),(0,o.readFileSync)(e,`utf-8`)):e}function f(e,t,n=!1){if(!(0,o.existsSync)(e))return[];let r=(0,o.readdirSync)(e).filter(e=>t?t.filter(t=>e.endsWith(t)).length:!0).filter(e=>e.indexOf(`.`)>0);return n?r.map(e=>e.replace(/\.[^/.]+$/,``)):r}function p(e){return(0,o.readdirSync)(e).filter(t=>(0,o.statSync)((0,s.join)(e,t)).isDirectory())}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return p}});
2
- //# sourceMappingURL=api-keys-eh_rPCV_.cjs.map
1
+ const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./constants-K6pQQtc7.cjs`),n=require(`./syncConfigurationToTranscend-DKliAJhK.cjs`),r=require(`./logger-DQwEYtSS.cjs`),i=require(`./codecs-Bvmb8o9R.cjs`);let a=require(`@transcend-io/type-utils`),o=require(`node:fs`),s=require(`node:path`),c=require(`colors`);c=e.t(c);let l=require(`io-ts`);l=e.t(l);async function u({email:e,password:i,scopes:a,apiKeyTitle:o,parentOrganizationId:s,deleteExistingApiKey:l=!0,createNewApiKey:u=!0,transcendUrl:d=t.a}){let f=await n.ni(d,{});r.t.info(c.default.magenta(`Logging in using email and password.`));let{roles:p,loginCookie:m}=await n.Hn(f,{email:e,password:i});r.t.info(c.default.green(`Successfully logged in and found ${p.length} role${p.length===1?``:`s`}!`));let h=s?p.filter(e=>e.organization.id===s||e.organization.parentOrganizationId===s):p;f.setHeaders({Cookie:m});let g=[],_=[];return r.t.info(c.default.magenta(`Generating API keys with title: ${o}, scopes: ${a.join(`,`)}.`)),await n.Es(h,async t=>{try{await n.Vn(f,{roleId:t.id,email:e}),r.t.info(c.default.magenta(`Checking if API key already exists in organization "${t.organization.name}" with title: "${o}".`));let[i]=await n.ar(f,[o]);if(i&&l)r.t.info(c.default.yellow(`Deleting existing API key in "${t.organization.name}" with title: "${o}".`)),await n.Bn(f,i.id),r.t.info(c.default.green(`Successfully deleted API key in "${t.organization.name}" with title: "${o}".`));else if(i)throw Error(`API key already exists with title: "${o}"`);if(u){r.t.info(c.default.magenta(`Creating API key in "${t.organization.name}" with title: "${o}".`));let{apiKey:e}=await n.zn(f,{title:o,scopes:a});g.push({organizationName:t.organization.name,organizationId:t.organization.id,apiKey:e}),r.t.info(c.default.green(`Successfully created API key in "${t.organization.name}" with title: "${o}".`))}else g.push({organizationName:t.organization.name,organizationId:t.organization.id,apiKey:``})}catch(e){r.t.error(c.default.red(`Failed to create API key in organization "${t.organization.name}"! - ${e.message}`)),_.push({organizationName:t.organization.name,organizationId:t.organization.id,error:e.message})}}),r.t.info(c.default.green(`Successfully created ${g.length} API key${g.length===1?``:`s`}`)),_.length>0&&r.t.error(c.default.red(`Failed to create ${_.length} API key${_.length===1?``:`s`}!`)),{errors:_,apiKeys:g}}function d(e){return e||(r.t.error(c.default.red(`A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY`)),process.exit(1)),(0,o.existsSync)(e)?(0,a.decodeCodec)(l.array(i.mt),(0,o.readFileSync)(e,`utf-8`)):e}function f(e,t,n=!1){if(!(0,o.existsSync)(e))return[];let r=(0,o.readdirSync)(e).filter(e=>t?t.filter(t=>e.endsWith(t)).length:!0).filter(e=>e.indexOf(`.`)>0);return n?r.map(e=>e.replace(/\.[^/.]+$/,``)):r}function p(e){return(0,o.readdirSync)(e).filter(t=>(0,o.statSync)((0,s.join)(e,t)).isDirectory())}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return p}});
2
+ //# sourceMappingURL=api-keys-Bvt2HbSv.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys-eh_rPCV_.cjs","names":["DEFAULT_TRANSCEND_API","buildTranscendGraphQLClientGeneric","loginUser","mapSeries","assumeRole","fetchAllApiKeys","deleteApiKey","createApiKey","t","StoredApiKey"],"sources":["../src/lib/api-keys/generateCrossAccountApiKeys.ts","../src/lib/api-keys/validateTranscendAuth.ts","../src/lib/api-keys/listFiles.ts","../src/lib/api-keys/listDirectories.ts"],"sourcesContent":["import { mapSeries } from '../bluebird';\nimport {\n buildTranscendGraphQLClientGeneric,\n loginUser,\n createApiKey,\n fetchAllApiKeys,\n deleteApiKey,\n assumeRole,\n} from '../graphql';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport colors from 'colors';\nimport { StoredApiKey } from '../../codecs';\nimport { logger } from '../../logger';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\nexport interface ApiKeyGenerateError {\n /** Name of instance */\n organizationName: string;\n /** Error */\n error: string;\n /** Organization ID API key is for */\n organizationId: string;\n}\n\n/**\n * Generate API keys across multiple transcend accounts\n *\n * @param options - Options\n * @returns Number of API keys created\n */\nexport async function generateCrossAccountApiKeys({\n email,\n password,\n scopes,\n apiKeyTitle,\n parentOrganizationId,\n deleteExistingApiKey = true,\n createNewApiKey = true,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** Email address of user generating API keys */\n email: string;\n /** Password of user generating API keys */\n password: string;\n /** Filter for organizations that match this parent organization ID */\n parentOrganizationId?: string;\n /** Title of the API create to create */\n apiKeyTitle: string;\n /** Title of the API create to create */\n scopes: ScopeName[];\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** When true delete existing API keys with that title, if set to false an API key exists with that title, an error is thrown */\n deleteExistingApiKey?: boolean;\n /** When true, generate new API keys, otherwise only will delete past API keys */\n createNewApiKey?: boolean;\n}): Promise<{\n /** Successfully generated */\n apiKeys: StoredApiKey[];\n /** Error results */\n errors: ApiKeyGenerateError[];\n}> {\n // Create GraphQL client\n const client = await buildTranscendGraphQLClientGeneric(transcendUrl, {});\n\n // Login the user\n logger.info(colors.magenta('Logging in using email and password.'));\n const { roles, loginCookie } = await loginUser(client, { email, password });\n logger.info(\n colors.green(\n `Successfully logged in and found ${roles.length} role${\n roles.length === 1 ? '' : 's'\n }!`,\n ),\n );\n\n // Filter down by parentOrganizationId\n const filteredRoles = parentOrganizationId\n ? roles.filter(\n (role) =>\n role.organization.id === parentOrganizationId ||\n role.organization.parentOrganizationId === parentOrganizationId,\n )\n : roles;\n\n // Save cookie to call route subsequent times\n client.setHeaders({\n Cookie: loginCookie,\n });\n\n // Save the resulting API keys\n const results: StoredApiKey[] = [];\n const errors: ApiKeyGenerateError[] = [];\n\n // Generate API keys\n logger.info(\n colors.magenta(\n `Generating API keys with title: ${apiKeyTitle}, scopes: ${scopes.join(\n ',',\n )}.`,\n ),\n );\n\n // Map over each role\n await mapSeries(filteredRoles, async (role) => {\n try {\n // Log into the other instance\n await assumeRole(client, { roleId: role.id, email });\n\n // Grab API keys with that title\n logger.info(\n colors.magenta(\n `Checking if API key already exists in organization \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n\n // Delete existing API key\n const [apiKeyWithTitle] = await fetchAllApiKeys(client, [apiKeyTitle]);\n if (apiKeyWithTitle && deleteExistingApiKey) {\n logger.info(\n colors.yellow(\n `Deleting existing API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n await deleteApiKey(client, apiKeyWithTitle.id);\n logger.info(\n colors.green(\n `Successfully deleted API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n } else if (apiKeyWithTitle) {\n // throw error if one exists but not configured to delete\n throw new Error(`API key already exists with title: \"${apiKeyTitle}\"`);\n }\n\n // Create the API key\n if (createNewApiKey) {\n logger.info(\n colors.magenta(\n `Creating API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n const { apiKey } = await createApiKey(client, {\n title: apiKeyTitle,\n scopes,\n });\n results.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n apiKey,\n });\n logger.info(\n colors.green(\n `Successfully created API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n } else {\n // Delete only\n results.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n apiKey: '',\n });\n }\n } catch (err) {\n logger.error(\n colors.red(\n `Failed to create API key in organization \"${role.organization.name}\"! - ${err.message}`,\n ),\n );\n errors.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n error: err.message,\n });\n }\n });\n logger.info(\n colors.green(\n `Successfully created ${results.length} API key${\n results.length === 1 ? '' : 's'\n }`,\n ),\n );\n\n if (errors.length > 0) {\n logger.error(\n colors.red(\n `Failed to create ${errors.length} API key${\n errors.length === 1 ? '' : 's'\n }!`,\n ),\n );\n }\n\n return { errors, apiKeys: results };\n}\n","import { decodeCodec } from '@transcend-io/type-utils';\nimport colors from 'colors';\nimport * as t from 'io-ts';\nimport { logger } from '../../logger';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { StoredApiKey } from '../../codecs';\n\n/**\n * Determine if the `--auth` parameter is an API key or a path to a JSON\n * file containing a list of API keys.\n *\n * @param auth - Raw auth parameter\n * @returns The API key or the list API keys\n */\nexport function validateTranscendAuth(auth: string): string | StoredApiKey[] {\n // Ensure auth is passed\n if (!auth) {\n logger.error(\n colors.red(\n 'A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY',\n ),\n );\n process.exit(1);\n }\n\n // Read from disk\n if (existsSync(auth)) {\n // validate that file is a list of API keys\n return decodeCodec(t.array(StoredApiKey), readFileSync(auth, 'utf-8'));\n }\n\n // Return as single API key\n return auth;\n}\n","import { existsSync, readdirSync } from 'node:fs';\n\n/**\n * List the files in a directory\n *\n * ```typescript\n * // The directory to search\n * const directory = '/User/test/transcend/my-app/app/containers';\n * // Returns ['test.js']\n * listFiles(directory);\n * ```\n *\n * @param directory - The directory to search\n * @param validExtensions - The list of valid extensions\n * @param removeExtensions - When true, remove the extensions from the listed files\n * @returns The list of files in the directory\n */\nexport function listFiles(\n directory: string,\n validExtensions?: string[],\n removeExtensions = false,\n): string[] {\n if (!existsSync(directory)) {\n return [];\n }\n\n const files = readdirSync(directory)\n .filter((fil) =>\n validExtensions\n ? validExtensions.filter((ext) => fil.endsWith(ext)).length\n : true,\n )\n .filter((fil) => fil.indexOf('.') > 0);\n\n return removeExtensions\n ? files.map((fil) => fil.replace(/\\.[^/.]+$/, ''))\n : files;\n}\n","import { readdirSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/**\n * List the folders in a directory\n *\n * @param startDir - The base directory to list from\n * @returns The list of folders in that directory\n */\nexport function listDirectories(startDir: string): string[] {\n return readdirSync(startDir).filter((entryName) =>\n statSync(join(startDir, entryName)).isDirectory(),\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"api-keys-Bvt2HbSv.cjs","names":["DEFAULT_TRANSCEND_API","buildTranscendGraphQLClientGeneric","loginUser","mapSeries","assumeRole","fetchAllApiKeys","deleteApiKey","createApiKey","t","StoredApiKey"],"sources":["../src/lib/api-keys/generateCrossAccountApiKeys.ts","../src/lib/api-keys/validateTranscendAuth.ts","../src/lib/api-keys/listFiles.ts","../src/lib/api-keys/listDirectories.ts"],"sourcesContent":["import { mapSeries } from '../bluebird';\nimport {\n buildTranscendGraphQLClientGeneric,\n loginUser,\n createApiKey,\n fetchAllApiKeys,\n deleteApiKey,\n assumeRole,\n} from '../graphql';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport colors from 'colors';\nimport { StoredApiKey } from '../../codecs';\nimport { logger } from '../../logger';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\nexport interface ApiKeyGenerateError {\n /** Name of instance */\n organizationName: string;\n /** Error */\n error: string;\n /** Organization ID API key is for */\n organizationId: string;\n}\n\n/**\n * Generate API keys across multiple transcend accounts\n *\n * @param options - Options\n * @returns Number of API keys created\n */\nexport async function generateCrossAccountApiKeys({\n email,\n password,\n scopes,\n apiKeyTitle,\n parentOrganizationId,\n deleteExistingApiKey = true,\n createNewApiKey = true,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** Email address of user generating API keys */\n email: string;\n /** Password of user generating API keys */\n password: string;\n /** Filter for organizations that match this parent organization ID */\n parentOrganizationId?: string;\n /** Title of the API create to create */\n apiKeyTitle: string;\n /** Title of the API create to create */\n scopes: ScopeName[];\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** When true delete existing API keys with that title, if set to false an API key exists with that title, an error is thrown */\n deleteExistingApiKey?: boolean;\n /** When true, generate new API keys, otherwise only will delete past API keys */\n createNewApiKey?: boolean;\n}): Promise<{\n /** Successfully generated */\n apiKeys: StoredApiKey[];\n /** Error results */\n errors: ApiKeyGenerateError[];\n}> {\n // Create GraphQL client\n const client = await buildTranscendGraphQLClientGeneric(transcendUrl, {});\n\n // Login the user\n logger.info(colors.magenta('Logging in using email and password.'));\n const { roles, loginCookie } = await loginUser(client, { email, password });\n logger.info(\n colors.green(\n `Successfully logged in and found ${roles.length} role${\n roles.length === 1 ? '' : 's'\n }!`,\n ),\n );\n\n // Filter down by parentOrganizationId\n const filteredRoles = parentOrganizationId\n ? roles.filter(\n (role) =>\n role.organization.id === parentOrganizationId ||\n role.organization.parentOrganizationId === parentOrganizationId,\n )\n : roles;\n\n // Save cookie to call route subsequent times\n client.setHeaders({\n Cookie: loginCookie,\n });\n\n // Save the resulting API keys\n const results: StoredApiKey[] = [];\n const errors: ApiKeyGenerateError[] = [];\n\n // Generate API keys\n logger.info(\n colors.magenta(\n `Generating API keys with title: ${apiKeyTitle}, scopes: ${scopes.join(\n ',',\n )}.`,\n ),\n );\n\n // Map over each role\n await mapSeries(filteredRoles, async (role) => {\n try {\n // Log into the other instance\n await assumeRole(client, { roleId: role.id, email });\n\n // Grab API keys with that title\n logger.info(\n colors.magenta(\n `Checking if API key already exists in organization \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n\n // Delete existing API key\n const [apiKeyWithTitle] = await fetchAllApiKeys(client, [apiKeyTitle]);\n if (apiKeyWithTitle && deleteExistingApiKey) {\n logger.info(\n colors.yellow(\n `Deleting existing API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n await deleteApiKey(client, apiKeyWithTitle.id);\n logger.info(\n colors.green(\n `Successfully deleted API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n } else if (apiKeyWithTitle) {\n // throw error if one exists but not configured to delete\n throw new Error(`API key already exists with title: \"${apiKeyTitle}\"`);\n }\n\n // Create the API key\n if (createNewApiKey) {\n logger.info(\n colors.magenta(\n `Creating API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n const { apiKey } = await createApiKey(client, {\n title: apiKeyTitle,\n scopes,\n });\n results.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n apiKey,\n });\n logger.info(\n colors.green(\n `Successfully created API key in \"${role.organization.name}\" with title: \"${apiKeyTitle}\".`,\n ),\n );\n } else {\n // Delete only\n results.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n apiKey: '',\n });\n }\n } catch (err) {\n logger.error(\n colors.red(\n `Failed to create API key in organization \"${role.organization.name}\"! - ${err.message}`,\n ),\n );\n errors.push({\n organizationName: role.organization.name,\n organizationId: role.organization.id,\n error: err.message,\n });\n }\n });\n logger.info(\n colors.green(\n `Successfully created ${results.length} API key${\n results.length === 1 ? '' : 's'\n }`,\n ),\n );\n\n if (errors.length > 0) {\n logger.error(\n colors.red(\n `Failed to create ${errors.length} API key${\n errors.length === 1 ? '' : 's'\n }!`,\n ),\n );\n }\n\n return { errors, apiKeys: results };\n}\n","import { decodeCodec } from '@transcend-io/type-utils';\nimport colors from 'colors';\nimport * as t from 'io-ts';\nimport { logger } from '../../logger';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { StoredApiKey } from '../../codecs';\n\n/**\n * Determine if the `--auth` parameter is an API key or a path to a JSON\n * file containing a list of API keys.\n *\n * @param auth - Raw auth parameter\n * @returns The API key or the list API keys\n */\nexport function validateTranscendAuth(auth: string): string | StoredApiKey[] {\n // Ensure auth is passed\n if (!auth) {\n logger.error(\n colors.red(\n 'A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY',\n ),\n );\n process.exit(1);\n }\n\n // Read from disk\n if (existsSync(auth)) {\n // validate that file is a list of API keys\n return decodeCodec(t.array(StoredApiKey), readFileSync(auth, 'utf-8'));\n }\n\n // Return as single API key\n return auth;\n}\n","import { existsSync, readdirSync } from 'node:fs';\n\n/**\n * List the files in a directory\n *\n * ```typescript\n * // The directory to search\n * const directory = '/User/test/transcend/my-app/app/containers';\n * // Returns ['test.js']\n * listFiles(directory);\n * ```\n *\n * @param directory - The directory to search\n * @param validExtensions - The list of valid extensions\n * @param removeExtensions - When true, remove the extensions from the listed files\n * @returns The list of files in the directory\n */\nexport function listFiles(\n directory: string,\n validExtensions?: string[],\n removeExtensions = false,\n): string[] {\n if (!existsSync(directory)) {\n return [];\n }\n\n const files = readdirSync(directory)\n .filter((fil) =>\n validExtensions\n ? validExtensions.filter((ext) => fil.endsWith(ext)).length\n : true,\n )\n .filter((fil) => fil.indexOf('.') > 0);\n\n return removeExtensions\n ? files.map((fil) => fil.replace(/\\.[^/.]+$/, ''))\n : files;\n}\n","import { readdirSync, statSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/**\n * List the folders in a directory\n *\n * @param startDir - The base directory to list from\n * @returns The list of folders in that directory\n */\nexport function listDirectories(startDir: string): string[] {\n return readdirSync(startDir).filter((entryName) =>\n statSync(join(startDir, entryName)).isDirectory(),\n );\n}\n"],"mappings":"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"}