@transcend-io/cli 8.0.1 → 8.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/bin/bash-complete.cjs +1 -1
  2. package/dist/bin/bash-complete.cjs.map +1 -1
  3. package/dist/bin/cli.cjs +1 -1
  4. package/dist/bin/cli.cjs.map +1 -1
  5. package/dist/bin/deprecated-command.cjs +2 -2
  6. package/dist/bin/deprecated-command.cjs.map +1 -1
  7. package/dist/chunk-6OZONTDQ.cjs +2 -0
  8. package/dist/chunk-6OZONTDQ.cjs.map +1 -0
  9. package/dist/{chunk-7NYZMFPT.cjs → chunk-6TGK25IB.cjs} +19 -19
  10. package/dist/chunk-6TGK25IB.cjs.map +1 -0
  11. package/dist/chunk-6XM6VMLJ.cjs +3 -0
  12. package/dist/chunk-6XM6VMLJ.cjs.map +1 -0
  13. package/dist/{chunk-KS2REJYA.cjs → chunk-CKMSFTE3.cjs} +4 -4
  14. package/dist/chunk-CKMSFTE3.cjs.map +1 -0
  15. package/dist/{chunk-WLUTU3MY.cjs → chunk-ID37BANI.cjs} +2 -2
  16. package/dist/{chunk-WLUTU3MY.cjs.map → chunk-ID37BANI.cjs.map} +1 -1
  17. package/dist/chunk-LKUJWJR3.cjs +2920 -0
  18. package/dist/chunk-LKUJWJR3.cjs.map +1 -0
  19. package/dist/{chunk-WRJVOXRS.cjs → chunk-NKFMM546.cjs} +2 -2
  20. package/dist/{chunk-WRJVOXRS.cjs.map → chunk-NKFMM546.cjs.map} +1 -1
  21. package/dist/chunk-O3WQC6E5.cjs +15 -0
  22. package/dist/chunk-O3WQC6E5.cjs.map +1 -0
  23. package/dist/chunk-PZBS6J75.cjs +2 -0
  24. package/dist/chunk-PZBS6J75.cjs.map +1 -0
  25. package/dist/chunk-RWJAOMT2.cjs +2 -0
  26. package/dist/chunk-RWJAOMT2.cjs.map +1 -0
  27. package/dist/chunk-VGKI7LU6.cjs +12 -0
  28. package/dist/chunk-VGKI7LU6.cjs.map +1 -0
  29. package/dist/{chunk-PNSZQIYV.cjs → chunk-VOKC5JFF.cjs} +2 -2
  30. package/dist/{chunk-PNSZQIYV.cjs.map → chunk-VOKC5JFF.cjs.map} +1 -1
  31. package/dist/impl-2LCNGN5D.cjs +2 -0
  32. package/dist/impl-2LCNGN5D.cjs.map +1 -0
  33. package/dist/impl-33QXEL4O.cjs +2 -0
  34. package/dist/impl-33QXEL4O.cjs.map +1 -0
  35. package/dist/impl-43DKJXBV.cjs +2 -0
  36. package/dist/impl-43DKJXBV.cjs.map +1 -0
  37. package/dist/impl-5AFEZAKI.cjs +2 -0
  38. package/dist/impl-5AFEZAKI.cjs.map +1 -0
  39. package/dist/impl-5YD72VPT.cjs +2 -0
  40. package/dist/impl-5YD72VPT.cjs.map +1 -0
  41. package/dist/impl-66EIN2RJ.cjs +2 -0
  42. package/dist/impl-66EIN2RJ.cjs.map +1 -0
  43. package/dist/{impl-MLEPL5MZ.cjs → impl-6R4MPO2O.cjs} +5 -5
  44. package/dist/impl-6R4MPO2O.cjs.map +1 -0
  45. package/dist/{impl-SW44TCHM.cjs → impl-6RKVUEC3.cjs} +2 -2
  46. package/dist/impl-6RKVUEC3.cjs.map +1 -0
  47. package/dist/impl-6U7SEQSV.cjs +2 -0
  48. package/dist/impl-6U7SEQSV.cjs.map +1 -0
  49. package/dist/impl-BNFO7GWR.cjs +2 -0
  50. package/dist/impl-BNFO7GWR.cjs.map +1 -0
  51. package/dist/impl-FBTBJCFT.cjs +2 -0
  52. package/dist/impl-FBTBJCFT.cjs.map +1 -0
  53. package/dist/impl-FLGGMBT2.cjs +2 -0
  54. package/dist/impl-FLGGMBT2.cjs.map +1 -0
  55. package/dist/impl-FUIXYMVR.cjs +2 -0
  56. package/dist/impl-FUIXYMVR.cjs.map +1 -0
  57. package/dist/impl-G4QTM3EH.cjs +2 -0
  58. package/dist/impl-G4QTM3EH.cjs.map +1 -0
  59. package/dist/impl-G4TWPWWG.cjs +2 -0
  60. package/dist/impl-G4TWPWWG.cjs.map +1 -0
  61. package/dist/impl-IAR3M5WX.cjs +2 -0
  62. package/dist/impl-IAR3M5WX.cjs.map +1 -0
  63. package/dist/impl-KLZ5YXHK.cjs +4 -0
  64. package/dist/impl-KLZ5YXHK.cjs.map +1 -0
  65. package/dist/impl-L7K7UJ6R.cjs +12 -0
  66. package/dist/impl-L7K7UJ6R.cjs.map +1 -0
  67. package/dist/impl-LXV4X3QI.cjs +2 -0
  68. package/dist/impl-LXV4X3QI.cjs.map +1 -0
  69. package/dist/impl-MLYBMFOO.cjs +2 -0
  70. package/dist/impl-MLYBMFOO.cjs.map +1 -0
  71. package/dist/impl-MY6ZDXYW.cjs +2 -0
  72. package/dist/impl-MY6ZDXYW.cjs.map +1 -0
  73. package/dist/impl-O5IWDALJ.cjs +3 -0
  74. package/dist/impl-O5IWDALJ.cjs.map +1 -0
  75. package/dist/impl-OFTJE5SD.cjs +2 -0
  76. package/dist/impl-OFTJE5SD.cjs.map +1 -0
  77. package/dist/impl-OJSC5MYT.cjs +7 -0
  78. package/dist/impl-OJSC5MYT.cjs.map +1 -0
  79. package/dist/impl-OUJ4L35V.cjs +2 -0
  80. package/dist/impl-OUJ4L35V.cjs.map +1 -0
  81. package/dist/impl-OXQKOZ4M.cjs +2 -0
  82. package/dist/impl-OXQKOZ4M.cjs.map +1 -0
  83. package/dist/impl-QHCWUI7F.cjs +2 -0
  84. package/dist/impl-QHCWUI7F.cjs.map +1 -0
  85. package/dist/impl-QW3OXCQ4.cjs +2 -0
  86. package/dist/impl-QW3OXCQ4.cjs.map +1 -0
  87. package/dist/impl-QWSN2LRT.cjs +2 -0
  88. package/dist/impl-QWSN2LRT.cjs.map +1 -0
  89. package/dist/impl-QX2IEWST.cjs +2 -0
  90. package/dist/impl-QX2IEWST.cjs.map +1 -0
  91. package/dist/impl-RZQTA7AY.cjs +2 -0
  92. package/dist/impl-RZQTA7AY.cjs.map +1 -0
  93. package/dist/impl-S2JT2ALK.cjs +2 -0
  94. package/dist/impl-S2JT2ALK.cjs.map +1 -0
  95. package/dist/impl-TGEQAHJ6.cjs +6 -0
  96. package/dist/impl-TGEQAHJ6.cjs.map +1 -0
  97. package/dist/impl-TGWQ5K5I.cjs +2 -0
  98. package/dist/impl-TGWQ5K5I.cjs.map +1 -0
  99. package/dist/impl-TJW5OUHX.cjs +6 -0
  100. package/dist/impl-TJW5OUHX.cjs.map +1 -0
  101. package/dist/impl-UQUGKIP5.cjs +2 -0
  102. package/dist/impl-UQUGKIP5.cjs.map +1 -0
  103. package/dist/{impl-WSRMGN2H.cjs → impl-VVKD5D4X.cjs} +2 -2
  104. package/dist/impl-VVKD5D4X.cjs.map +1 -0
  105. package/dist/impl-WYJ3WF33.cjs +2 -0
  106. package/dist/impl-WYJ3WF33.cjs.map +1 -0
  107. package/dist/index.cjs +3 -3
  108. package/dist/index.cjs.map +1 -1
  109. package/dist/index.d.cts +92 -12
  110. package/package.json +4 -2
  111. package/dist/chunk-56TB3NTQ.cjs +0 -2
  112. package/dist/chunk-56TB3NTQ.cjs.map +0 -1
  113. package/dist/chunk-6IHSPKMP.cjs +0 -2
  114. package/dist/chunk-6IHSPKMP.cjs.map +0 -1
  115. package/dist/chunk-7G4SCKPN.cjs +0 -2
  116. package/dist/chunk-7G4SCKPN.cjs.map +0 -1
  117. package/dist/chunk-7NYZMFPT.cjs.map +0 -1
  118. package/dist/chunk-AMO6I4AO.cjs +0 -2
  119. package/dist/chunk-AMO6I4AO.cjs.map +0 -1
  120. package/dist/chunk-DBYKJZEA.cjs +0 -15
  121. package/dist/chunk-DBYKJZEA.cjs.map +0 -1
  122. package/dist/chunk-JMBVOY56.cjs +0 -3
  123. package/dist/chunk-JMBVOY56.cjs.map +0 -1
  124. package/dist/chunk-KS2REJYA.cjs.map +0 -1
  125. package/dist/chunk-MBB6OD4E.cjs +0 -2
  126. package/dist/chunk-MBB6OD4E.cjs.map +0 -1
  127. package/dist/chunk-PSRKLYGK.cjs +0 -2
  128. package/dist/chunk-PSRKLYGK.cjs.map +0 -1
  129. package/dist/chunk-PTQHBKJU.cjs +0 -12
  130. package/dist/chunk-PTQHBKJU.cjs.map +0 -1
  131. package/dist/chunk-TD7ADMVO.cjs +0 -2
  132. package/dist/chunk-TD7ADMVO.cjs.map +0 -1
  133. package/dist/chunk-UPUHHIXZ.cjs +0 -2920
  134. package/dist/chunk-UPUHHIXZ.cjs.map +0 -1
  135. package/dist/impl-4VCIYJCG.cjs +0 -2
  136. package/dist/impl-4VCIYJCG.cjs.map +0 -1
  137. package/dist/impl-57LDSC2M.cjs +0 -2
  138. package/dist/impl-57LDSC2M.cjs.map +0 -1
  139. package/dist/impl-5BNP4JYG.cjs +0 -2
  140. package/dist/impl-5BNP4JYG.cjs.map +0 -1
  141. package/dist/impl-5KEI5AJG.cjs +0 -2
  142. package/dist/impl-5KEI5AJG.cjs.map +0 -1
  143. package/dist/impl-5MGEJPTO.cjs +0 -12
  144. package/dist/impl-5MGEJPTO.cjs.map +0 -1
  145. package/dist/impl-AHLMRZNM.cjs +0 -2
  146. package/dist/impl-AHLMRZNM.cjs.map +0 -1
  147. package/dist/impl-AHNQLAH5.cjs +0 -2
  148. package/dist/impl-AHNQLAH5.cjs.map +0 -1
  149. package/dist/impl-C53IQ5HC.cjs +0 -2
  150. package/dist/impl-C53IQ5HC.cjs.map +0 -1
  151. package/dist/impl-DSRH7IN2.cjs +0 -2
  152. package/dist/impl-DSRH7IN2.cjs.map +0 -1
  153. package/dist/impl-FP3D5M5B.cjs +0 -2
  154. package/dist/impl-FP3D5M5B.cjs.map +0 -1
  155. package/dist/impl-G24XCV65.cjs +0 -2
  156. package/dist/impl-G24XCV65.cjs.map +0 -1
  157. package/dist/impl-GP2DMI4O.cjs +0 -2
  158. package/dist/impl-GP2DMI4O.cjs.map +0 -1
  159. package/dist/impl-GPTJLZHD.cjs +0 -2
  160. package/dist/impl-GPTJLZHD.cjs.map +0 -1
  161. package/dist/impl-HQLA253Z.cjs +0 -2
  162. package/dist/impl-HQLA253Z.cjs.map +0 -1
  163. package/dist/impl-HVKSG236.cjs +0 -2
  164. package/dist/impl-HVKSG236.cjs.map +0 -1
  165. package/dist/impl-IKTY3PZ3.cjs +0 -2
  166. package/dist/impl-IKTY3PZ3.cjs.map +0 -1
  167. package/dist/impl-IVDJEVS4.cjs +0 -6
  168. package/dist/impl-IVDJEVS4.cjs.map +0 -1
  169. package/dist/impl-JUUYZHGL.cjs +0 -2
  170. package/dist/impl-JUUYZHGL.cjs.map +0 -1
  171. package/dist/impl-L2XUXKHL.cjs +0 -2
  172. package/dist/impl-L2XUXKHL.cjs.map +0 -1
  173. package/dist/impl-LZUXHWDU.cjs +0 -2
  174. package/dist/impl-LZUXHWDU.cjs.map +0 -1
  175. package/dist/impl-MLEPL5MZ.cjs.map +0 -1
  176. package/dist/impl-PAXESZFC.cjs +0 -2
  177. package/dist/impl-PAXESZFC.cjs.map +0 -1
  178. package/dist/impl-QJJNBKJR.cjs +0 -4
  179. package/dist/impl-QJJNBKJR.cjs.map +0 -1
  180. package/dist/impl-QW6NAOEK.cjs +0 -7
  181. package/dist/impl-QW6NAOEK.cjs.map +0 -1
  182. package/dist/impl-RGYCC7MP.cjs +0 -2
  183. package/dist/impl-RGYCC7MP.cjs.map +0 -1
  184. package/dist/impl-RPRRJOI3.cjs +0 -3
  185. package/dist/impl-RPRRJOI3.cjs.map +0 -1
  186. package/dist/impl-RXVSZRCO.cjs +0 -2
  187. package/dist/impl-RXVSZRCO.cjs.map +0 -1
  188. package/dist/impl-SW44TCHM.cjs.map +0 -1
  189. package/dist/impl-T4BXYX2K.cjs +0 -2
  190. package/dist/impl-T4BXYX2K.cjs.map +0 -1
  191. package/dist/impl-TJP4ZLHS.cjs +0 -2
  192. package/dist/impl-TJP4ZLHS.cjs.map +0 -1
  193. package/dist/impl-TLDBJN7P.cjs +0 -2
  194. package/dist/impl-TLDBJN7P.cjs.map +0 -1
  195. package/dist/impl-UG3FWG22.cjs +0 -2
  196. package/dist/impl-UG3FWG22.cjs.map +0 -1
  197. package/dist/impl-UMRC5P5T.cjs +0 -2
  198. package/dist/impl-UMRC5P5T.cjs.map +0 -1
  199. package/dist/impl-VF3LT3IJ.cjs +0 -6
  200. package/dist/impl-VF3LT3IJ.cjs.map +0 -1
  201. package/dist/impl-W6OLYSNF.cjs +0 -2
  202. package/dist/impl-W6OLYSNF.cjs.map +0 -1
  203. package/dist/impl-WSRMGN2H.cjs.map +0 -1
  204. package/dist/impl-XW7JECCZ.cjs +0 -2
  205. package/dist/impl-XW7JECCZ.cjs.map +0 -1
  206. package/dist/impl-YUYWOPRG.cjs +0 -2
  207. package/dist/impl-YUYWOPRG.cjs.map +0 -1
package/dist/index.d.cts CHANGED
@@ -124088,12 +124088,8 @@ declare const RequestIdentifier: t.TypeC<{
124088
124088
  type: t.KeyofC<{
124089
124089
  email: unknown;
124090
124090
  phone: unknown;
124091
- thriveTrmContactId: unknown;
124092
- customerIoId: unknown;
124093
- sprigVisitorId: unknown;
124094
- linkedInURL: unknown;
124095
- custom: unknown;
124096
124091
  coreIdentifier: unknown;
124092
+ custom: unknown;
124097
124093
  gaid: unknown;
124098
124094
  idfa: unknown;
124099
124095
  idfv: unknown;
@@ -124105,8 +124101,12 @@ declare const RequestIdentifier: t.TypeC<{
124105
124101
  stripeId: unknown;
124106
124102
  braintreeCustomerId: unknown;
124107
124103
  chargebeeId: unknown;
124104
+ thriveTrmContactId: unknown;
124108
124105
  talkableUUID: unknown;
124109
124106
  recurlyId: unknown;
124107
+ customerIoId: unknown;
124108
+ sprigVisitorId: unknown;
124109
+ linkedInURL: unknown;
124110
124110
  advertisingId: unknown;
124111
124111
  personaReferenceId: unknown;
124112
124112
  streamUserId: unknown;
@@ -124133,12 +124133,8 @@ declare const RequestIdentifiersResponse: t.TypeC<{
124133
124133
  type: t.KeyofC<{
124134
124134
  email: unknown;
124135
124135
  phone: unknown;
124136
- thriveTrmContactId: unknown;
124137
- customerIoId: unknown;
124138
- sprigVisitorId: unknown;
124139
- linkedInURL: unknown;
124140
- custom: unknown;
124141
124136
  coreIdentifier: unknown;
124137
+ custom: unknown;
124142
124138
  gaid: unknown;
124143
124139
  idfa: unknown;
124144
124140
  idfv: unknown;
@@ -124150,8 +124146,12 @@ declare const RequestIdentifiersResponse: t.TypeC<{
124150
124146
  stripeId: unknown;
124151
124147
  braintreeCustomerId: unknown;
124152
124148
  chargebeeId: unknown;
124149
+ thriveTrmContactId: unknown;
124153
124150
  talkableUUID: unknown;
124154
124151
  recurlyId: unknown;
124152
+ customerIoId: unknown;
124153
+ sprigVisitorId: unknown;
124154
+ linkedInURL: unknown;
124155
124155
  advertisingId: unknown;
124156
124156
  personaReferenceId: unknown;
124157
124157
  streamUserId: unknown;
@@ -143850,7 +143850,7 @@ declare function removeUnverifiedRequestIdentifiers({ requestActions, identifier
143850
143850
  }): Promise<number>;
143851
143851
 
143852
143852
  var description = "A command line interface for programmatic operations across Transcend.";
143853
- var version = "8.0.1";
143853
+ var version = "8.0.3";
143854
143854
 
143855
143855
  /**
143856
143856
  * The name of the main binary for the CLI
@@ -143887,6 +143887,13 @@ declare const SCOPES_BY_TITLE: Record<string, ScopeDefinition & {
143887
143887
  name: ScopeName;
143888
143888
  }>;
143889
143889
  declare const SCOPE_TITLES: string[];
143890
+ /**
143891
+ * HTTP statuses that should be retried *in place* without splitting.
143892
+ * 429: Rate-limited
143893
+ * 502: Upstream/edge gateway error
143894
+ * 329: Reserved for custom infra (kept defensively)
143895
+ */
143896
+ declare const RETRYABLE_BATCH_STATUSES: Set<429 | 502 | 329>;
143890
143897
 
143891
143898
  /**
143892
143899
  * Update the consent manager to latest version
@@ -144241,6 +144248,79 @@ declare function parseVariablesFromString(variables: string): {
144241
144248
  [k in string]: string;
144242
144249
  };
144243
144250
 
144251
+ /**
144252
+ * Extract an HTTP status code from a thrown error (got compatible).
144253
+ *
144254
+ * @param err - Unknown error thrown by network call
144255
+ * @returns HTTP status code, if present
144256
+ */
144257
+ declare function getErrorStatus(err: unknown): number | undefined;
144258
+
144259
+ /**
144260
+ * Extract a human-readable error message from a thrown error.
144261
+ *
144262
+ * Tries to parse JSON bodies that follow common REST/GraphQL error patterns:
144263
+ * { error: { message: string } }
144264
+ * { errors: [{ message: string }, ...] }
144265
+ *
144266
+ * Falls back to `err.message` or 'Unknown error'.
144267
+ *
144268
+ * @param err - Unknown error thrown by network call
144269
+ * @returns A concise error string safe to log/show
144270
+ */
144271
+ declare function extractErrorMessage(err: unknown): string;
144272
+
144273
+ /**
144274
+ * Sleep in a promise
144275
+ *
144276
+ * @param sleepTime - The time to sleep in milliseconds.
144277
+ * @returns Resolves promise
144278
+ */
144279
+ declare function sleepPromise(sleepTime: number): Promise<number>;
144280
+
144281
+ /**
144282
+ * Split an array roughly in half. Stable for even/odd lengths.
144283
+ *
144284
+ * @param entries - Items to split
144285
+ * @returns A tuple [left, right] halves
144286
+ */
144287
+ declare function splitInHalf<T>(entries: T[]): [T[], T[]];
144288
+
144289
+ interface RetryPolicy {
144290
+ /** Maximum retry attempts (not counting the initial try) */
144291
+ maxAttempts: number;
144292
+ /** Fixed delay between attempts in milliseconds */
144293
+ delayMs: number;
144294
+ /**
144295
+ * Decide whether a given error should be retried.
144296
+ *
144297
+ * @param status - HTTP status code (if known)
144298
+ * @param message - Extracted error message (if known)
144299
+ */
144300
+ shouldRetry(status?: number, message?: string): boolean;
144301
+ }
144302
+ /**
144303
+ * Retry a single async operation according to the provided policy.
144304
+ * The operation is executed once initially, then up to `maxAttempts` retries.
144305
+ *
144306
+ * @param op - Operation to run
144307
+ * @param policy - Retry policy
144308
+ * @param onBackoff - Observer called before each retry (for logging/metrics)
144309
+ * @returns Result of the operation if it eventually succeeds
144310
+ * @throws The last error encountered if all retries fail
144311
+ */
144312
+ declare function retrySamePromise<T>(op: () => Promise<T>, policy: RetryPolicy, onBackoff: (note: string) => void): Promise<T>;
144313
+
144314
+ /**
144315
+ * Limits the number of records in the returned object to a maximum.
144316
+ * For entries beyond the max, sets their value to `true`.
144317
+ *
144318
+ * @param obj - Object
144319
+ * @param max - Maximum number of entries to retain original value.
144320
+ * @returns Object with keys mapped to their value or `true` if over the limit.
144321
+ */
144322
+ declare function limitRecords<T>(obj: Record<string, T>, max: number): Record<string, T | true>;
144323
+
144244
144324
  declare const CronIdentifier: t.TypeC<{
144245
144325
  /** The identifier value */
144246
144326
  identifier: t.StringC;
@@ -145007,4 +145087,4 @@ type EnrichPrivacyRequest = t.TypeOf<typeof EnrichPrivacyRequest>;
145007
145087
  */
145008
145088
  declare function enrichPrivacyRequest(sombra: Got, { id: rawId, ...rest }: EnrichPrivacyRequest, enricherId: string, index?: number): Promise<boolean>;
145009
145089
 
145010
- export { ACTIONS, ADD_MESSAGES_TO_PROMPT_RUN, ADD_SILO_DISCOVERY_RESULTS, ADMIN_DASH, ADMIN_DASH_DATAPOINTS, ADMIN_DASH_INTEGRATIONS, AGENTS, AGENT_FILES, AGENT_FUNCTIONS, type AIIntegrationC, API_KEYS, APPROVE_PRIVACY_REQUEST, ASSESSMENTS, ASSESSMENT_SECTION_FIELDS, ASSESSMENT_TEMPLATES, ASSUME_ROLE, ATTRIBUTES, ATTRIBUTE_KEYS_REQUESTS, ATTRIBUTE_VALUES, type Action, ActionInput, type ActionItem, ActionItemCollectionInput, ActionItemInput, type ActionItemRaw, type AddMessagesToPromptRunInput, type Agent, type AgentFile, type AgentFileFilterBy, AgentFileInput, type AgentFunction, AgentFunctionInput, AgentInput, type ApiKey, type ApiKeyGenerateError, ApiKeyInput, type Assessment, AssessmentAction, type AssessmentAnswer, type AssessmentAnswerOption, AssessmentAnswerOptionInput, type AssessmentComment, AssessmentDisplayLogicInput, type AssessmentGroup, AssessmentInput, AssessmentNestedRule, AssessmentNestedRuleInput, type AssessmentPreviousSubmission, type AssessmentQuestion, type AssessmentResource, AssessmentResourceInput, AssessmentRetentionScheduleInput, AssessmentRiskLogic, AssessmentRule, AssessmentRuleInput, type AssessmentSection, AssessmentSectionInput, AssessmentSectionQuestionInput, type AssessmentTemplate, AssessmentTemplateInput, AttestedExtraIdentifiers, type Attribute, AttributeInput, type AttributeKey, type AttributeNameMap, AttributePreview, type AttributeValue, AttributeValueInput, BLANK, BULK_APPLY, BULK_REQUEST_FILES, BUSINESS_ENTITIES, type BusinessEntity, BusinessEntityInput, CANCEL_PRIVACY_REQUEST, CAN_APPLY_IN_BULK, CATALOGS, CHANGE_REQUEST_DATA_SILO_STATUS, CODE_PACKAGES, CONSENT_MANAGER_ANALYTICS_DATA, CONSENT_PARTITIONS, COOKIES, CREATE_ACTION_ITEMS, CREATE_ACTION_ITEM_COLLECTION, CREATE_AGENT, CREATE_AGENT_FILE, CREATE_AGENT_FUNCTION, CREATE_API_KEY, CREATE_ATTRIBUTE, CREATE_ATTRIBUTE_VALUES, CREATE_BUSINESS_ENTITY, CREATE_CODE_PACKAGE, CREATE_CONSENT_EXPERIENCE, CREATE_CONSENT_MANAGER, CREATE_CONSENT_PARTITION, CREATE_DATA_FLOWS, CREATE_DATA_SILOS, CREATE_DATA_SUBJECT, CREATE_DATA_SUB_CATEGORY, CREATE_ENRICHER, CREATE_IDENTIFIER, CREATE_PROCESSING_ACTIVITY, CREATE_PROCESSING_PURPOSE_SUB_CATEGORY, CREATE_PROMPT, CREATE_PROMPT_GROUP, CREATE_PROMPT_PARTIAL, CREATE_REPOSITORY, CREATE_SOFTWARE_DEVELOPMENT_KIT, CREATE_TEAM, CREATE_TEMPLATE, CREATE_VENDOR, CachedFileState, CachedRequestState, type Catalog, CodePackageInput, CodePackageSdk, ColumnName, type ColumnNameMap, type ConsentExperience, ConsentManageExperienceInput, type ConsentManager, ConsentManagerInput, type ConsentManagerMetric, ConsentManagerMetricBin, ConsentManagerServiceMetadata, type ConsentManagerTheme, ConsentPreferenceResponse, ConsentPreferenceTopic, ConsentPreferenceTopicOptionValue, ConsentPurpose, type Cookie, CookieCsvInput, CookieInput, type CreatedApiKey, CronIdentifier, CronIdentifierPush, type CronIdentifierWithAction, type CsvFormattedIdentifier, DATAPOINT_EXPORT, DATA_FLOWS, DATA_POINTS, DATA_POINT_COUNT, DATA_SILOS, DATA_SILOS_ENRICHED, DATA_SILO_EXPORT, DATA_SUBJECTS, DATA_SUB_CATEGORIES, DEFAULT_TRANSCEND_API, DEFAULT_TRANSCEND_CONSENT_API, DEFAULT_TRANSCEND_PULL_RESOURCES, DELETE_API_KEY, DELETE_ATTRIBUTE_VALUE, DEPLOYED_PRIVACY_CENTER_URL, DEPLOY_CONSENT_MANAGER, DETERMINE_LOGIN_METHOD, DataCategoryGuessInput, DataCategoryInput, DataCategoryPreviewInput, DataCategoryRecommendationInput, type DataFlow, DataFlowCsvInput, DataFlowInput, type DataPointCsvPreview, type DataSilo, type DataSiloAttributeValue, type DataSiloCsvPreview, type DataSiloEnriched, DataSiloInput, type DataSubCategory, type DataSubject, DataSubjectInput, type DatapointFilterOptions, DatapointInput, ENABLED_PLUGINS, ENRICHERS, ENTRY_COUNT, EXPERIENCES, type EnabledRouteC, type EnabledRoutesC, EnrichPrivacyRequest, type Enricher, EnricherInput, type ExportedPrivacyRequest, type ExternalUser, FETCH_CONSENT_MANAGER, FETCH_CONSENT_MANAGER_ID, FETCH_CONSENT_MANAGER_THEME, FETCH_PRIVACY_CENTER_ID, FieldInput, GLOBAL_ACTION_ITEMS, GLOBAL_ACTION_ITEM_COLLECTIONS, type GetPromptParamType, type GetPromptResponseType, IDENTIFIERS, IDENTIFIER_BLOCK_LIST, IMPORT_ONE_TRUST_ASSESSMENT_FORMS, INITIALIZER, IP_ADDRESS_REGEX, IS_REQUIRED, type Identifier, IdentifierInput, type IdentifierNameMap, ImportOnetrustAssessmentsInput, type IndexedCatalogs, type Initializer, IntlMessage, IntlMessageInput, LARGE_LANGUAGE_MODELS, LOGIN, MESSAGES, type Message, NEW_IDENTIFIER_TYPES, NONE, NOTIFY_ADDITIONAL_TIME, ORGANIZATION, OneTrustFileFormat, OneTrustPullResource, OneTrustPullSource, OpenAIEnabledRoute, OpenAIEnabledRoutes, OpenAIIntegration, OpenAIRouteName, type OrganizationPreview, POLICIES, PREFERENCE_TOPICS, PRIVACY_CENTER, PROCESSING_ACTIVITIES, PROCESSING_PURPOSE_SUB_CATEGORIES, PROMPTS, PROMPTS_WITH_VARIABLES, PROMPT_GROUPS, PROMPT_PARTIALS, PROMPT_THREADS, PURPOSES, ParsedAttributeInput, PartitionInput, PathfinderPolicy, PathfinderPolicyName, PathfinderPolicyNameC, PathfinderPromptRunMetadata, type Plugin, type PluginResponse, type Policy, PolicyInput, type PreferenceTopic, type PrivacyCenter, PrivacyCenterInput, PrivacyRequest, PrivacyRequestInput, PrivacyRequestResponse, type PrivacyRequestWithIdentifiers, type ProcessingActivity, ProcessingActivityInput, ProcessingPurposeInput, ProcessingPurposePreviewInput, type ProcessingPurposeSubCategory, type Prompt, PromptAVendorEmailSettings, type PromptCalculatedVariable, type PromptGroup, PromptGroupInput, PromptInput, type PromptPartial, PromptPartialInput, type PromptRunResult, type PromptRuntimeVariable, type PromptThread, type Purpose, PurposeMap, type PurposeWithPreferences, REDUCED_REQUESTS_FOR_DATA_SILO_COUNT, REMOVE_REQUEST_IDENTIFIERS, REPORT_PROMPT_RUN, REPOSITORIES, REQUESTS, REQUEST_DATA_SILOS, REQUEST_ENRICHERS, REQUEST_FILES, REQUEST_IDENTIFIERS, RETRY_REQUEST_DATA_SILO, RETRY_REQUEST_ENRICHER, RegionInput, type ReportPromptRunInput, type ReportPromptRunOptions, RepositoryInput, type RequestDataSilo, type RequestEnricher, type RequestFile, type RequestFileCursor, RequestFileMetadata, RequestFileMetadataResponse, type RequestFileResponse, RequestIdentifier, type RequestIdentifierMetadata, RequestIdentifiersResponse, type RetentionSchedule, RiskAssignmentInput, type RiskCategory, type RiskFramework, type RiskLevel, RiskLogicInput, type RiskMatrix, type RiskMatrixColumn, type RiskMatrixRow, SCOPES_BY_TITLE, SCOPE_TITLES, SET_RESOURCE_ATTRIBUTES, SKIP_REQUEST_ENRICHER, SOFTWARE_DEVELOPMENT_KITS, SOMBRA_VERSION, SUB_DATA_POINTS, SUB_DATA_POINTS_COUNT, SUB_DATA_POINTS_WITH_GUESSES, SYNC_ATTRIBUTE_TYPES, SoftwareDevelopmentKitInput, StoredApiKey, type SubDataPoint, type SubDataPointCsvPreview, SuccessfulRequest, TEAMS, TEMPLATES, TOGGLE_CONSENT_PRECEDENCE, TOGGLE_DATA_SUBJECT, TOGGLE_TELEMETRY_PARTITION_STRATEGY, TOGGLE_UNKNOWN_COOKIE_POLICY, TOGGLE_UNKNOWN_REQUEST_POLICY, TR_PULL_RESOURCE_SCOPE_MAP, TR_PUSH_RESOURCE_SCOPE_MAP, TR_YML_RESOURCE_TO_FIELD_NAME, type Team, TeamInput, type Template, TemplateInput, TranscendInput, type TranscendPartition, type TranscendPrompt, TranscendPromptManager, type TranscendPromptPartialTemplated, type TranscendPromptTemplated, type TranscendPromptsAndVariables, type TranscendPullConfigurationInput, TranscendPullResource, UPDATE_ACTION, UPDATE_ACTION_ITEMS, UPDATE_ACTION_ITEM_COLLECTION, UPDATE_AGENTS, UPDATE_AGENT_FILES, UPDATE_AGENT_FUNCTIONS, UPDATE_ATTRIBUTE, UPDATE_ATTRIBUTE_VALUES, UPDATE_BUSINESS_ENTITIES, UPDATE_CODE_PACKAGES, UPDATE_CONSENT_EXPERIENCE, UPDATE_CONSENT_MANAGER_DOMAINS, UPDATE_CONSENT_MANAGER_PARTITION, UPDATE_CONSENT_MANAGER_THEME, UPDATE_CONSENT_MANAGER_TO_LATEST, UPDATE_CONSENT_MANAGER_VERSION, UPDATE_DATA_FLOWS, UPDATE_DATA_SILOS, UPDATE_DATA_SUBJECT, UPDATE_DATA_SUB_CATEGORIES, UPDATE_ENRICHER, UPDATE_IDENTIFIER, UPDATE_INTL_MESSAGES, UPDATE_LOAD_OPTIONS, UPDATE_OR_CREATE_COOKIES, UPDATE_OR_CREATE_DATA_POINT, UPDATE_POLICIES, UPDATE_PRIVACY_CENTER, UPDATE_PRIVACY_REQUEST, UPDATE_PROCESSING_ACTIVITIES, UPDATE_PROCESSING_PURPOSE_SUB_CATEGORIES, UPDATE_PROMPTS, UPDATE_PROMPT_GROUPS, UPDATE_PROMPT_PARTIALS, UPDATE_REPOSITORIES, UPDATE_SOFTWARE_DEVELOPMENT_KITS, UPDATE_TEAM, UPDATE_VENDORS, USERS, USP_STRING_REGEX, type User, type UserPreview, type UserRole, VARIABLE_PARAMETERS_NAME, VARIABLE_PARAMETERS_REGEXP, VENDORS, type Vendor, VendorInput, WebhookHeader, type XdiSyncGroups, addMessagesToPromptRun, appendCsvSync, approvePrivacyRequests, assumeRole, buildAIIntegrationType, buildEnabledRouteType, buildTranscendGraphQLClient, buildTranscendGraphQLClientGeneric, buildXdiSyncEndpoint, bulkRestartRequests, bulkRetryEnrichers, cancelPrivacyRequests, consentManagersToBusinessEntities, convertToDataSubjectAllowlist, convertToDataSubjectBlockList, createActionItemCollection, createActionItems, createAgent, createAgentFile, createAgentFunction, createApiKey, createBusinessEntity, createCodePackage, createConsentToken, createDataCategory, createDataFlows, createProcessingPurpose, createPrompt, createRegexForTag, createRepository, createSoftwareDevelopmentKit, createSombraGotInstance, createTranscendConsentGotInstance, createVendor, defineTranscendPrompts, deleteApiKey, deployConsentManager, description, domainToHost, downloadPrivacyRequestFiles, enrichPrivacyRequest, ensureAllDataSubjectsExist, extractClientError, fetchActiveSiloDiscoPlugin, fetchAllActionItems, fetchAllActions, fetchAllAgentFiles, fetchAllAgentFunctions, fetchAllAgents, fetchAllApiKeys, fetchAllAssessmentTemplates, fetchAllAssessments, fetchAllAttributeValues, fetchAllAttributes, fetchAllBusinessEntities, fetchAllCatalogs, fetchAllCookies, fetchAllDataCategories, fetchAllDataFlows, fetchAllDataPoints, fetchAllDataSilos, fetchAllDataSubjects, fetchAllEnrichers, fetchAllIdentifiers, fetchAllMessages, fetchAllPolicies, fetchAllPreferenceTopics, fetchAllPrivacyCenters, fetchAllProcessingActivities, fetchAllProcessingPurposes, fetchAllPromptGroups, fetchAllPromptPartials, fetchAllPromptThreads, fetchAllPrompts, fetchAllPurposes, fetchAllPurposesAndPreferences, fetchAllRequestAttributeKeys, fetchAllRequestEnrichers, fetchAllRequestIdentifierMetadata, fetchAllRequestIdentifiers, fetchAllRequests, fetchAllSubDataPoints, fetchAllTeams, fetchAllTemplates, fetchAllUsers, fetchAllVendors, fetchAndIndexCatalogs, fetchApiKeys, fetchConsentManager, fetchConsentManagerAnalyticsData, fetchConsentManagerExperiences, fetchConsentManagerId, fetchConsentManagerTheme, fetchConsentPreferences, fetchEnrichedDataSilos, fetchIdentifiersAndCreateMissing, fetchPartitions, fetchPrivacyCenterId, fetchPrivacyCenterUrl, fetchPromptsWithVariables, fetchRequestDataSilo, fetchRequestDataSiloActiveCount, fetchRequestDataSilos, fetchRequestFilesForRequest, filterNullishValuesFromObject, filterRows, fuzzyMatchColumns, fuzzySearch, generateCrossAccountApiKeys, getFileMetadataForPrivacyRequests, getGitFilesThatChanged, getUniqueValuesForColumn, inquirerAutoComplete, inquirerConfirmBoolean, inquirerConfirmText, listDirectories, listFiles, loginUser, makeGraphQLRequest, mapColumnsToAttributes, mapColumnsToIdentifiers, mapCsvColumnsToApi, mapCsvRowsToRequestInputs, mapEnumValues, mapRequestEnumValues, markCronIdentifierCompleted, markRequestDataSiloIdsCompleted, markSilentPrivacyRequests, mergeTranscendInputs, name, normalizeIdentifierValue, notifyPrivacyRequestsAdditionalTime, parseAssessmentDisplayLogic, parseAssessmentRiskLogic, parseAttributesFromString, parseFilePath, parseVariablesFromString, pullAllDatapoints, pullChunkedCustomSiloOutstandingIdentifiers, pullConsentManagerMetrics, pullCronPageOfIdentifiers, pullManualEnrichmentIdentifiersToCsv, pullPrivacyRequests, pullTranscendConfiguration, pullUnstructuredSubDataPointRecommendations, pushCronIdentifiersFromCsv, pushManualEnrichmentIdentifiersFromCsv, readCsv, readTranscendYaml, removeLinks, removeUnverifiedRequestIdentifiers, replaceVariablesInYaml, reportPromptRun, restartPrivacyRequest, retryRequestDataSilos, retryRequestEnricher, setResourceAttributes, skipPreflightJobs, skipRequestDataSilos, splitCsvToList, streamPrivacyRequestFiles, submitPrivacyRequest, syncAction, syncActionItemCollections, syncActionItems, syncAgentFiles, syncAgentFunctions, syncAgents, syncAttribute, syncBusinessEntities, syncCodePackages, syncConfigurationToTranscend, syncConsentManager, syncConsentManagerExperiences, syncCookies, syncDataCategories, syncDataFlows, syncDataSiloDependencies, syncDataSilos, syncDataSubject, syncEnricher, syncIdentifier, syncIntlMessages, syncPartitions, syncPolicies, syncPrivacyCenter, syncProcessingActivities, syncProcessingPurposes, syncPrompts, syncRepositories, syncSoftwareDevelopmentKits, syncTemplate, syncVendors, updateActionItem, updateActionItemCollection, updateAgentFiles, updateAgentFunctions, updateAgents, updateBusinessEntities, updateCodePackages, updateConsentManagerToLatest, updateConsentManagerVersionToLatest, updateDataCategories, updateDataFlows, updateIntlMessages, updateOrCreateCookies, updatePolicies, updateProcessingPurposes, updatePrompts, updateRepositories, updateSoftwareDevelopmentKits, updateVendors, uploadConsents, uploadCookiesFromCsv, uploadDataFlowsFromCsv, uploadPrivacyRequestsFromCsv, uploadSiloDiscoveryResults, validateTranscendAuth, version, writeCsv, writeCsvSync, writeLargeCsv, writeTranscendYaml };
145090
+ export { ACTIONS, ADD_MESSAGES_TO_PROMPT_RUN, ADD_SILO_DISCOVERY_RESULTS, ADMIN_DASH, ADMIN_DASH_DATAPOINTS, ADMIN_DASH_INTEGRATIONS, AGENTS, AGENT_FILES, AGENT_FUNCTIONS, type AIIntegrationC, API_KEYS, APPROVE_PRIVACY_REQUEST, ASSESSMENTS, ASSESSMENT_SECTION_FIELDS, ASSESSMENT_TEMPLATES, ASSUME_ROLE, ATTRIBUTES, ATTRIBUTE_KEYS_REQUESTS, ATTRIBUTE_VALUES, type Action, ActionInput, type ActionItem, ActionItemCollectionInput, ActionItemInput, type ActionItemRaw, type AddMessagesToPromptRunInput, type Agent, type AgentFile, type AgentFileFilterBy, AgentFileInput, type AgentFunction, AgentFunctionInput, AgentInput, type ApiKey, type ApiKeyGenerateError, ApiKeyInput, type Assessment, AssessmentAction, type AssessmentAnswer, type AssessmentAnswerOption, AssessmentAnswerOptionInput, type AssessmentComment, AssessmentDisplayLogicInput, type AssessmentGroup, AssessmentInput, AssessmentNestedRule, AssessmentNestedRuleInput, type AssessmentPreviousSubmission, type AssessmentQuestion, type AssessmentResource, AssessmentResourceInput, AssessmentRetentionScheduleInput, AssessmentRiskLogic, AssessmentRule, AssessmentRuleInput, type AssessmentSection, AssessmentSectionInput, AssessmentSectionQuestionInput, type AssessmentTemplate, AssessmentTemplateInput, AttestedExtraIdentifiers, type Attribute, AttributeInput, type AttributeKey, type AttributeNameMap, AttributePreview, type AttributeValue, AttributeValueInput, BLANK, BULK_APPLY, BULK_REQUEST_FILES, BUSINESS_ENTITIES, type BusinessEntity, BusinessEntityInput, CANCEL_PRIVACY_REQUEST, CAN_APPLY_IN_BULK, CATALOGS, CHANGE_REQUEST_DATA_SILO_STATUS, CODE_PACKAGES, CONSENT_MANAGER_ANALYTICS_DATA, CONSENT_PARTITIONS, COOKIES, CREATE_ACTION_ITEMS, CREATE_ACTION_ITEM_COLLECTION, CREATE_AGENT, CREATE_AGENT_FILE, CREATE_AGENT_FUNCTION, CREATE_API_KEY, CREATE_ATTRIBUTE, CREATE_ATTRIBUTE_VALUES, CREATE_BUSINESS_ENTITY, CREATE_CODE_PACKAGE, CREATE_CONSENT_EXPERIENCE, CREATE_CONSENT_MANAGER, CREATE_CONSENT_PARTITION, CREATE_DATA_FLOWS, CREATE_DATA_SILOS, CREATE_DATA_SUBJECT, CREATE_DATA_SUB_CATEGORY, CREATE_ENRICHER, CREATE_IDENTIFIER, CREATE_PROCESSING_ACTIVITY, CREATE_PROCESSING_PURPOSE_SUB_CATEGORY, CREATE_PROMPT, CREATE_PROMPT_GROUP, CREATE_PROMPT_PARTIAL, CREATE_REPOSITORY, CREATE_SOFTWARE_DEVELOPMENT_KIT, CREATE_TEAM, CREATE_TEMPLATE, CREATE_VENDOR, CachedFileState, CachedRequestState, type Catalog, CodePackageInput, CodePackageSdk, ColumnName, type ColumnNameMap, type ConsentExperience, ConsentManageExperienceInput, type ConsentManager, ConsentManagerInput, type ConsentManagerMetric, ConsentManagerMetricBin, ConsentManagerServiceMetadata, type ConsentManagerTheme, ConsentPreferenceResponse, ConsentPreferenceTopic, ConsentPreferenceTopicOptionValue, ConsentPurpose, type Cookie, CookieCsvInput, CookieInput, type CreatedApiKey, CronIdentifier, CronIdentifierPush, type CronIdentifierWithAction, type CsvFormattedIdentifier, DATAPOINT_EXPORT, DATA_FLOWS, DATA_POINTS, DATA_POINT_COUNT, DATA_SILOS, DATA_SILOS_ENRICHED, DATA_SILO_EXPORT, DATA_SUBJECTS, DATA_SUB_CATEGORIES, DEFAULT_TRANSCEND_API, DEFAULT_TRANSCEND_CONSENT_API, DEFAULT_TRANSCEND_PULL_RESOURCES, DELETE_API_KEY, DELETE_ATTRIBUTE_VALUE, DEPLOYED_PRIVACY_CENTER_URL, DEPLOY_CONSENT_MANAGER, DETERMINE_LOGIN_METHOD, DataCategoryGuessInput, DataCategoryInput, DataCategoryPreviewInput, DataCategoryRecommendationInput, type DataFlow, DataFlowCsvInput, DataFlowInput, type DataPointCsvPreview, type DataSilo, type DataSiloAttributeValue, type DataSiloCsvPreview, type DataSiloEnriched, DataSiloInput, type DataSubCategory, type DataSubject, DataSubjectInput, type DatapointFilterOptions, DatapointInput, ENABLED_PLUGINS, ENRICHERS, ENTRY_COUNT, EXPERIENCES, type EnabledRouteC, type EnabledRoutesC, EnrichPrivacyRequest, type Enricher, EnricherInput, type ExportedPrivacyRequest, type ExternalUser, FETCH_CONSENT_MANAGER, FETCH_CONSENT_MANAGER_ID, FETCH_CONSENT_MANAGER_THEME, FETCH_PRIVACY_CENTER_ID, FieldInput, GLOBAL_ACTION_ITEMS, GLOBAL_ACTION_ITEM_COLLECTIONS, type GetPromptParamType, type GetPromptResponseType, IDENTIFIERS, IDENTIFIER_BLOCK_LIST, IMPORT_ONE_TRUST_ASSESSMENT_FORMS, INITIALIZER, IP_ADDRESS_REGEX, IS_REQUIRED, type Identifier, IdentifierInput, type IdentifierNameMap, ImportOnetrustAssessmentsInput, type IndexedCatalogs, type Initializer, IntlMessage, IntlMessageInput, LARGE_LANGUAGE_MODELS, LOGIN, MESSAGES, type Message, NEW_IDENTIFIER_TYPES, NONE, NOTIFY_ADDITIONAL_TIME, ORGANIZATION, OneTrustFileFormat, OneTrustPullResource, OneTrustPullSource, OpenAIEnabledRoute, OpenAIEnabledRoutes, OpenAIIntegration, OpenAIRouteName, type OrganizationPreview, POLICIES, PREFERENCE_TOPICS, PRIVACY_CENTER, PROCESSING_ACTIVITIES, PROCESSING_PURPOSE_SUB_CATEGORIES, PROMPTS, PROMPTS_WITH_VARIABLES, PROMPT_GROUPS, PROMPT_PARTIALS, PROMPT_THREADS, PURPOSES, ParsedAttributeInput, PartitionInput, PathfinderPolicy, PathfinderPolicyName, PathfinderPolicyNameC, PathfinderPromptRunMetadata, type Plugin, type PluginResponse, type Policy, PolicyInput, type PreferenceTopic, type PrivacyCenter, PrivacyCenterInput, PrivacyRequest, PrivacyRequestInput, PrivacyRequestResponse, type PrivacyRequestWithIdentifiers, type ProcessingActivity, ProcessingActivityInput, ProcessingPurposeInput, ProcessingPurposePreviewInput, type ProcessingPurposeSubCategory, type Prompt, PromptAVendorEmailSettings, type PromptCalculatedVariable, type PromptGroup, PromptGroupInput, PromptInput, type PromptPartial, PromptPartialInput, type PromptRunResult, type PromptRuntimeVariable, type PromptThread, type Purpose, PurposeMap, type PurposeWithPreferences, REDUCED_REQUESTS_FOR_DATA_SILO_COUNT, REMOVE_REQUEST_IDENTIFIERS, REPORT_PROMPT_RUN, REPOSITORIES, REQUESTS, REQUEST_DATA_SILOS, REQUEST_ENRICHERS, REQUEST_FILES, REQUEST_IDENTIFIERS, RETRYABLE_BATCH_STATUSES, RETRY_REQUEST_DATA_SILO, RETRY_REQUEST_ENRICHER, RegionInput, type ReportPromptRunInput, type ReportPromptRunOptions, RepositoryInput, type RequestDataSilo, type RequestEnricher, type RequestFile, type RequestFileCursor, RequestFileMetadata, RequestFileMetadataResponse, type RequestFileResponse, RequestIdentifier, type RequestIdentifierMetadata, RequestIdentifiersResponse, type RetentionSchedule, type RetryPolicy, RiskAssignmentInput, type RiskCategory, type RiskFramework, type RiskLevel, RiskLogicInput, type RiskMatrix, type RiskMatrixColumn, type RiskMatrixRow, SCOPES_BY_TITLE, SCOPE_TITLES, SET_RESOURCE_ATTRIBUTES, SKIP_REQUEST_ENRICHER, SOFTWARE_DEVELOPMENT_KITS, SOMBRA_VERSION, SUB_DATA_POINTS, SUB_DATA_POINTS_COUNT, SUB_DATA_POINTS_WITH_GUESSES, SYNC_ATTRIBUTE_TYPES, SoftwareDevelopmentKitInput, StoredApiKey, type SubDataPoint, type SubDataPointCsvPreview, SuccessfulRequest, TEAMS, TEMPLATES, TOGGLE_CONSENT_PRECEDENCE, TOGGLE_DATA_SUBJECT, TOGGLE_TELEMETRY_PARTITION_STRATEGY, TOGGLE_UNKNOWN_COOKIE_POLICY, TOGGLE_UNKNOWN_REQUEST_POLICY, TR_PULL_RESOURCE_SCOPE_MAP, TR_PUSH_RESOURCE_SCOPE_MAP, TR_YML_RESOURCE_TO_FIELD_NAME, type Team, TeamInput, type Template, TemplateInput, TranscendInput, type TranscendPartition, type TranscendPrompt, TranscendPromptManager, type TranscendPromptPartialTemplated, type TranscendPromptTemplated, type TranscendPromptsAndVariables, type TranscendPullConfigurationInput, TranscendPullResource, UPDATE_ACTION, UPDATE_ACTION_ITEMS, UPDATE_ACTION_ITEM_COLLECTION, UPDATE_AGENTS, UPDATE_AGENT_FILES, UPDATE_AGENT_FUNCTIONS, UPDATE_ATTRIBUTE, UPDATE_ATTRIBUTE_VALUES, UPDATE_BUSINESS_ENTITIES, UPDATE_CODE_PACKAGES, UPDATE_CONSENT_EXPERIENCE, UPDATE_CONSENT_MANAGER_DOMAINS, UPDATE_CONSENT_MANAGER_PARTITION, UPDATE_CONSENT_MANAGER_THEME, UPDATE_CONSENT_MANAGER_TO_LATEST, UPDATE_CONSENT_MANAGER_VERSION, UPDATE_DATA_FLOWS, UPDATE_DATA_SILOS, UPDATE_DATA_SUBJECT, UPDATE_DATA_SUB_CATEGORIES, UPDATE_ENRICHER, UPDATE_IDENTIFIER, UPDATE_INTL_MESSAGES, UPDATE_LOAD_OPTIONS, UPDATE_OR_CREATE_COOKIES, UPDATE_OR_CREATE_DATA_POINT, UPDATE_POLICIES, UPDATE_PRIVACY_CENTER, UPDATE_PRIVACY_REQUEST, UPDATE_PROCESSING_ACTIVITIES, UPDATE_PROCESSING_PURPOSE_SUB_CATEGORIES, UPDATE_PROMPTS, UPDATE_PROMPT_GROUPS, UPDATE_PROMPT_PARTIALS, UPDATE_REPOSITORIES, UPDATE_SOFTWARE_DEVELOPMENT_KITS, UPDATE_TEAM, UPDATE_VENDORS, USERS, USP_STRING_REGEX, type User, type UserPreview, type UserRole, VARIABLE_PARAMETERS_NAME, VARIABLE_PARAMETERS_REGEXP, VENDORS, type Vendor, VendorInput, WebhookHeader, type XdiSyncGroups, addMessagesToPromptRun, appendCsvSync, approvePrivacyRequests, assumeRole, buildAIIntegrationType, buildEnabledRouteType, buildTranscendGraphQLClient, buildTranscendGraphQLClientGeneric, buildXdiSyncEndpoint, bulkRestartRequests, bulkRetryEnrichers, cancelPrivacyRequests, consentManagersToBusinessEntities, convertToDataSubjectAllowlist, convertToDataSubjectBlockList, createActionItemCollection, createActionItems, createAgent, createAgentFile, createAgentFunction, createApiKey, createBusinessEntity, createCodePackage, createConsentToken, createDataCategory, createDataFlows, createProcessingPurpose, createPrompt, createRegexForTag, createRepository, createSoftwareDevelopmentKit, createSombraGotInstance, createTranscendConsentGotInstance, createVendor, defineTranscendPrompts, deleteApiKey, deployConsentManager, description, domainToHost, downloadPrivacyRequestFiles, enrichPrivacyRequest, ensureAllDataSubjectsExist, extractClientError, extractErrorMessage, fetchActiveSiloDiscoPlugin, fetchAllActionItems, fetchAllActions, fetchAllAgentFiles, fetchAllAgentFunctions, fetchAllAgents, fetchAllApiKeys, fetchAllAssessmentTemplates, fetchAllAssessments, fetchAllAttributeValues, fetchAllAttributes, fetchAllBusinessEntities, fetchAllCatalogs, fetchAllCookies, fetchAllDataCategories, fetchAllDataFlows, fetchAllDataPoints, fetchAllDataSilos, fetchAllDataSubjects, fetchAllEnrichers, fetchAllIdentifiers, fetchAllMessages, fetchAllPolicies, fetchAllPreferenceTopics, fetchAllPrivacyCenters, fetchAllProcessingActivities, fetchAllProcessingPurposes, fetchAllPromptGroups, fetchAllPromptPartials, fetchAllPromptThreads, fetchAllPrompts, fetchAllPurposes, fetchAllPurposesAndPreferences, fetchAllRequestAttributeKeys, fetchAllRequestEnrichers, fetchAllRequestIdentifierMetadata, fetchAllRequestIdentifiers, fetchAllRequests, fetchAllSubDataPoints, fetchAllTeams, fetchAllTemplates, fetchAllUsers, fetchAllVendors, fetchAndIndexCatalogs, fetchApiKeys, fetchConsentManager, fetchConsentManagerAnalyticsData, fetchConsentManagerExperiences, fetchConsentManagerId, fetchConsentManagerTheme, fetchConsentPreferences, fetchEnrichedDataSilos, fetchIdentifiersAndCreateMissing, fetchPartitions, fetchPrivacyCenterId, fetchPrivacyCenterUrl, fetchPromptsWithVariables, fetchRequestDataSilo, fetchRequestDataSiloActiveCount, fetchRequestDataSilos, fetchRequestFilesForRequest, filterNullishValuesFromObject, filterRows, fuzzyMatchColumns, fuzzySearch, generateCrossAccountApiKeys, getErrorStatus, getFileMetadataForPrivacyRequests, getGitFilesThatChanged, getUniqueValuesForColumn, inquirerAutoComplete, inquirerConfirmBoolean, inquirerConfirmText, limitRecords, listDirectories, listFiles, loginUser, makeGraphQLRequest, mapColumnsToAttributes, mapColumnsToIdentifiers, mapCsvColumnsToApi, mapCsvRowsToRequestInputs, mapEnumValues, mapRequestEnumValues, markCronIdentifierCompleted, markRequestDataSiloIdsCompleted, markSilentPrivacyRequests, mergeTranscendInputs, name, normalizeIdentifierValue, notifyPrivacyRequestsAdditionalTime, parseAssessmentDisplayLogic, parseAssessmentRiskLogic, parseAttributesFromString, parseFilePath, parseVariablesFromString, pullAllDatapoints, pullChunkedCustomSiloOutstandingIdentifiers, pullConsentManagerMetrics, pullCronPageOfIdentifiers, pullManualEnrichmentIdentifiersToCsv, pullPrivacyRequests, pullTranscendConfiguration, pullUnstructuredSubDataPointRecommendations, pushCronIdentifiersFromCsv, pushManualEnrichmentIdentifiersFromCsv, readCsv, readTranscendYaml, removeLinks, removeUnverifiedRequestIdentifiers, replaceVariablesInYaml, reportPromptRun, restartPrivacyRequest, retryRequestDataSilos, retryRequestEnricher, retrySamePromise, setResourceAttributes, skipPreflightJobs, skipRequestDataSilos, sleepPromise, splitCsvToList, splitInHalf, streamPrivacyRequestFiles, submitPrivacyRequest, syncAction, syncActionItemCollections, syncActionItems, syncAgentFiles, syncAgentFunctions, syncAgents, syncAttribute, syncBusinessEntities, syncCodePackages, syncConfigurationToTranscend, syncConsentManager, syncConsentManagerExperiences, syncCookies, syncDataCategories, syncDataFlows, syncDataSiloDependencies, syncDataSilos, syncDataSubject, syncEnricher, syncIdentifier, syncIntlMessages, syncPartitions, syncPolicies, syncPrivacyCenter, syncProcessingActivities, syncProcessingPurposes, syncPrompts, syncRepositories, syncSoftwareDevelopmentKits, syncTemplate, syncVendors, updateActionItem, updateActionItemCollection, updateAgentFiles, updateAgentFunctions, updateAgents, updateBusinessEntities, updateCodePackages, updateConsentManagerToLatest, updateConsentManagerVersionToLatest, updateDataCategories, updateDataFlows, updateIntlMessages, updateOrCreateCookies, updatePolicies, updateProcessingPurposes, updatePrompts, updateRepositories, updateSoftwareDevelopmentKits, updateVendors, uploadConsents, uploadCookiesFromCsv, uploadDataFlowsFromCsv, uploadPrivacyRequestsFromCsv, uploadSiloDiscoveryResults, validateTranscendAuth, version, writeCsv, writeCsvSync, writeLargeCsv, writeTranscendYaml };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "Transcend Inc.",
3
3
  "name": "@transcend-io/cli",
4
4
  "description": "A command line interface for programmatic operations across Transcend.",
5
- "version": "8.0.1",
5
+ "version": "8.0.3",
6
6
  "homepage": "https://github.com/transcend-io/cli",
7
7
  "repository": {
8
8
  "type": "git",
@@ -91,6 +91,7 @@
91
91
  "@transcend-io/type-utils": "^1.8.0",
92
92
  "JSONStream": "^1.3.5",
93
93
  "cli-progress": "^3.11.2",
94
+ "bluebird": "^3.7.2",
94
95
  "colors": "^1.4.0",
95
96
  "csv-parse": "^5.6.0",
96
97
  "fast-csv": "^4.3.6",
@@ -148,7 +149,8 @@
148
149
  "tsx": "^4.20.3",
149
150
  "typescript": "^5.0.4",
150
151
  "vite-tsconfig-paths": "^5.1.4",
151
- "vitest": "^3.2.4"
152
+ "vitest": "^3.2.4",
153
+ "@types/bluebird": "^3.5.38"
152
154
  },
153
155
  "scripts": {
154
156
  "start": "./dist/bin/cli.cjs",
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkMBB6OD4Ecjs = require('./chunk-MBB6OD4E.cjs');var _inquirer = require('inquirer'); var _inquirer2 = _interopRequireDefault(_inquirer);var _inquirerautocompleteprompt = require('inquirer-autocomplete-prompt'); var _inquirerautocompleteprompt2 = _interopRequireDefault(_inquirerautocompleteprompt);async function c({message:e}){let{response:r}=await _inquirer2.default.prompt([{name:"response",message:e,type:"confirm"}]);return r}async function l({message:e}){let{response:r}=await _inquirer2.default.prompt([{name:"response",message:e,type:"text",validate:t=>t.trim().length>0}]);return r}async function y({defaultValue:e,values:r,message:t}){_inquirer2.default.registerPrompt("autocomplete",_inquirerautocompleteprompt2.default);let{response:p}=await _inquirer2.default.prompt([{name:"response",message:t,type:"autocomplete",default:e,source:(a,n)=>n?r.filter(s=>typeof s=="string"&&_chunkMBB6OD4Ecjs.k.call(void 0, n,s)):r}]);return p}exports.a = c; exports.b = l; exports.c = y;
2
- //# sourceMappingURL=chunk-56TB3NTQ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cli/cli/dist/chunk-56TB3NTQ.cjs","../src/lib/helpers/inquirer.ts"],"names":["inquirerConfirmBoolean","message","response","inquirer","inquirerConfirmText","x","inquirerAutoComplete","defaultValue","values","autoCompletePrompt","answersSoFar","input","fuzzySearch"],"mappings":"AAAA,iOAAwC,wFCAnB,kKACU,MAU/B,SAAsBA,CAAAA,CAAuB,CAC3C,OAAA,CAAAC,CACF,CAAA,CAGqB,CACnB,GAAM,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAI,MAAMC,kBAAAA,CAAS,MAAA,CAGjC,CACD,CACE,IAAA,CAAM,UAAA,CACN,OAAA,CAAAF,CAAAA,CACA,IAAA,CAAM,SACR,CACF,CAAC,CAAA,CACD,OAAOC,CACT,CAQA,MAAA,SAAsBE,CAAAA,CAAoB,CACxC,OAAA,CAAAH,CACF,CAAA,CAGoB,CAClB,GAAM,CAAE,QAAA,CAAAC,CAAS,CAAA,CAAI,MAAMC,kBAAAA,CAAS,MAAA,CAGjC,CACD,CACE,IAAA,CAAM,UAAA,CACN,OAAA,CAAAF,CAAAA,CACA,IAAA,CAAM,MAAA,CACN,QAAA,CAAWI,CAAAA,EAAMA,CAAAA,CAAE,IAAA,CAAK,CAAA,CAAE,MAAA,CAAS,CACrC,CACF,CAAC,CAAA,CACD,OAAOH,CACT,CAQA,MAAA,SAAsBI,CAAAA,CAAqB,CACzC,YAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,OAAA,CAAAP,CACF,CAAA,CAOoB,CAClBE,kBAAAA,CAAS,cAAA,CAAe,cAAA,CAAgBM,oCAAkB,CAAA,CAC1D,GAAM,CAAE,QAAA,CAAAP,CAAS,CAAA,CAAI,MAAMC,kBAAAA,CAAS,MAAA,CAGjC,CACD,CACE,IAAA,CAAM,UAAA,CACN,OAAA,CAAAF,CAAAA,CACA,IAAA,CAAM,cAAA,CACN,OAAA,CAASM,CAAAA,CACT,MAAA,CAAQ,CAACG,CAAAA,CAA2BC,CAAAA,CAAAA,EACjCA,CAAAA,CAEGH,CAAAA,CAAO,MAAA,CACJH,CAAAA,EAAM,OAAOA,CAAAA,EAAM,QAAA,EAAYO,iCAAAA,CAAYD,CAAON,CAAC,CACtD,CAAA,CAHAG,CAIR,CACF,CAAC,CAAA,CACD,OAAON,CACT,CAAA,4CAAA","file":"/home/runner/work/cli/cli/dist/chunk-56TB3NTQ.cjs","sourcesContent":[null,"import inquirer from 'inquirer';\nimport autoCompletePrompt from 'inquirer-autocomplete-prompt';\nimport { fuzzySearch } from '../requests';\nimport { ObjByString } from '@transcend-io/type-utils';\n\n/**\n * Inquirer confirm text\n *\n * @param options - Options\n * @returns The response\n */\nexport async function inquirerConfirmBoolean({\n message,\n}: {\n /** Message */\n message: string;\n}): Promise<boolean> {\n const { response } = await inquirer.prompt<{\n /** confirmation */\n response: boolean;\n }>([\n {\n name: 'response',\n message,\n type: 'confirm',\n },\n ]);\n return response;\n}\n\n/**\n * Inquirer confirm text\n *\n * @param options - Options\n * @returns The response\n */\nexport async function inquirerConfirmText({\n message,\n}: {\n /** Message */\n message: string;\n}): Promise<string> {\n const { response } = await inquirer.prompt<{\n /** confirmation */\n response: string;\n }>([\n {\n name: 'response',\n message,\n type: 'text',\n validate: (x) => x.trim().length > 0,\n },\n ]);\n return response;\n}\n\n/**\n * Inquirer auto complete\n *\n * @param options - Options\n * @returns The response\n */\nexport async function inquirerAutoComplete({\n defaultValue,\n values,\n message,\n}: {\n /** Default value */\n defaultValue?: string;\n /** Message */\n message: string;\n /** Values to select */\n values: string[];\n}): Promise<string> {\n inquirer.registerPrompt('autocomplete', autoCompletePrompt);\n const { response } = await inquirer.prompt<{\n /** confirmation */\n response: string;\n }>([\n {\n name: 'response',\n message,\n type: 'autocomplete',\n default: defaultValue,\n source: (answersSoFar: ObjByString, input: string) =>\n !input\n ? values\n : values.filter(\n (x) => typeof x === 'string' && fuzzySearch(input, x),\n ),\n },\n ]);\n return response;\n}\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkDBYKJZEAcjs = require('./chunk-DBYKJZEA.cjs');var _privacytypes = require('@transcend-io/privacy-types');var A="transcend",s= exports.b ="https://app.transcend.io",P= exports.c =`${s}/infrastructure/integrations`,u= exports.d =`${s}/data-map/data-inventory/data-points`,M= exports.e =process.env.TRANSCEND_API_URL||"https://api.transcend.io",S= exports.f =process.env.TRANSCEND_CONSENT_API_URL||"https://consent.transcend.io",D= exports.g ={apiKeys:[_privacytypes.ScopeName.ViewApiKeys],templates:[_privacytypes.ScopeName.ManageEmailTemplates],dataSilos:[_privacytypes.ScopeName.ManageDataMap,_privacytypes.ScopeName.ConnectDataSilos],enrichers:[_privacytypes.ScopeName.ManageRequestIdentities],businessEntities:[_privacytypes.ScopeName.ManageDataInventory],processingActivities:[_privacytypes.ScopeName.ManageDataMap],identifiers:[_privacytypes.ScopeName.ManageRequestIdentities],customFields:[_privacytypes.ScopeName.ManageGlobalAttributes],dataFlows:[_privacytypes.ScopeName.ManageDataFlow],cookies:[_privacytypes.ScopeName.ManageDataFlow],consentManager:[_privacytypes.ScopeName.ManageConsentManagerDeveloperSettings],partitions:[_privacytypes.ScopeName.ManageConsentManagerDeveloperSettings],actions:[_privacytypes.ScopeName.ManageDataSubjectRequestSettings],dataSubjects:[_privacytypes.ScopeName.ManageDataSubjectRequestSettings],prompts:[_privacytypes.ScopeName.ManagePrompts],promptPartials:[_privacytypes.ScopeName.ManagePrompts],promptGroups:[_privacytypes.ScopeName.ManagePrompts],agents:[_privacytypes.ScopeName.ManagePathfinder],agentFunctions:[_privacytypes.ScopeName.ManagePathfinder],agentFiles:[_privacytypes.ScopeName.ManagePathfinder],vendors:[_privacytypes.ScopeName.ManageDataInventory],dataCategories:[_privacytypes.ScopeName.ManageDataInventory],processingPurposes:[_privacytypes.ScopeName.ManageDataInventory],actionItems:[_privacytypes.ScopeName.ManageAllActionItems,_privacytypes.ScopeName.ViewGlobalAttributes],actionItemCollections:[_privacytypes.ScopeName.ManageActionItemCollections],teams:[_privacytypes.ScopeName.ManageAccessControl],messages:[_privacytypes.ScopeName.ManageIntlMessages],privacyCenters:[_privacytypes.ScopeName.ManagePrivacyCenter],policies:[_privacytypes.ScopeName.ManagePolicies],assessments:[_privacytypes.ScopeName.ManageAssessments],assessmentTemplates:[_privacytypes.ScopeName.ManageAssessments],purposes:[_privacytypes.ScopeName.ManageConsentManager,_privacytypes.ScopeName.ManagePreferenceStoreSettings]},w= exports.h ={apiKeys:[_privacytypes.ScopeName.ViewApiKeys],templates:[_privacytypes.ScopeName.ViewEmailTemplates],dataSilos:[_privacytypes.ScopeName.ViewDataMap,_privacytypes.ScopeName.ViewDataSubjectRequestSettings],enrichers:[_privacytypes.ScopeName.ViewRequestIdentitySettings],businessEntities:[_privacytypes.ScopeName.ViewDataInventory],processingActivities:[_privacytypes.ScopeName.ViewDataInventory],identifiers:[_privacytypes.ScopeName.ViewRequestIdentitySettings],customFields:[_privacytypes.ScopeName.ViewGlobalAttributes],dataFlows:[_privacytypes.ScopeName.ViewDataFlow],cookies:[_privacytypes.ScopeName.ViewDataFlow],consentManager:[_privacytypes.ScopeName.ViewConsentManager],partitions:[_privacytypes.ScopeName.ViewConsentManager],actions:[_privacytypes.ScopeName.ViewDataSubjectRequestSettings],dataSubjects:[_privacytypes.ScopeName.ViewDataSubjectRequestSettings],prompts:[_privacytypes.ScopeName.ViewPrompts],promptPartials:[_privacytypes.ScopeName.ViewPrompts],promptGroups:[_privacytypes.ScopeName.ViewPrompts],agents:[_privacytypes.ScopeName.ViewPathfinder],agentFunctions:[_privacytypes.ScopeName.ViewPathfinder],agentFiles:[_privacytypes.ScopeName.ViewPathfinder],vendors:[_privacytypes.ScopeName.ViewDataInventory],dataCategories:[_privacytypes.ScopeName.ViewDataInventory],processingPurposes:[_privacytypes.ScopeName.ViewDataInventory],actionItemCollections:[_privacytypes.ScopeName.ViewAllActionItems],actionItems:[_privacytypes.ScopeName.ViewAllActionItems],teams:[_privacytypes.ScopeName.ViewScopes],messages:[_privacytypes.ScopeName.ViewIntlMessages],privacyCenters:[_privacytypes.ScopeName.ViewPrivacyCenter],policies:[_privacytypes.ScopeName.ViewPolicies],assessments:[_privacytypes.ScopeName.ViewAssessments],assessmentTemplates:[_privacytypes.ScopeName.ViewAssessments],purposes:[_privacytypes.ScopeName.ViewConsentManager,_privacytypes.ScopeName.ViewPreferenceStoreSettings]},I= exports.i ={apiKeys:"api-keys",customFields:"attributes",dataFlows:"data-flows",cookies:"cookies",consentManager:"consent-manager",partitions:"partitions",actions:"actions",dataSubjects:"data-subjects",businessEntities:"business-entities",processingActivities:"processing-activities",identifiers:"identifiers",enrichers:"enrichers",dataSilos:"data-silos",templates:"templates",prompts:"prompts",promptPartials:"prompt-partials",promptGroups:"prompt-groups",agents:"agents",agentFunctions:"agent-functions",agentFiles:"agent-files",vendors:"vendors",dataCategories:"data-categories",processingPurposes:"processing-purposes",actionItems:"action-items",actionItemCollections:"action-item-collections",teams:"teams",messages:"messages",privacyCenters:"privacy-center",policies:"policies",assessments:"assessments",assessmentTemplates:"assessment-templates",purposes:"purposes"},o= exports.j =_chunkDBYKJZEAcjs.e.call(void 0, Object.entries(_privacytypes.TRANSCEND_SCOPES).map(([a,n])=>({...n,name:a})),"title"),C= exports.k =Object.keys(o);exports.a = A; exports.b = s; exports.c = P; exports.d = u; exports.e = M; exports.f = S; exports.g = D; exports.h = w; exports.i = I; exports.j = o; exports.k = C;
2
- //# sourceMappingURL=chunk-6IHSPKMP.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cli/cli/dist/chunk-6IHSPKMP.cjs","../src/constants.ts"],"names":["name","ADMIN_DASH","ADMIN_DASH_INTEGRATIONS"],"mappings":"AAAA,iIAAwC,2DCKjC,IAQMA,CAAAA,CAAO,WAAA,CAEPC,CAAAA,aAAa,0BAAA,CAEbC,CAAAA,aAA0B,CAAA,EAAA","file":"/home/runner/work/cli/cli/dist/chunk-6IHSPKMP.cjs","sourcesContent":[null,"import { keyBy } from 'lodash-es';\nimport {\n ScopeName,\n TRANSCEND_SCOPES,\n type ScopeDefinition,\n} from '@transcend-io/privacy-types';\nimport { TranscendPullResource } from './enums';\nimport { TranscendInput } from './codecs';\n\nexport { description, version } from '../package.json';\n/**\n * The name of the main binary for the CLI\n */\nexport const name = 'transcend';\n\nexport const ADMIN_DASH = 'https://app.transcend.io';\n\nexport const ADMIN_DASH_INTEGRATIONS = `${ADMIN_DASH}/infrastructure/integrations`;\nexport const ADMIN_DASH_DATAPOINTS = `${ADMIN_DASH}/data-map/data-inventory/data-points`;\n\n/**\n * Override default transcend API url using\n * TRANSCEND_API_URL=https://api.us.transcend.io transcend ...\n */\nexport const DEFAULT_TRANSCEND_API =\n process.env.TRANSCEND_API_URL || 'https://api.transcend.io';\n\n/**\n * Override default transcend API url using\n * TRANSCEND_CONSENT_API_URL=https://consent.us.transcend.io transcend ...\n */\nexport const DEFAULT_TRANSCEND_CONSENT_API =\n process.env.TRANSCEND_CONSENT_API_URL || 'https://consent.transcend.io';\n\n/**\n * Mapping between resource type and scopes required for cli\n */\nexport const TR_PUSH_RESOURCE_SCOPE_MAP: {\n [k in TranscendPullResource]: ScopeName[];\n} = {\n [TranscendPullResource.ApiKeys]: [ScopeName.ViewApiKeys],\n [TranscendPullResource.Templates]: [ScopeName.ManageEmailTemplates],\n [TranscendPullResource.DataSilos]: [\n ScopeName.ManageDataMap,\n ScopeName.ConnectDataSilos,\n ],\n [TranscendPullResource.Enrichers]: [ScopeName.ManageRequestIdentities],\n [TranscendPullResource.BusinessEntities]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ProcessingActivities]: [ScopeName.ManageDataMap],\n [TranscendPullResource.Identifiers]: [ScopeName.ManageRequestIdentities],\n [TranscendPullResource.Attributes]: [ScopeName.ManageGlobalAttributes],\n [TranscendPullResource.DataFlows]: [ScopeName.ManageDataFlow],\n [TranscendPullResource.Cookies]: [ScopeName.ManageDataFlow],\n [TranscendPullResource.ConsentManager]: [\n ScopeName.ManageConsentManagerDeveloperSettings,\n ],\n [TranscendPullResource.Partitions]: [\n ScopeName.ManageConsentManagerDeveloperSettings,\n ],\n [TranscendPullResource.Actions]: [ScopeName.ManageDataSubjectRequestSettings],\n [TranscendPullResource.DataSubjects]: [\n ScopeName.ManageDataSubjectRequestSettings,\n ],\n [TranscendPullResource.Prompts]: [ScopeName.ManagePrompts],\n [TranscendPullResource.PromptPartials]: [ScopeName.ManagePrompts],\n [TranscendPullResource.PromptGroups]: [ScopeName.ManagePrompts],\n [TranscendPullResource.Agents]: [ScopeName.ManagePathfinder],\n [TranscendPullResource.AgentFunctions]: [ScopeName.ManagePathfinder],\n [TranscendPullResource.AgentFiles]: [ScopeName.ManagePathfinder],\n [TranscendPullResource.Vendors]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.DataCategories]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ProcessingPurposes]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ActionItems]: [\n ScopeName.ManageAllActionItems,\n ScopeName.ViewGlobalAttributes,\n ],\n [TranscendPullResource.ActionItemCollections]: [\n ScopeName.ManageActionItemCollections,\n ],\n [TranscendPullResource.Teams]: [ScopeName.ManageAccessControl],\n [TranscendPullResource.Messages]: [ScopeName.ManageIntlMessages],\n [TranscendPullResource.PrivacyCenters]: [ScopeName.ManagePrivacyCenter],\n [TranscendPullResource.Policies]: [ScopeName.ManagePolicies],\n [TranscendPullResource.Assessments]: [ScopeName.ManageAssessments],\n [TranscendPullResource.AssessmentTemplates]: [ScopeName.ManageAssessments],\n [TranscendPullResource.Purposes]: [\n ScopeName.ManageConsentManager,\n ScopeName.ManagePreferenceStoreSettings,\n ],\n};\n\n/**\n * Mapping between resource type and scopes required for cli\n */\nexport const TR_PULL_RESOURCE_SCOPE_MAP: {\n [k in TranscendPullResource]: ScopeName[];\n} = {\n [TranscendPullResource.ApiKeys]: [ScopeName.ViewApiKeys],\n [TranscendPullResource.Templates]: [ScopeName.ViewEmailTemplates],\n [TranscendPullResource.DataSilos]: [\n ScopeName.ViewDataMap,\n ScopeName.ViewDataSubjectRequestSettings,\n ],\n [TranscendPullResource.Enrichers]: [ScopeName.ViewRequestIdentitySettings],\n [TranscendPullResource.BusinessEntities]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ProcessingActivities]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.Identifiers]: [ScopeName.ViewRequestIdentitySettings],\n [TranscendPullResource.Attributes]: [ScopeName.ViewGlobalAttributes],\n [TranscendPullResource.DataFlows]: [ScopeName.ViewDataFlow],\n [TranscendPullResource.Cookies]: [ScopeName.ViewDataFlow],\n [TranscendPullResource.ConsentManager]: [ScopeName.ViewConsentManager],\n [TranscendPullResource.Partitions]: [ScopeName.ViewConsentManager],\n [TranscendPullResource.Actions]: [ScopeName.ViewDataSubjectRequestSettings],\n [TranscendPullResource.DataSubjects]: [\n ScopeName.ViewDataSubjectRequestSettings,\n ],\n [TranscendPullResource.Prompts]: [ScopeName.ViewPrompts],\n [TranscendPullResource.PromptPartials]: [ScopeName.ViewPrompts],\n [TranscendPullResource.PromptGroups]: [ScopeName.ViewPrompts],\n [TranscendPullResource.Agents]: [ScopeName.ViewPathfinder],\n [TranscendPullResource.AgentFunctions]: [ScopeName.ViewPathfinder],\n [TranscendPullResource.AgentFiles]: [ScopeName.ViewPathfinder],\n [TranscendPullResource.Vendors]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.DataCategories]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ProcessingPurposes]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ActionItemCollections]: [ScopeName.ViewAllActionItems],\n [TranscendPullResource.ActionItems]: [ScopeName.ViewAllActionItems],\n [TranscendPullResource.Teams]: [ScopeName.ViewScopes],\n [TranscendPullResource.Messages]: [ScopeName.ViewIntlMessages],\n [TranscendPullResource.PrivacyCenters]: [ScopeName.ViewPrivacyCenter],\n [TranscendPullResource.Policies]: [ScopeName.ViewPolicies],\n [TranscendPullResource.Assessments]: [ScopeName.ViewAssessments],\n [TranscendPullResource.AssessmentTemplates]: [ScopeName.ViewAssessments],\n [TranscendPullResource.Purposes]: [\n ScopeName.ViewConsentManager,\n ScopeName.ViewPreferenceStoreSettings,\n ],\n};\n\nexport const TR_YML_RESOURCE_TO_FIELD_NAME: Record<\n TranscendPullResource,\n keyof TranscendInput\n> = {\n [TranscendPullResource.ApiKeys]: 'api-keys',\n [TranscendPullResource.Attributes]: 'attributes',\n [TranscendPullResource.DataFlows]: 'data-flows',\n [TranscendPullResource.Cookies]: 'cookies',\n [TranscendPullResource.ConsentManager]: 'consent-manager',\n [TranscendPullResource.Partitions]: 'partitions',\n [TranscendPullResource.Actions]: 'actions',\n [TranscendPullResource.DataSubjects]: 'data-subjects',\n [TranscendPullResource.BusinessEntities]: 'business-entities',\n [TranscendPullResource.ProcessingActivities]: 'processing-activities',\n [TranscendPullResource.Identifiers]: 'identifiers',\n [TranscendPullResource.Enrichers]: 'enrichers',\n [TranscendPullResource.DataSilos]: 'data-silos',\n [TranscendPullResource.Templates]: 'templates',\n [TranscendPullResource.Prompts]: 'prompts',\n [TranscendPullResource.PromptPartials]: 'prompt-partials',\n [TranscendPullResource.PromptGroups]: 'prompt-groups',\n [TranscendPullResource.Agents]: 'agents',\n [TranscendPullResource.AgentFunctions]: 'agent-functions',\n [TranscendPullResource.AgentFiles]: 'agent-files',\n [TranscendPullResource.Vendors]: 'vendors',\n [TranscendPullResource.DataCategories]: 'data-categories',\n [TranscendPullResource.ProcessingPurposes]: 'processing-purposes',\n [TranscendPullResource.ActionItems]: 'action-items',\n [TranscendPullResource.ActionItemCollections]: 'action-item-collections',\n [TranscendPullResource.Teams]: 'teams',\n [TranscendPullResource.Messages]: 'messages',\n [TranscendPullResource.PrivacyCenters]: 'privacy-center',\n [TranscendPullResource.Policies]: 'policies',\n [TranscendPullResource.Assessments]: 'assessments',\n [TranscendPullResource.AssessmentTemplates]: 'assessment-templates',\n [TranscendPullResource.Purposes]: 'purposes',\n};\n\nexport const SCOPES_BY_TITLE = keyBy(\n Object.entries(TRANSCEND_SCOPES).map(([name, value]) => ({\n ...value,\n name,\n })),\n 'title',\n) as Record<\n string,\n ScopeDefinition & {\n /** The camelCased name which identifies the scope */\n name: ScopeName;\n }\n>;\n\nexport const SCOPE_TITLES = Object.keys(SCOPES_BY_TITLE);\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkUPUHHIXZcjs = require('./chunk-UPUHHIXZ.cjs');var _chunkZUNVPK23cjs = require('./chunk-ZUNVPK23.cjs');var _chunk6IHSPKMPcjs = require('./chunk-6IHSPKMP.cjs');var _crypto = require('crypto'); var E = _interopRequireWildcard(_crypto);var _jsonwebtoken = require('jsonwebtoken'); var $ = _interopRequireWildcard(_jsonwebtoken);function B(c,l,n){let o=Buffer.from(n,"base64"),f=Buffer.from(l,"base64"),u="id-aes256-wrap-pad",d=Buffer.from("A65959A6","hex"),s=E.createCipheriv(u,f,d),i={encryptedIdentifier:Buffer.concat([s.update(c),s.final()]).toString("base64")};return $.sign(i,o,{algorithm:"HS384"})}var _iots = require('io-ts'); var e = _interopRequireWildcard(_iots); var r = _interopRequireWildcard(_iots);var O=e.intersection([e.type({userId:e.string,timestamp:e.string}),e.partial({confirmed:e.union([e.literal("true"),e.literal("false")]),updated:e.union([e.literal("true"),e.literal("false")]),prompted:e.union([e.literal("true"),e.literal("false")]),metadata:e.string,usp:e.union([e.string,e.null]),gpp:e.union([e.string,e.null])})]),Y= exports.b =e.intersection([O,e.partial({purposes:e.string})]),G= exports.c =e.intersection([O,e.type({partition:e.string}),e.partial({tcf:e.union([e.string,e.null]),purposes:e.record(e.string,e.union([e.boolean,e.string]))})]);var _colors = require('colors'); var _colors2 = _interopRequireDefault(_colors);var _cliprogress = require('cli-progress'); var _cliprogress2 = _interopRequireDefault(_cliprogress);var _typeutils = require('@transcend-io/type-utils');var R=/^[0-9][Y|N]([Y|N])[Y|N]$/,_= exports.e =r.record(r.string,r.union([r.boolean,r.literal("Auto")]));async function Z({base64EncryptionKey:c,base64SigningKey:l,preferences:n,partition:o,concurrency:f=100,transcendUrl:u=_chunk6IHSPKMPcjs.f}){let d=_chunkUPUHHIXZcjs.Yd.call(void 0, u),s=n.filter(t=>t.usp&&!R.test(t.usp));if(s.length>0)throw new Error(`Received invalid usp strings: ${JSON.stringify(s,null,2)}`);let m=n.map((t,y)=>[t,y]).filter(([t])=>{if(!t.purposes)return!1;try{return _typeutils.decodeCodec.call(void 0, _,t.purposes),!1}catch (e2){return!0}});if(m.length>0)throw new Error(`Received invalid purpose maps: ${JSON.stringify(m,null,2)}`);let i=n.filter(t=>!t.usp&&!t.purposes);if(i.length>0)throw new Error(`Received invalid inputs, expected either purposes or usp to be defined: ${JSON.stringify(i,null,2)}`);_chunkZUNVPK23cjs.a.info(_colors2.default.magenta(`Uploading ${n.length} user preferences to partition ${o}`));let w=new Date().getTime(),g=new _cliprogress2.default.SingleBar({},_cliprogress2.default.Presets.shades_classic),S=0;g.start(n.length,0),await _chunkUPUHHIXZcjs.b.call(void 0, n,async({userId:t,confirmed:y="true",updated:T,prompted:v,purposes:x,...p})=>{let k=B(t,c,l),[,D]=p.usp?R.exec(p.usp)||[]:[],F={token:k,partition:o,consent:{confirmed:y==="true",purposes:x?_typeutils.decodeCodec.call(void 0, _,x):p.usp?{SaleOfInfo:D==="Y"}:{},...T?{updated:T==="true"}:{},...v?{prompted:v==="true"}:{},...p}};try{await d.post("sync",{json:F}).json()}catch(h){try{let C=JSON.parse(_optionalChain([h, 'optionalAccess', _2 => _2.response, 'optionalAccess', _3 => _3.body])||"{}");C.error&&_chunkZUNVPK23cjs.a.error(_colors2.default.red(`Error: ${C.error}`))}catch (e3){}throw new Error(`Received an error from server: ${_optionalChain([h, 'optionalAccess', _4 => _4.response, 'optionalAccess', _5 => _5.body])||_optionalChain([h, 'optionalAccess', _6 => _6.message])}`)}S+=1,g.update(S)},{concurrency:f}),g.stop();let j=new Date().getTime()-w;_chunkZUNVPK23cjs.a.info(_colors2.default.green(`Successfully uploaded ${n.length} user preferences to partition ${o} in "${j/1e3}" seconds!`))}exports.a = B; exports.b = Y; exports.c = G; exports.d = R; exports.e = _; exports.f = Z;
2
- //# sourceMappingURL=chunk-7G4SCKPN.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cli/cli/dist/chunk-7G4SCKPN.cjs","../src/lib/consent-manager/createConsentToken.ts","../src/lib/consent-manager/types.ts","../src/lib/consent-manager/uploadConsents.ts"],"names":["createConsentToken","userId","base64EncryptionKey","base64SigningKey","signingKey","encryptionKey","encryptionAlgorithm","iv","cipher","jwtPayload","ConsentPreferenceBase","ConsentPreferenceUpload","ConsentPreferenceFetch","USP_STRING_REGEX","PurposeMap","uploadConsents","preferences","partition","concurrency","transcendUrl","DEFAULT_TRANSCEND_CONSENT_API","transcendConsentApi","createTranscendConsentGotInstance","invalidUspStrings","pref"],"mappings":"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","file":"/home/runner/work/cli/cli/dist/chunk-7G4SCKPN.cjs","sourcesContent":[null,"import * as crypto from 'crypto';\nimport * as jwt from 'jsonwebtoken';\n\n/**\n * Function to create a consent manager token\n *\n * @see https://docs.transcend.io/docs/consent/reference/managed-consent-database\n * @param userId - User ID\n * @param base64EncryptionKey - Encryption key\n * @param base64SigningKey - Signing key\n * @returns Token\n */\nexport function createConsentToken(\n userId: string,\n base64EncryptionKey: string,\n base64SigningKey: string,\n): string {\n // Read on for where to find these keys\n const signingKey = Buffer.from(base64SigningKey, 'base64');\n const encryptionKey = Buffer.from(base64EncryptionKey, 'base64');\n\n // NIST's AES-KWP implementation { aes 48 } - see https://tools.ietf.org/html/rfc5649\n const encryptionAlgorithm = 'id-aes256-wrap-pad';\n // Initial Value for AES-KWP integrity check - see https://tools.ietf.org/html/rfc5649#section-3\n const iv = Buffer.from('A65959A6', 'hex');\n // Set up encryption algorithm\n const cipher = crypto.createCipheriv(encryptionAlgorithm, encryptionKey, iv);\n\n // Encrypt the userId and base64-encode the result\n const encryptedIdentifier = Buffer.concat([\n cipher.update(userId),\n cipher.final(),\n ]).toString('base64');\n\n // Create the JWT content - jwt.sign will add a 'iat' (issued at) field to the payload\n // If you wanted to add something manually, consider\n // const issued: Date = new Date();\n // const isoDate = issued.toISOString();\n const jwtPayload = {\n encryptedIdentifier,\n };\n\n // Create a JSON web token and HMAC it with SHA-384\n const consentToken = jwt.sign(jwtPayload, signingKey, {\n algorithm: 'HS384',\n });\n\n return consentToken;\n}\n","import * as t from 'io-ts';\n\nexport const ConsentPreferenceBase = t.intersection([\n t.type({\n /** User ID */\n userId: t.string,\n /** Has the consent been updated (including no-change confirmation) since default resolution */\n timestamp: t.string,\n }),\n t.partial({\n /** Was tracking consent confirmed by the user? If this is false, the consent was resolved from defaults & is not yet confirmed */\n confirmed: t.union([t.literal('true'), t.literal('false')]),\n /**\n * Has the consent been updated (including no-change confirmation) since default resolution\n */\n updated: t.union([t.literal('true'), t.literal('false')]),\n /**\n * Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js)\n */\n prompted: t.union([t.literal('true'), t.literal('false')]),\n /** Consent metadata */\n metadata: t.string,\n /** US Privacy (USP) String */\n usp: t.union([t.string, t.null]),\n /** IAB GPP String */\n gpp: t.union([t.string, t.null]),\n }),\n]);\n\n/** Type override */\nexport type ConsentPreferenceBase = t.TypeOf<typeof ConsentPreferenceUpload>;\n\nexport const ConsentPreferenceUpload = t.intersection([\n ConsentPreferenceBase,\n t.partial({\n /**\n * Purpose map\n * This is a stringified JSON object with keys as purpose names and values as booleans or 'Auto'\n */\n purposes: t.string,\n }),\n]);\n\n/** Type override */\nexport type ConsentPreferenceUpload = t.TypeOf<typeof ConsentPreferenceUpload>;\n\nexport const ConsentPreferenceFetch = t.intersection([\n ConsentPreferenceBase,\n t.type({\n /** This is the partition key used for the dynamo entry */\n partition: t.string,\n }),\n t.partial({\n /** IAB TCF String */\n tcf: t.union([t.string, t.null]),\n /**\n * Purpose map\n * This is a JSON object with keys as purpose names and values as booleans or 'Auto'\n */\n purposes: t.record(t.string, t.union([t.boolean, t.string])),\n }),\n]);\n\n/** Type override */\nexport type ConsentPreferenceFetch = t.TypeOf<typeof ConsentPreferenceFetch>;\n","import { createTranscendConsentGotInstance } from '../graphql';\nimport colors from 'colors';\nimport * as t from 'io-ts';\nimport { DEFAULT_TRANSCEND_CONSENT_API } from '../../constants';\nimport { map } from '../bluebird-replace';\nimport { createConsentToken } from './createConsentToken';\nimport { logger } from '../../logger';\nimport cliProgress from 'cli-progress';\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport type { ConsentPreferenceUpload } from './types';\nimport { ConsentPreferencesBody } from '@transcend-io/airgap.js-types';\n\nexport const USP_STRING_REGEX = /^[0-9][Y|N]([Y|N])[Y|N]$/;\n\nexport const PurposeMap = t.record(\n t.string,\n t.union([t.boolean, t.literal('Auto')]),\n);\n\n/**\n * Upload a set of consent preferences\n *\n * @param options - Options\n */\nexport async function uploadConsents({\n base64EncryptionKey,\n base64SigningKey,\n preferences,\n partition,\n concurrency = 100,\n transcendUrl = DEFAULT_TRANSCEND_CONSENT_API,\n}: {\n /** base64 encryption key */\n base64EncryptionKey: string;\n /** base64 signing key */\n base64SigningKey: string;\n /** Partition key */\n partition: string;\n /** Sombra API key authentication */\n preferences: ConsentPreferenceUpload[];\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Concurrency limit for approving */\n concurrency?: number;\n}): Promise<void> {\n // Create connection to API\n const transcendConsentApi = createTranscendConsentGotInstance(transcendUrl);\n\n // Ensure usp strings are valid\n const invalidUspStrings = preferences.filter(\n (pref) => pref.usp && !USP_STRING_REGEX.test(pref.usp),\n );\n if (invalidUspStrings.length > 0) {\n throw new Error(\n `Received invalid usp strings: ${JSON.stringify(\n invalidUspStrings,\n null,\n 2,\n )}`,\n );\n }\n\n // Ensure purpose maps are valid\n const invalidPurposeMaps = preferences\n .map((pref, ind) => [pref, ind] as [ConsentPreferenceUpload, number])\n .filter(([pref]) => {\n if (!pref.purposes) {\n return false;\n }\n try {\n decodeCodec(PurposeMap, pref.purposes);\n return false;\n } catch {\n return true;\n }\n });\n if (invalidPurposeMaps.length > 0) {\n throw new Error(\n `Received invalid purpose maps: ${JSON.stringify(\n invalidPurposeMaps,\n null,\n 2,\n )}`,\n );\n }\n\n // Ensure usp or preferences are provided\n const invalidInputs = preferences.filter(\n (pref) => !pref.usp && !pref.purposes,\n );\n if (invalidInputs.length > 0) {\n throw new Error(\n `Received invalid inputs, expected either purposes or usp to be defined: ${JSON.stringify(\n invalidInputs,\n null,\n 2,\n )}`,\n );\n }\n\n logger.info(\n colors.magenta(\n `Uploading ${preferences.length} user preferences to partition ${partition}`,\n ),\n );\n\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar(\n {},\n cliProgress.Presets.shades_classic,\n );\n\n // Build a GraphQL client\n let total = 0;\n progressBar.start(preferences.length, 0);\n await map(\n preferences,\n async ({\n userId,\n confirmed = 'true',\n updated,\n prompted,\n purposes,\n ...consent\n }) => {\n const token = createConsentToken(\n userId,\n base64EncryptionKey,\n base64SigningKey,\n );\n\n // parse usp string\n const [, saleStatus] = consent.usp\n ? USP_STRING_REGEX.exec(consent.usp) || []\n : [];\n\n const input = {\n token,\n partition,\n consent: {\n confirmed: confirmed === 'true',\n purposes: purposes\n ? decodeCodec(PurposeMap, purposes)\n : consent.usp\n ? { SaleOfInfo: saleStatus === 'Y' }\n : {},\n ...(updated ? { updated: updated === 'true' } : {}),\n ...(prompted ? { prompted: prompted === 'true' } : {}),\n ...consent,\n },\n } as ConsentPreferencesBody;\n\n // Make the request\n try {\n await transcendConsentApi\n .post('sync', {\n json: input,\n })\n .json();\n } catch (err) {\n try {\n const parsed = JSON.parse(err?.response?.body || '{}');\n if (parsed.error) {\n logger.error(colors.red(`Error: ${parsed.error}`));\n }\n } catch (e) {\n // continue\n }\n throw new Error(\n `Received an error from server: ${\n err?.response?.body || err?.message\n }`,\n );\n }\n\n total += 1;\n progressBar.update(total);\n },\n { concurrency },\n );\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n logger.info(\n colors.green(\n `Successfully uploaded ${\n preferences.length\n } user preferences to partition ${partition} in \"${\n totalTime / 1000\n }\" seconds!`,\n ),\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/cli/cli/dist/chunk-7NYZMFPT.cjs","../src/app.ts","../src/commands/admin/generate-api-keys/command.ts","../src/commands/admin/routes.ts","../src/commands/consent/routes.ts","../src/commands/consent/build-xdi-sync-endpoint/command.ts","../src/commands/consent/pull-consent-metrics/command.ts","../src/commands/consent/pull-consent-preferences/command.ts","../src/commands/consent/update-consent-manager/command.ts","../src/commands/consent/upload-consent-preferences/command.ts","../src/commands/consent/upload-cookies-from-csv/command.ts","../src/commands/consent/upload-data-flows-from-csv/command.ts","../src/commands/consent/upload-preferences/command.ts","../src/commands/inventory/routes.ts","../src/commands/inventory/derive-data-silos-from-data-flows-cross-instance/command.ts","../src/commands/inventory/derive-data-silos-from-data-flows/command.ts","../src/commands/inventory/discover-silos/command.ts","../src/commands/inventory/pull-datapoints/command.ts","../src/commands/inventory/pull-unstructured-discovery-files/command.ts","../src/commands/inventory/push/command.ts","../src/commands/inventory/scan-packages/command.ts","../src/commands/inventory/consent-manager-service-json-to-yml/command.ts","../src/lib/docgen/buildExamples.ts","../src/commands/inventory/consent-managers-to-business-entities/command.ts","../src/commands/migration/sync-ot/command.ts","../src/commands/migration/routes.ts","../src/commands/request/cron/mark-identifiers-completed/command.ts","../src/commands/request/cron/pull-identifiers/command.ts","../src/commands/request/cron/pull-profiles/command.ts","../src/commands/request/cron/routes.ts","../src/commands/request/enricher-restart/command.ts","../src/commands/request/export/command.ts","../src/commands/request/preflight/pull-identifiers/command.ts","../src/commands/request/preflight/push-identifiers/command.ts","../src/commands/request/preflight/routes.ts","../src/commands/request/system/retry-request-data-silos/command.ts","../src/commands/request/upload/command.ts","../src/commands/request/routes.ts"],"names":["generateApiKeysCommand","buildCommand","generateApiKeys","SCOPE_TITLES","uuidParser","createTranscendUrlParameter","adminRoutes","buildRouteMap","buildXdiSyncEndpointCommand","buildXdiSyncEndpoint","createAuthParameter","ScopeName","arrayParser","pullConsentMetricsCommand","pullConsentMetrics","dateParser","pullConsentPreferencesCommand","pullConsentPreferences","createSombraAuthParameter","numberParser","updateConsentManagerCommand","updateConsentManager","ConsentBundleType","uploadConsentPreferencesCommand","uploadConsentPreferences","createConsentUrlParameter","uploadCookiesFromCsvCommand","uploadCookiesFromCsv","ConsentTrackerStatus","uploadDataFlowsFromCsvCommand","uploadDataFlowsFromCsv","uploadPreferencesCommand","uploadPreferences","consentRoutes","deriveDataSilosFromDataFlowsCrossInstanceCommand","deriveDataSilosFromDataFlowsCrossInstance","deriveDataSilosFromDataFlowsCommand","deriveDataSilosFromDataFlows","discoverSilosCommand","discoverSilos","pullDatapointsCommand","pullDatapoints","DataCategoryType","pullUnstructuredDiscoveryFilesCommand","pullUnstructuredDiscoveryFiles","UnstructuredSubDataPointRecommendationStatus","pushCommand","push","scanPackagesCommand","scanPackages","buildExampleCommand","commandPath","flags","options","command","flagList","getFlagList","forceSingleLine","argsIndent","RequestAction"],"mappings":"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","file":"/home/runner/work/cli/cli/dist/chunk-7NYZMFPT.cjs","sourcesContent":[null,"import {\n buildInstallCommand,\n buildUninstallCommand,\n} from '@stricli/auto-complete';\nimport { buildApplication, buildRouteMap } from '@stricli/core';\nimport { adminRoutes } from './commands/admin/routes';\nimport { consentRoutes } from './commands/consent/routes';\nimport { inventoryRoutes } from './commands/inventory/routes';\nimport { migrationRoutes } from './commands/migration/routes';\nimport { requestRoutes } from './commands/request/routes';\nimport { description, name, version } from './constants';\n\nconst routes = buildRouteMap({\n routes: {\n request: requestRoutes,\n consent: consentRoutes,\n inventory: inventoryRoutes,\n admin: adminRoutes,\n migration: migrationRoutes,\n install: buildInstallCommand('@transcend-io/transcend', {\n bash: '__@transcend-io/cli_bash_complete',\n }),\n uninstall: buildUninstallCommand('@transcend-io/transcend', { bash: true }),\n },\n docs: {\n brief: description,\n hideRoute: {\n install: true,\n uninstall: true,\n },\n },\n});\n\nexport const app = buildApplication(routes, {\n name,\n versionInfo: {\n currentVersion: version,\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { createTranscendUrlParameter } from '../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../lib/cli/parsers';\nimport { SCOPE_TITLES } from '../../../constants';\n\nexport const generateApiKeysCommand = buildCommand({\n loader: async () => {\n const { generateApiKeys } = await import('./impl');\n return generateApiKeys;\n },\n parameters: {\n flags: {\n email: {\n kind: 'parsed',\n parse: String,\n brief: 'The email address that you use to log into Transcend',\n },\n password: {\n kind: 'parsed',\n parse: String,\n brief: 'The password for your account login',\n },\n apiKeyTitle: {\n kind: 'parsed',\n parse: String,\n brief: 'The title of the API key being generated or destroyed',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'The file where API keys should be written to',\n },\n scopes: {\n kind: 'enum',\n values: SCOPE_TITLES,\n variadic: ',',\n brief: 'The list of scopes that should be given to the API key',\n },\n deleteExistingApiKey: {\n kind: 'boolean',\n brief:\n 'When true, if an API key exists with the specified apiKeyTitle, the existing API key is deleted',\n default: true,\n },\n createNewApiKey: {\n kind: 'boolean',\n brief:\n 'When true, new API keys will be created. Set to false if you simply want to delete all API keys with a title',\n default: true,\n },\n parentOrganizationId: {\n kind: 'parsed',\n parse: uuidParser,\n brief:\n 'Filter for only a specific organization by ID, returning all child accounts associated with that organization',\n optional: true,\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Generate API keys',\n fullDescription: `This command allows for creating API keys across multiple Transcend instances. This is useful for customers that are managing many Transcend instances and need to regularly create, cycle or delete API keys across all of their instances.\n\nUnlike the other commands that rely on API key authentication, this command relies upon username/password authentication. This command will spit out the API keys into a JSON file, and that JSON file can be used in subsequent CLI commands.\n\nAuthentication requires your email and password for the Transcend account. This command will only generate API keys for Transcend instances where you have the permission to \"Manage API Keys\".`,\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { generateApiKeysCommand } from './generate-api-keys/command';\n\nexport const adminRoutes = buildRouteMap({\n routes: {\n 'generate-api-keys': generateApiKeysCommand,\n },\n docs: {\n brief: 'Admin commands',\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { buildXdiSyncEndpointCommand } from './build-xdi-sync-endpoint/command';\nimport { pullConsentMetricsCommand } from './pull-consent-metrics/command';\nimport { pullConsentPreferencesCommand } from './pull-consent-preferences/command';\nimport { updateConsentManagerCommand } from './update-consent-manager/command';\nimport { uploadConsentPreferencesCommand } from './upload-consent-preferences/command';\nimport { uploadCookiesFromCsvCommand } from './upload-cookies-from-csv/command';\nimport { uploadDataFlowsFromCsvCommand } from './upload-data-flows-from-csv/command';\nimport { uploadPreferencesCommand } from './upload-preferences/command';\n\nexport const consentRoutes = buildRouteMap({\n routes: {\n 'build-xdi-sync-endpoint': buildXdiSyncEndpointCommand,\n 'pull-consent-metrics': pullConsentMetricsCommand,\n 'pull-consent-preferences': pullConsentPreferencesCommand,\n 'update-consent-manager': updateConsentManagerCommand,\n 'upload-consent-preferences': uploadConsentPreferencesCommand,\n 'upload-cookies-from-csv': uploadCookiesFromCsvCommand,\n 'upload-data-flows-from-csv': uploadDataFlowsFromCsvCommand,\n 'upload-preferences': uploadPreferencesCommand,\n },\n docs: {\n brief: 'Consent commands',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { arrayParser } from '../../../lib/cli/parsers';\n\nexport const buildXdiSyncEndpointCommand = buildCommand({\n loader: async () => {\n const { buildXdiSyncEndpoint } = await import('./impl');\n return buildXdiSyncEndpoint;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewConsentManager],\n }),\n xdiLocation: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The location of the XDI that will be loaded by the generated sync endpoint',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'The HTML file path where the sync endpoint should be written',\n default: './sync-endpoint.html',\n },\n removeIpAddresses: {\n kind: 'boolean',\n brief: 'When true, remove IP addresses from the domain list',\n default: true,\n },\n domainBlockList: {\n kind: 'parsed',\n parse: arrayParser,\n brief:\n 'The set of domains that should be excluded from the sync endpoint. Comma-separated list.',\n default: 'localhost',\n },\n xdiAllowedCommands: {\n kind: 'parsed',\n parse: String,\n brief: 'The allowed set of XDI commands',\n default: 'ConsentManager:Sync',\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Build XDI sync endpoint',\n fullDescription:\n 'This command allows for building of the XDI Sync Endpoint across a set of Transcend accounts.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { dateParser } from '../../../lib/cli/parsers';\n\nexport const pullConsentMetricsCommand = buildCommand({\n loader: async () => {\n const { pullConsentMetrics } = await import('./impl');\n return pullConsentMetrics;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewConsentManager],\n }),\n start: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'The start date to pull metrics from',\n },\n end: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'The end date to pull metrics until',\n optional: true,\n },\n folder: {\n kind: 'parsed',\n parse: String,\n brief: 'The folder to save metrics to',\n default: './consent-metrics/',\n },\n bin: {\n kind: 'parsed',\n parse: String,\n brief: 'The bin metric when pulling data (1h or 1d)',\n default: '1d',\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Pull consent metrics',\n fullDescription: `This command allows for pulling consent manager metrics for a Transcend account, or a set of Transcend accounts.\n\nBy default, the consent metrics will be written to a folder named \\`consent-metrics\\` within the directory where you run the command. You can override the location that these CSVs are written to using the flag \\`--folder=./my-folder/\\`. This folder will contain a set of CSV files:\n\n- \\`CONSENT_CHANGES_TIMESERIES_optIn.csv\\` -> this is a feed containing the number of explicit opt in events that happen - these are calls to \\`airgap.setConsent(event, { SaleOfInfo: true });\\`\n- \\`CONSENT_CHANGES_TIMESERIES_optOut.csv\\` -> this is a feed containing the number of explicit opt out events that happen - these are calls to \\`airgap.setConsent(event, { SaleOfInfo: false });\\`\n- \\`CONSENT_SESSIONS_BY_REGIME_Default.csv\\` -> this contains the number of sessions detected for the bin period\n- \\`PRIVACY_SIGNAL_TIMESERIES_DNT.csv\\` -> the number of DNT signals detected.\n- \\`PRIVACY_SIGNAL_TIMESERIES_GPC.csv\\` -> the number of GPC signals detected.`,\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { dateParser } from '../../../lib/cli/parsers';\n\nexport const pullConsentPreferencesCommand = buildCommand({\n loader: async () => {\n const { pullConsentPreferences } = await import('./impl');\n return pullConsentPreferences;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewManagedConsentDatabaseAdminApi],\n }),\n partition: {\n kind: 'parsed',\n parse: String,\n brief: 'The partition key to download consent preferences to',\n },\n sombraAuth: createSombraAuthParameter(),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file to save preferences to',\n default: './preferences.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n timestampBefore: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'Filter for consents updated this time',\n optional: true,\n },\n timestampAfter: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'Filter for consents updated after this time',\n optional: true,\n },\n identifiers: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'Filter for specific identifiers',\n optional: true,\n },\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when downloading consents in parallel',\n default: '100',\n },\n },\n },\n docs: {\n brief: 'Pull consent preferences',\n fullDescription:\n 'This command allows for pull of consent preferences from the Managed Consent Database.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ConsentBundleType, ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const updateConsentManagerCommand = buildCommand({\n loader: async () => {\n const { updateConsentManager } = await import('./impl');\n return updateConsentManager;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ManageConsentManagerDeveloperSettings],\n }),\n bundleTypes: {\n kind: 'enum',\n values: Object.values(ConsentBundleType),\n brief: 'The bundle types to deploy. Defaults to PRODUCTION,TEST.',\n variadic: ',',\n },\n deploy: {\n kind: 'boolean',\n brief:\n 'When true, deploy the Consent Manager after updating the version',\n default: false,\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Update consent manager',\n fullDescription:\n 'This command allows for updating Consent Manager to latest version. The Consent Manager bundle can also be deployed using this command.',\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { createConsentUrlParameter } from '../../../lib/cli/common-parameters';\n\nexport const uploadConsentPreferencesCommand = buildCommand({\n loader: async () => {\n const { uploadConsentPreferences } = await import('./impl');\n return uploadConsentPreferences;\n },\n parameters: {\n flags: {\n base64EncryptionKey: {\n kind: 'parsed',\n parse: String,\n brief: 'The encryption key used to encrypt the userId',\n },\n base64SigningKey: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The signing key used to prove authentication of consent request',\n },\n partition: {\n kind: 'parsed',\n parse: String,\n brief: 'The partition key to download consent preferences to',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'The file to pull consent preferences from',\n default: './preferences.csv',\n },\n consentUrl: createConsentUrlParameter(),\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading requests in parallel',\n default: '100',\n },\n },\n },\n docs: {\n brief: 'Upload consent preferences to the Managed Consent Database',\n fullDescription:\n 'This command allows for updating of consent preferences to the Managed Consent Database.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ConsentTrackerStatus, ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const uploadCookiesFromCsvCommand = buildCommand({\n loader: async () => {\n const { uploadCookiesFromCsv } = await import('./impl');\n return uploadCookiesFromCsv;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ManageDataFlow],\n }),\n trackerStatus: {\n kind: 'enum',\n values: Object.values(ConsentTrackerStatus),\n brief: 'The status of the cookies you will upload.',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file to upload',\n default: './cookies.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Upload cookies from CSV',\n fullDescription: `Upload cookies from CSV. This command allows for uploading of cookies from CSV.\n\nStep 1) Download the CSV of cookies that you want to edit from the Admin Dashboard under [Consent Management -> Cookies](https://app.transcend.io/consent-manager/cookies). You can download cookies from both the \"Triage\" and \"Approved\" tabs.\n\nStep 2) You can edit the contents of the CSV file as needed. You may adjust the \"Purpose\" column, adjust the \"Notes\" column, add \"Owners\" and \"Teams\" or even add custom columns with additional metadata.\n\nStep 3) Upload the modified CSV file back into the dashboard with this command.`,\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ConsentTrackerStatus, ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const uploadDataFlowsFromCsvCommand = buildCommand({\n loader: async () => {\n const { uploadDataFlowsFromCsv } = await import('./impl');\n return uploadDataFlowsFromCsv;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ManageDataFlow],\n }),\n trackerStatus: {\n kind: 'enum',\n values: Object.values(ConsentTrackerStatus),\n brief: 'The status of the data flows you will upload.',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file to upload',\n default: './data-flows.csv',\n },\n classifyService: {\n kind: 'boolean',\n brief:\n 'When true, automatically assign the service for a data flow based on the domain that is specified',\n default: false,\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Upload data flows from CSV',\n fullDescription: `Upload data flows from CSV. This command allows for uploading of data flows from CSV.\n\nStep 1) Download the CSV of data flows that you want to edit from the Admin Dashboard under [Consent Management -> Data Flows](https://app.transcend.io/consent-manager/data-flows). You can download data flows from both the \"Triage\" and \"Approved\" tabs.\n\nStep 2) You can edit the contents of the CSV file as needed. You may adjust the \"Purpose\" column, adjust the \"Notes\" column, add \"Owners\" and \"Teams\" or even add custom columns with additional metadata.\n\nStep 3) Upload the modified CSV file back into the dashboard with this command.`,\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const uploadPreferencesCommand = buildCommand({\n loader: async () => {\n const { uploadPreferences } = await import('./impl');\n return uploadPreferences;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [\n ScopeName.ManageStoredPreferences,\n ScopeName.ViewManagedConsentDatabaseAdminApi,\n ScopeName.ViewPreferenceStoreSettings,\n ],\n }),\n partition: {\n kind: 'parsed',\n parse: String,\n brief: 'The partition key to download consent preferences to',\n },\n sombraAuth: createSombraAuthParameter(),\n transcendUrl: createTranscendUrlParameter(),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file to load preferences from',\n optional: true,\n },\n directory: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the directory of CSV files to load preferences from',\n optional: true,\n },\n dryRun: {\n kind: 'boolean',\n brief:\n 'Whether to do a dry run only - will write results to receiptFilepath without updating Transcend',\n default: false,\n },\n skipExistingRecordCheck: {\n kind: 'boolean',\n brief:\n 'Whether to skip the check for existing records. SHOULD ONLY BE USED FOR INITIAL UPLOAD',\n default: false,\n },\n receiptFileDir: {\n kind: 'parsed',\n parse: String,\n brief: 'Directory path where the response receipts should be saved',\n default: './receipts',\n },\n skipWorkflowTriggers: {\n kind: 'boolean',\n brief:\n 'Whether to skip workflow triggers when uploading to preference store',\n default: false,\n },\n forceTriggerWorkflows: {\n kind: 'boolean',\n brief:\n 'Whether to force trigger workflows for existing consent records',\n default: false,\n },\n skipConflictUpdates: {\n kind: 'boolean',\n brief:\n 'Whether to skip uploading of any records where the preference store and file have a hard conflict',\n default: false,\n },\n isSilent: {\n kind: 'boolean',\n brief: 'Whether to skip sending emails in workflows',\n default: true,\n },\n attributes: {\n kind: 'parsed',\n parse: String,\n brief:\n 'Attributes to add to any DSR request if created. Comma-separated list of key:value pairs.',\n default: 'Tags:transcend-cli,Source:transcend-cli',\n },\n receiptFilepath: {\n kind: 'parsed',\n parse: String,\n brief: 'Store resulting, continuing where left off',\n default: './preference-management-upload-receipts.json',\n },\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading in parallel',\n default: '10',\n },\n },\n },\n docs: {\n brief: 'Upload preference management data to your Preference Store',\n fullDescription: `Upload preference management data to your Preference Store.\n\nThis command prompts you to map the shape of the CSV to the shape of the Transcend API. There is no requirement for the shape of the incoming CSV, as the script will handle the mapping process.\n\nThe script will also produce a JSON cache file that allows for the mappings to be preserved between runs.`,\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { deriveDataSilosFromDataFlowsCrossInstanceCommand } from './derive-data-silos-from-data-flows-cross-instance/command';\nimport { deriveDataSilosFromDataFlowsCommand } from './derive-data-silos-from-data-flows/command';\nimport { discoverSilosCommand } from './discover-silos/command';\nimport { pullDatapointsCommand } from './pull-datapoints/command';\nimport { pullUnstructuredDiscoveryFilesCommand } from './pull-unstructured-discovery-files/command';\nimport { pullCommand } from './pull/command';\nimport { pushCommand } from './push/command';\nimport { scanPackagesCommand } from './scan-packages/command';\nimport { consentManagerServiceJsonToYmlCommand } from './consent-manager-service-json-to-yml/command';\nimport { consentManagersToBusinessEntitiesCommand } from './consent-managers-to-business-entities/command';\n\nexport const inventoryRoutes = buildRouteMap({\n routes: {\n pull: pullCommand,\n push: pushCommand,\n 'scan-packages': scanPackagesCommand,\n 'discover-silos': discoverSilosCommand,\n 'pull-datapoints': pullDatapointsCommand,\n 'pull-unstructured-discovery-files': pullUnstructuredDiscoveryFilesCommand,\n 'derive-data-silos-from-data-flows': deriveDataSilosFromDataFlowsCommand,\n 'derive-data-silos-from-data-flows-cross-instance':\n deriveDataSilosFromDataFlowsCrossInstanceCommand,\n 'consent-manager-service-json-to-yml':\n consentManagerServiceJsonToYmlCommand,\n 'consent-managers-to-business-entities':\n consentManagersToBusinessEntitiesCommand,\n },\n docs: {\n brief: 'Inventory commands',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const deriveDataSilosFromDataFlowsCrossInstanceCommand = buildCommand({\n loader: async () => {\n const { deriveDataSilosFromDataFlowsCrossInstance } = await import(\n './impl'\n );\n return deriveDataSilosFromDataFlowsCrossInstance;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [],\n }),\n dataFlowsYmlFolder: {\n kind: 'parsed',\n parse: String,\n brief: 'The folder that contains data flow yml files',\n },\n output: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The output transcend.yml file containing the data silo configurations',\n default: './transcend.yml',\n },\n ignoreYmls: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'The set of yml files that should be skipped when uploading',\n optional: true,\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Derive data silos from data flows cross instance',\n fullDescription:\n 'Given a folder of data flow transcend.yml configurations, convert those configurations to a single transcend.yml configurations of all related data silos.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const deriveDataSilosFromDataFlowsCommand = buildCommand({\n loader: async () => {\n const { deriveDataSilosFromDataFlows } = await import('./impl');\n return deriveDataSilosFromDataFlows;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [],\n }),\n dataFlowsYmlFolder: {\n kind: 'parsed',\n parse: String,\n brief: 'The folder that contains data flow yml files',\n },\n dataSilosYmlFolder: {\n kind: 'parsed',\n parse: String,\n brief: 'The folder that contains data silo yml files',\n },\n ignoreYmls: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'The set of yml files that should be skipped when uploading',\n optional: true,\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Derive data silos from data flows',\n fullDescription:\n 'Given a folder of data flow transcend.yml configurations, convert those configurations to set of data silo transcend.yml configurations.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../lib/cli/parsers';\n\nexport const discoverSilosCommand = buildCommand({\n loader: async () => {\n const { discoverSilos } = await import('./impl');\n return discoverSilos;\n },\n parameters: {\n flags: {\n scanPath: {\n kind: 'parsed',\n parse: String,\n brief: 'File path in the project to scan',\n },\n dataSiloId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The UUID of the corresponding data silo',\n },\n auth: createAuthParameter({\n scopes: [ScopeName.ManageAssignedDataInventory],\n requiresSiloScope: true,\n }),\n fileGlobs: {\n kind: 'parsed',\n parse: String,\n brief:\n 'You can pass a glob syntax pattern(s) to specify additional file paths to scan. Comma-separated list of globs.',\n default: '',\n },\n ignoreDirs: {\n kind: 'parsed',\n parse: String,\n brief: 'Comma-separated list of directories to ignore.',\n default: '',\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Scan dependency management files to discover new data silos.',\n fullDescription: `We support scanning for new data silos in JavaScript, Python, Gradle, and CocoaPods projects.\n\nTo get started, add a data silo for the corresponding project type with the \"silo discovery\" plugin enabled. For example, if you want to scan a JavaScript project, add a package.json data silo. Then, specify the data silo ID in the \"--dataSiloId\" parameter.`,\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { DataCategoryType, ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const pullDatapointsCommand = buildCommand({\n loader: async () => {\n const { pullDatapoints } = await import('./impl');\n return pullDatapoints;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewDataInventory],\n }),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'The file to save datapoints to',\n default: './datapoints.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n dataSiloIds: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'List of data silo IDs to filter by',\n optional: true,\n },\n includeAttributes: {\n kind: 'boolean',\n brief: 'Whether to include attributes in the output',\n default: false,\n },\n includeGuessedCategories: {\n kind: 'boolean',\n brief: 'Whether to include guessed categories in the output',\n default: false,\n },\n parentCategories: {\n kind: 'enum',\n values: Object.values(DataCategoryType),\n brief: 'List of parent categories to filter by',\n variadic: ',',\n optional: true,\n },\n subCategories: {\n kind: 'parsed',\n parse: String,\n brief: 'List of subcategories to filter by',\n variadic: ',',\n optional: true,\n },\n },\n },\n docs: {\n brief: 'Export the datapoints from your Data Inventory into a CSV.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport {\n ScopeName,\n UnstructuredSubDataPointRecommendationStatus,\n} from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const pullUnstructuredDiscoveryFilesCommand = buildCommand({\n loader: async () => {\n const { pullUnstructuredDiscoveryFiles } = await import('./impl');\n return pullUnstructuredDiscoveryFiles;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewDataInventory],\n }),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'The file to save datapoints to',\n default: './unstructured-discovery-files.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n dataSiloIds: {\n kind: 'parsed',\n parse: String,\n brief: 'List of data silo IDs to filter by',\n variadic: ',',\n optional: true,\n },\n subCategories: {\n kind: 'parsed',\n parse: String,\n brief: 'List of data categories to filter by',\n variadic: ',',\n optional: true,\n },\n status: {\n kind: 'enum',\n values: Object.values(UnstructuredSubDataPointRecommendationStatus),\n brief: 'List of classification statuses to filter by',\n variadic: ',',\n optional: true,\n },\n includeEncryptedSnippets: {\n kind: 'boolean',\n brief:\n 'Whether to include encrypted snippets of the entries classified',\n default: false,\n },\n },\n },\n docs: {\n brief: 'Pull unstructured discovery files',\n fullDescription:\n 'This command allows for pulling Unstructured Discovery into a CSV.',\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const pushCommand = buildCommand({\n loader: async () => {\n const { push } = await import('./impl');\n return push;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: 'Varies',\n }),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the YAML file to push from',\n default: './transcend.yml',\n },\n transcendUrl: createTranscendUrlParameter(),\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 variables: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The variables to template into the YAML file when pushing configuration. Comma-separated list of key:value pairs.',\n default: '',\n },\n publishToPrivacyCenter: {\n kind: 'boolean',\n brief: 'When true, publish the configuration to the Privacy Center',\n default: false,\n },\n classifyService: {\n kind: 'boolean',\n brief:\n 'When true, automatically assign the service for a data flow based on the domain that is specified',\n default: false,\n },\n deleteExtraAttributeValues: {\n kind: 'boolean',\n brief:\n 'When true and syncing attributes, delete any extra attributes instead of just upserting',\n default: false,\n },\n },\n },\n docs: {\n brief: 'Push metadata from transcend.yml to Transcend',\n fullDescription:\n 'Given a transcend.yml file, sync the contents up to your Transcend instance.',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const scanPackagesCommand = buildCommand({\n loader: async () => {\n const { scanPackages } = await import('./impl');\n return scanPackages;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ManageCodeScanning],\n }),\n scanPath: {\n kind: 'parsed',\n parse: String,\n brief: 'File path in the project to scan',\n default: './',\n },\n ignoreDirs: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'List of directories to ignore in scan',\n optional: true,\n },\n repositoryName: {\n kind: 'parsed',\n parse: String,\n brief: 'Name of the git repository that the package should be tied to',\n optional: true,\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Scan dependency management files to inventory code dependencies.',\n fullDescription: `Transcend scans packages and dependencies for the following frameworks:\n\n- package.json\n- requirements.txt & setup.py\n- Podfile\n- Package.resolved\n- build.gradle\n- pubspec.yaml\n- Gemfile & .gemspec\n- composer.json\n\nThis command will scan the folder you point at to look for any of these files. Once found, the build file will be parsed in search of dependencies. Those code packages and dependencies will be uploaded to Transcend. The information uploaded to Transcend is:\n\n- repository name\n- package names\n- dependency names and versions\n- package descriptions`,\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { buildExampleCommand } from '../../../lib/docgen/buildExamples';\nimport { ConsentManagerServiceJsonToYmlCommandFlags } from './impl';\nimport { PushCommandFlags } from '../push/impl';\n\nexport const consentManagerServiceJsonToYmlCommand = buildCommand({\n loader: async () => {\n const { consentManagerServiceJsonToYml } = await import('./impl');\n return consentManagerServiceJsonToYml;\n },\n parameters: {\n flags: {\n file: {\n kind: 'parsed',\n parse: String,\n brief:\n 'Path to the services.json file, output of await airgap.getMetadata()',\n default: './services.json',\n },\n output: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the output transcend.yml to write to',\n default: './transcend.yml',\n },\n },\n },\n docs: {\n brief: 'Convert consent manager services to transcend.yml',\n fullDescription: `Import the services from an airgap.js file into a Transcend instance.\n\n1. Run \\`await airgap.getMetadata()\\` on a site with airgap\n2. Right click on the printed object, and click \\`Copy object\\`\n3. Place output of file in a file named \\`services.json\\`\n4. Run:\n\n ${buildExampleCommand<ConsentManagerServiceJsonToYmlCommandFlags>(\n ['inventory', 'consent-manager-service-json-to-yml'],\n {\n file: './services.json',\n output: './transcend.yml',\n },\n { argsIndent: 5 },\n )}\n\n5. Run:\n\n ${buildExampleCommand<PushCommandFlags>(\n ['inventory', 'push'],\n {\n auth: '$TRANSCEND_API_KEY',\n file: './transcend.yml',\n classifyService: true,\n },\n { argsIndent: 5 },\n )}`,\n },\n});\n","import { name } from '../../constants';\n\nexport interface Example<Flags> {\n /** A description of the example */\n description: string;\n /** The flag arguments to the command */\n flags: Partial<Flags>;\n}\n\n/**\n * Builds a string of examples for the CLI\n *\n * @param commandPath - The path to the command to run, omitting the `transcend` command name, e.g., `['consent', 'upload-preferences']`\n * @param examples - The examples to build\n * @returns A string of examples for the CLI\n */\nexport function buildExamples<Flags = never>(\n commandPath: string[],\n examples: NoInfer<Example<Flags>>[],\n): string {\n return examples\n .map((example) => {\n const exampleCommand = buildExampleCommand<Flags>(\n commandPath,\n example.flags,\n );\n return `**${example.description}**\\n\\n\\`\\`\\`sh\\n${exampleCommand}\\n\\`\\`\\``;\n })\n .join('\\n\\n');\n}\n\n/**\n * Builds a command string for an example\n *\n * @param commandPath - The path to the command to run, omitting the `transcend` command name, e.g., `['consent', 'upload-preferences']`\n * @param flags - The flags to build the command with\n * @param options - The options for the command\n * @returns A command string for the example\n */\nexport function buildExampleCommand<Flags = never>(\n commandPath: string[],\n flags: NoInfer<Partial<Flags>>,\n options?: {\n /** If true, the command will be forced to a single line */\n forceSingleLine?: boolean;\n /** If true, the command will be indented */\n argsIndent?: number;\n },\n): string {\n const command = commandPath.join(' ');\n const flagList = getFlagList(flags);\n const { forceSingleLine = false, argsIndent = 2 } = options ?? {};\n\n if (flagList.length === 0) {\n return `${name} ${command}`;\n }\n\n // Break the command into multiple lines if it's too long\n const exampleCommand =\n `${name} ${command} ${flagList.join(' ')}`.length <= 117 && !forceSingleLine\n ? `${command} ${flagList.join(' ')}`\n : `${command} \\\\\\n${' '.repeat(argsIndent)}${flagList.join(\n ` \\\\\\n${' '.repeat(argsIndent)}`,\n )}`;\n\n // Add `transcend` before command name\n return `${name} ${exampleCommand}`;\n}\n\n/**\n * Formats a flag value to the bash string for an example command\n *\n * @param value - The value to format\n * @param depth - The depth of the recursion\n * @returns The formatted value\n */\nfunction formatFlagValue(value: unknown, depth = 0): string {\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (typeof value === 'number') {\n return value.toString();\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (Array.isArray(value) && depth === 0) {\n const values = value.map((v) => formatFlagValue(v, depth + 1));\n if (values.every((x) => x.startsWith('$') || x.includes(' '))) {\n return `\"${values.join(',')}\"`;\n }\n return values.join(',');\n }\n\n if (typeof value === 'string') {\n // If we're operating on list elements\n if (depth === 1) {\n if (value.startsWith('$')) {\n return `$\\{${value.slice(1)}}`;\n }\n return value;\n }\n\n // Escape strings that start with $ or contain spaces or special characters\n return value.startsWith('$') || value.includes(' ') ? `\"${value}\"` : value;\n }\n\n throw new Error(`Unsupported value type: ${typeof value}`);\n}\n\n/**\n * Builds a list of flags formatted for an example command\n *\n * @param flags - The flags to build the command with\n * @param depth - The depth of the recursion\n * @returns A list of flags for the example command\n */\nexport function getFlagList<Flags = never>(\n flags: Partial<Flags>,\n depth = 0,\n): string[] {\n return Object.entries(flags).map(([flag, value]) => {\n if (typeof value === 'boolean' && value) {\n // For true booleans, just pass the flag alone\n return `--${flag}`;\n }\n\n const formattedValue = formatFlagValue(value, depth);\n\n return `--${flag}=${formattedValue}`;\n });\n}\n","import { buildCommand } from '@stricli/core';\n\nexport const consentManagersToBusinessEntitiesCommand = buildCommand({\n loader: async () => {\n const { consentManagersToBusinessEntities } = await import('./impl');\n return consentManagersToBusinessEntities;\n },\n parameters: {\n flags: {\n consentManagerYmlFolder: {\n kind: 'parsed',\n parse: String,\n brief:\n 'Path to the folder of Consent Manager transcend.yml files to combine',\n },\n output: {\n kind: 'parsed',\n parse: String,\n brief:\n 'Path to the output transcend.yml with business entity configuration',\n default: './combined-business-entities.yml',\n },\n },\n },\n docs: {\n brief: 'Convert consent managers to business entities',\n fullDescription:\n 'This command allows for converting a folder or Consent Manager transcend.yml files into a single transcend.yml file where each consent manager configuration is a Business Entity in the data inventory.',\n },\n});\n","import { buildCommand, type TypedFlagParameter } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { OneTrustPullResource, OneTrustPullSource } from '../../../enums';\nimport type { LocalContext } from '../../../context';\n\nexport const syncOtCommand = buildCommand({\n loader: async () => {\n const { syncOt } = await import('./impl');\n return syncOt;\n },\n parameters: {\n flags: {\n hostname: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The domain of the OneTrust environment from which to pull the resource',\n optional: true,\n },\n oneTrustAuth: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The OAuth access token with the scopes necessary to access the OneTrust Public APIs',\n optional: true,\n },\n source: {\n kind: 'enum',\n values: Object.values(OneTrustPullSource) as OneTrustPullSource[],\n brief: 'Whether to read the assessments from OneTrust or from a file',\n default: OneTrustPullSource.OneTrust,\n },\n transcendAuth: {\n ...createAuthParameter({\n scopes: [ScopeName.ManageAssessments],\n }),\n optional: true,\n } as TypedFlagParameter<string | undefined, LocalContext>,\n transcendUrl: createTranscendUrlParameter(),\n file: {\n kind: 'parsed',\n parse: String,\n brief:\n 'Path to the file to pull the resource into. Must be a json file!',\n optional: true,\n },\n resource: {\n kind: 'enum',\n values: Object.values(OneTrustPullResource) as OneTrustPullResource[],\n brief:\n 'The resource to pull from OneTrust. For now, only assessments is supported',\n default: OneTrustPullResource.Assessments,\n },\n dryRun: {\n kind: 'boolean',\n brief:\n 'Whether to export the resource to a file rather than sync to Transcend',\n default: false,\n },\n debug: {\n kind: 'boolean',\n brief: 'Whether to print detailed logs in case of error',\n default: false,\n },\n },\n },\n docs: {\n brief: 'Sync OneTrust data',\n fullDescription: `Pulls resources from a OneTrust and syncs them to a Transcend instance. For now, it only supports retrieving OneTrust Assessments.\n\nThis command can be helpful if you are looking to:\n- Pull resources from your OneTrust account.\n- Migrate your resources from your OneTrust account to Transcend.\n\nOneTrust authentication requires an OAuth Token with scope for accessing the assessment endpoints.\nIf syncing the resources to Transcend, you will also need to generate an API key on the Transcend Admin Dashboard.`,\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { syncOtCommand } from './sync-ot/command';\n\nexport const migrationRoutes = buildRouteMap({\n routes: {\n 'sync-ot': syncOtCommand,\n },\n docs: {\n brief: 'Migration commands',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../../lib/cli/parsers';\nimport type { PullIdentifiersCommandFlags } from '../pull-identifiers/impl';\nimport { buildExampleCommand } from '../../../../lib/docgen/buildExamples';\nimport type { MarkIdentifiersCompletedCommandFlags } from './impl';\nimport { RequestAction } from '@transcend-io/privacy-types';\n\nexport const markIdentifiersCompletedCommand = buildCommand({\n loader: async () => {\n const { markIdentifiersCompleted } = await import('./impl');\n return markIdentifiersCompleted;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [],\n requiresSiloScope: true,\n }),\n dataSiloId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The ID of the data silo to pull in',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where identifiers will be written to',\n default: './cron-identifiers.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n sombraAuth: createSombraAuthParameter(),\n },\n },\n docs: {\n brief: 'Mark identifiers as completed after processing.',\n fullDescription: `This command takes the output of \"${buildExampleCommand<PullIdentifiersCommandFlags>(\n ['request', 'cron', 'pull-identifiers'],\n {},\n )}\" and notifies Transcend that all of the requests in the CSV have been processed.\nThis is used in the workflow like:\n\n1. Pull identifiers to CSV:\n\n ${buildExampleCommand<PullIdentifiersCommandFlags>(\n ['request', 'cron', 'pull-identifiers'],\n {\n auth: '$TRANSCEND_API_KEY',\n dataSiloId: '70810f2e-cf90-43f6-9776-901a5950599f',\n actions: [RequestAction.Erasure],\n file: './outstanding-requests.csv',\n },\n { argsIndent: 5 },\n )}\n\n2. Run your process to operate on that CSV of requests.\n\n3. Notify Transcend of completion\n\n ${buildExampleCommand<MarkIdentifiersCompletedCommandFlags>(\n ['request', 'cron', 'mark-identifiers-completed'],\n {\n auth: '$TRANSCEND_API_KEY',\n dataSiloId: '70810f2e-cf90-43f6-9776-901a5950599f',\n file: './outstanding-requests.csv',\n },\n { argsIndent: 5 },\n )}\n\nRead more at https://docs.transcend.io/docs/integrations/cron-job-integration.`,\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../../lib/cli/parsers';\nimport { RequestAction } from '@transcend-io/privacy-types';\n\nexport const pullIdentifiersCommand = buildCommand({\n loader: async () => {\n const { pullIdentifiers } = await import('./impl');\n return pullIdentifiers;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [],\n requiresSiloScope: true,\n }),\n dataSiloId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The ID of the data silo to pull in',\n },\n actions: {\n kind: 'enum',\n values: Object.values(RequestAction),\n variadic: ',',\n brief: 'The request actions to restart',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where identifiers will be written to',\n default: './cron-identifiers.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n sombraAuth: createSombraAuthParameter(),\n pageLimit: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The page limit to use when pulling in pages of identifiers',\n default: '100',\n },\n skipRequestCount: {\n kind: 'boolean',\n brief:\n 'Whether to skip the count of all outstanding requests. This is required to render the progress bar, but can take a long time to run if you have a large number of outstanding requests to process. In that case, we recommend setting skipRequestCount=true so that you can still proceed with fetching the identifiers',\n default: false,\n },\n chunkSize: {\n kind: 'parsed',\n parse: numberParser,\n brief:\n 'Maximum number of rows per CSV file. For large datasets, the output will be automatically split into multiple files to avoid file system size limits. Each file will contain at most this many rows',\n default: '10000',\n },\n },\n },\n docs: {\n brief: 'Pull identifiers of outstanding requests for a data silo to a CSV.',\n fullDescription: `If you are using the cron job integration, you can run this command to pull the outstanding identifiers for the data silo to a CSV.\n\nFor large datasets, the output will be automatically split into multiple CSV files to avoid file system size limits. Use the --chunkSize parameter to control the maximum number of rows per file.\n\nRead more at https://docs.transcend.io/docs/integrations/cron-job-integration.`,\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../../lib/cli/parsers';\nimport { RequestAction } from '@transcend-io/privacy-types';\n\nexport const pullProfilesCommand = buildCommand({\n loader: async () => {\n const { pullProfiles } = await import('./impl');\n return pullProfiles;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [],\n requiresSiloScope: true,\n }),\n cronDataSiloId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The ID of the cron data silo to pull in',\n },\n targetDataSiloId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The ID of the target data silo to pull in',\n },\n actions: {\n kind: 'enum',\n values: Object.values(RequestAction),\n variadic: ',',\n brief: 'The request actions to restart',\n },\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where identifiers will be written to',\n default: './cron-identifiers.csv',\n },\n fileTarget: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where identifiers will be written to',\n default: './cron-identifiers-target.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n sombraAuth: createSombraAuthParameter(),\n pageLimit: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The page limit to use when pulling in pages of identifiers',\n default: '100',\n },\n skipRequestCount: {\n kind: 'boolean',\n brief:\n 'Whether to skip the count of all outstanding requests. This is required to render the progress bar, but can take a long time to run if you have a large number of outstanding requests to process. In that case, we recommend setting skipRequestCount=true so that you can still proceed with fetching the identifiers',\n default: false,\n },\n chunkSize: {\n kind: 'parsed',\n parse: numberParser,\n brief:\n 'Maximum number of rows per CSV file. For large datasets, the output will be automatically split into multiple files to avoid file system size limits. Each file will contain at most this many rows',\n default: '10000',\n },\n },\n },\n docs: {\n brief: 'Pull profiles of outstanding requests for a data silo to a CSV.',\n fullDescription: `If you are using the cron job integration, you can run this command to pull the outstanding profiles for the data silo to a CSV.\n\nFor large datasets, the output will be automatically split into multiple CSV files to avoid file system size limits. Use the --chunkSize parameter to control the maximum number of rows per file.\n\nRead more at https://docs.transcend.io/docs/integrations/cron-job-integration.`,\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { markIdentifiersCompletedCommand } from './mark-identifiers-completed/command';\nimport { pullIdentifiersCommand } from './pull-identifiers/command';\nimport { pullProfilesCommand } from './pull-profiles/command';\n\nexport const cronRoutes = buildRouteMap({\n routes: {\n 'pull-identifiers': pullIdentifiersCommand,\n 'pull-profiles': pullProfilesCommand,\n 'mark-identifiers-completed': markIdentifiersCompletedCommand,\n },\n docs: {\n brief: 'Cron commands',\n hideRoute: {\n 'pull-profiles': true,\n },\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport {\n RequestAction,\n RequestEnricherStatus,\n ScopeName,\n} from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { dateParser } from '../../../lib/cli/parsers';\n\nexport const enricherRestartCommand = buildCommand({\n loader: async () => {\n const { enricherRestart } = await import('./impl');\n return enricherRestart;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ManageRequestCompilation],\n }),\n enricherId: {\n kind: 'parsed',\n parse: String,\n brief: 'The ID of the enricher to restart',\n },\n actions: {\n kind: 'enum',\n values: Object.values(RequestAction),\n variadic: ',',\n brief: 'The request action to restart',\n optional: true,\n },\n requestEnricherStatuses: {\n kind: 'enum',\n values: Object.values(RequestEnricherStatus),\n variadic: ',',\n brief: 'The request enricher statuses to restart',\n optional: true,\n },\n transcendUrl: createTranscendUrlParameter(),\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading requests in parallel',\n default: '15',\n },\n requestIds: {\n kind: 'parsed',\n parse: String,\n variadic: ',',\n brief: 'Specify the specific request IDs to restart',\n optional: true,\n },\n createdAtBefore: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'Restart requests that were submitted before this time',\n optional: true,\n },\n createdAtAfter: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'Restart requests that were submitted after this time',\n optional: true,\n },\n },\n },\n docs: {\n brief: 'Bulk restart a particular enricher across a series of DSRs',\n fullDescription: `Bulk restart a particular enricher across a series of DSRs.\n\nThe API key needs the following scopes:\n- Manage Request Compilation`,\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport {\n RequestAction,\n RequestStatus,\n ScopeName,\n} from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\nimport { dateParser } from '../../../lib/cli/parsers';\n\nexport const exportCommand = buildCommand({\n loader: async () => {\n const { _export } = await import('./impl');\n return _export;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewRequests, ScopeName.ViewRequestCompilation],\n }),\n sombraAuth: createSombraAuthParameter(),\n actions: {\n kind: 'enum',\n values: Object.values(RequestAction),\n variadic: ',',\n brief: 'The request actions to export',\n optional: true,\n },\n statuses: {\n kind: 'enum',\n values: Object.values(RequestStatus),\n variadic: ',',\n brief: 'The request statuses to export',\n optional: true,\n },\n transcendUrl: createTranscendUrlParameter(),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where identifiers will be written to',\n default: './transcend-request-export.csv',\n },\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading requests in parallel',\n default: '100',\n },\n createdAtBefore: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'Pull requests that were submitted before this time',\n optional: true,\n },\n createdAtAfter: {\n kind: 'parsed',\n parse: dateParser,\n brief: 'Pull requests that were submitted after this time',\n optional: true,\n },\n showTests: {\n kind: 'boolean',\n brief:\n 'Filter for test requests or production requests - when not provided, pulls both',\n optional: true,\n },\n pageLimit: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The page limit to use when pulling in pages of requests',\n default: '100',\n },\n },\n },\n docs: {\n brief: 'Export privacy requests and request identifiers to a CSV file',\n fullDescription:\n 'Export privacy requests and request identifiers to a CSV file.',\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { RequestAction, ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../../lib/cli/common-parameters';\nimport { buildExampleCommand } from '../../../../lib/docgen/buildExamples';\nimport type { PullIdentifiersCommandFlags } from './impl';\nimport type { PushIdentifiersCommandFlags } from '../push-identifiers/impl';\n\nexport const pullIdentifiersCommand = buildCommand({\n loader: async () => {\n const { pullIdentifiers } = await import('./impl');\n return pullIdentifiers;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ViewRequests, ScopeName.ViewRequestCompilation],\n }),\n sombraAuth: createSombraAuthParameter(),\n transcendUrl: createTranscendUrlParameter(),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where requests will be written to',\n default: './manual-enrichment-identifiers.csv',\n },\n actions: {\n kind: 'enum',\n values: Object.values(RequestAction),\n variadic: ',',\n brief: 'The request actions to pull for',\n optional: true,\n },\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading requests in parallel',\n default: '100',\n },\n },\n },\n docs: {\n brief: 'Pull identifiers for manual enrichment',\n fullDescription: `This command pulls down the set of privacy requests that are currently pending manual enrichment.\n\nThis is useful for the following workflow:\n\n1. Pull identifiers to CSV:\n\n ${buildExampleCommand<PullIdentifiersCommandFlags>(\n ['request', 'preflight', 'pull-identifiers'],\n {\n file: './enrichment-requests.csv',\n },\n { argsIndent: 5 },\n )}\n\n2. Fill out the CSV with additional identifiers\n\n3. Push updated back to Transcend:\n\n ${buildExampleCommand<PushIdentifiersCommandFlags>(\n ['request', 'preflight', 'push-identifiers'],\n {\n file: './enrichment-requests.csv',\n },\n { argsIndent: 5 },\n )}`,\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../../lib/cli/parsers';\nimport { buildExampleCommand } from '../../../../lib/docgen/buildExamples';\nimport type { PullIdentifiersCommandFlags } from '../pull-identifiers/impl';\nimport type { PushIdentifiersCommandFlags } from './impl';\n\nexport const pushIdentifiersCommand = buildCommand({\n loader: async () => {\n const { pushIdentifiers } = await import('./impl');\n return pushIdentifiers;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [\n ScopeName.ManageRequestIdentities,\n ScopeName.ManageRequestCompilation,\n ],\n }),\n enricherId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The ID of the Request Enricher to upload to',\n },\n sombraAuth: createSombraAuthParameter(),\n transcendUrl: createTranscendUrlParameter(),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file where requests will be written to',\n default: './manual-enrichment-identifiers.csv',\n },\n markSilent: {\n kind: 'boolean',\n brief: 'When true, set requests into silent mode before enriching',\n default: false,\n },\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading requests in parallel',\n default: '100',\n },\n },\n },\n docs: {\n brief: 'Push identifiers for manual enrichment',\n fullDescription: `This command push up a set of identifiers for a set of requests pending manual enrichment.\n\nThis is useful for the following workflow:\n\n1. Pull identifiers to CSV:\n\n ${buildExampleCommand<PullIdentifiersCommandFlags>(\n ['request', 'preflight', 'pull-identifiers'],\n {\n file: './enrichment-requests.csv',\n },\n { argsIndent: 5 },\n )}\n\n2. Fill out the CSV with additional identifiers\n\n3. Push updated back to Transcend:\n\n ${buildExampleCommand<PushIdentifiersCommandFlags>(\n ['request', 'preflight', 'push-identifiers'],\n {\n file: './enrichment-requests.csv',\n },\n { argsIndent: 5 },\n )}`,\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { pullIdentifiersCommand } from './pull-identifiers/command';\nimport { pushIdentifiersCommand } from './push-identifiers/command';\n\nexport const preflightRoutes = buildRouteMap({\n routes: {\n 'pull-identifiers': pullIdentifiersCommand,\n 'push-identifiers': pushIdentifiersCommand,\n },\n docs: {\n brief: 'Preflight commands',\n },\n});\n","import { buildCommand } from '@stricli/core';\nimport { RequestAction, ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createTranscendUrlParameter,\n} from '../../../../lib/cli/common-parameters';\nimport { uuidParser } from '../../../../lib/cli/parsers';\n\nexport const retryRequestDataSilosCommand = buildCommand({\n loader: async () => {\n const { retryRequestDataSilos } = await import('./impl');\n return retryRequestDataSilos;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [ScopeName.ManageRequestCompilation],\n }),\n dataSiloId: {\n kind: 'parsed',\n parse: uuidParser,\n brief: 'The ID of the data silo to pull in',\n },\n actions: {\n kind: 'enum',\n values: Object.values(RequestAction),\n variadic: ',',\n brief: 'The request actions to restart',\n },\n transcendUrl: createTranscendUrlParameter(),\n },\n },\n docs: {\n brief: 'Retry request data silos',\n fullDescription:\n 'This command allows for bulk restarting a set of data silos jobs for open privacy requests. This is equivalent to clicking the \"Wipe and Retry\" button for a particular data silo across a set of privacy requests.',\n },\n});\n","import { buildCommand, numberParser } from '@stricli/core';\nimport { ScopeName } from '@transcend-io/privacy-types';\nimport {\n createAuthParameter,\n createSombraAuthParameter,\n createTranscendUrlParameter,\n} from '../../../lib/cli/common-parameters';\n\nexport const uploadCommand = buildCommand({\n loader: async () => {\n const { upload } = await import('./impl');\n return upload;\n },\n parameters: {\n flags: {\n auth: createAuthParameter({\n scopes: [\n ScopeName.MakeDataSubjectRequest,\n ScopeName.ViewRequestIdentitySettings,\n ScopeName.ViewGlobalAttributes,\n ],\n }),\n file: {\n kind: 'parsed',\n parse: String,\n brief: 'Path to the CSV file of requests to upload',\n default: './requests.csv',\n },\n transcendUrl: createTranscendUrlParameter(),\n cacheFilepath: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The path to the JSON file encoding the metadata used to map the CSV shape to Transcend API',\n default: './transcend-privacy-requests-cache.json',\n },\n requestReceiptFolder: {\n kind: 'parsed',\n parse: String,\n brief:\n 'The path to the folder where receipts of each upload are stored',\n default: './privacy-request-upload-receipts',\n },\n sombraAuth: createSombraAuthParameter(),\n concurrency: {\n kind: 'parsed',\n parse: numberParser,\n brief: 'The concurrency to use when uploading requests in parallel',\n default: '50',\n },\n attributes: {\n kind: 'parsed',\n parse: String,\n brief:\n 'Tag all of the requests with the following attributes. Format: key1:value1;value2,key2:value3;value4',\n default: 'Tags:transcend-cli',\n },\n isTest: {\n kind: 'boolean',\n brief:\n 'Flag whether the requests being uploaded are test requests or regular requests',\n default: false,\n },\n isSilent: {\n kind: 'boolean',\n brief:\n 'Flag whether the requests being uploaded should be submitted in silent mode',\n default: true,\n },\n skipSendingReceipt: {\n kind: 'boolean',\n brief: 'Flag whether to skip sending of the receipt email',\n default: false,\n },\n emailIsVerified: {\n kind: 'boolean',\n brief:\n 'Indicate whether the email address being uploaded is pre-verified. Set to false to send a verification email',\n default: true,\n },\n skipFilterStep: {\n kind: 'boolean',\n brief: 'When true, skip the interactive step to filter down the CSV',\n default: false,\n },\n dryRun: {\n kind: 'boolean',\n brief:\n 'When true, perform a dry run of the upload instead of calling the API to submit the requests',\n default: false,\n },\n debug: {\n kind: 'boolean',\n brief: 'Debug logging',\n default: false,\n },\n defaultPhoneCountryCode: {\n kind: 'parsed',\n parse: String,\n brief:\n 'When uploading phone numbers, if the phone number is missing a country code, assume this country code',\n default: '1',\n },\n },\n },\n docs: {\n brief: 'Upload a set of requests from a CSV',\n fullDescription: `Upload a set of requests from a CSV.\n\nThis command prompts you to map the shape of the CSV to the shape of the Transcend API. There is no requirement for the shape of the incoming CSV, as the script will handle the mapping process.\n\nThe script will also produce a JSON cache file that allows for the mappings to be preserved between runs.`,\n },\n});\n","import { buildRouteMap } from '@stricli/core';\nimport { approveCommand } from './approve/command';\nimport { cancelCommand } from './cancel/command';\nimport { cronRoutes } from './cron/routes';\nimport { downloadFilesCommand } from './download-files/command';\nimport { enricherRestartCommand } from './enricher-restart/command';\nimport { exportCommand } from './export/command';\nimport { markSilentCommand } from './mark-silent/command';\nimport { notifyAdditionalTimeCommand } from './notify-additional-time/command';\nimport { preflightRoutes } from './preflight/routes';\nimport { rejectUnverifiedIdentifiersCommand } from './reject-unverified-identifiers/command';\nimport { restartCommand } from './restart/command';\nimport { skipPreflightJobsCommand } from './skip-preflight-jobs/command';\nimport { systemRoutes } from './system/routes';\nimport { uploadCommand } from './upload/command';\n\nexport const requestRoutes = buildRouteMap({\n routes: {\n approve: approveCommand,\n upload: uploadCommand,\n 'download-files': downloadFilesCommand,\n cancel: cancelCommand,\n restart: restartCommand,\n 'notify-additional-time': notifyAdditionalTimeCommand,\n 'mark-silent': markSilentCommand,\n 'enricher-restart': enricherRestartCommand,\n 'reject-unverified-identifiers': rejectUnverifiedIdentifiersCommand,\n export: exportCommand,\n 'skip-preflight-jobs': skipPreflightJobsCommand,\n system: systemRoutes,\n preflight: preflightRoutes,\n cron: cronRoutes,\n },\n docs: {\n brief: 'All commands related to DSR requests',\n },\n});\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkQEM6S2W7cjs = require('./chunk-QEM6S2W7.cjs');var _chunkUPUHHIXZcjs = require('./chunk-UPUHHIXZ.cjs');var _chunkZUNVPK23cjs = require('./chunk-ZUNVPK23.cjs');var _chunk6IHSPKMPcjs = require('./chunk-6IHSPKMP.cjs');var _colors = require('colors'); var _colors2 = _interopRequireDefault(_colors);async function H({email:r,password:a,scopes:f,apiKeyTitle:t,parentOrganizationId:o,deleteExistingApiKey:l=!0,createNewApiKey:x=!0,transcendUrl:k=_chunk6IHSPKMPcjs.e}){let s=await _chunkUPUHHIXZcjs.Vd.call(void 0, k,{});_chunkZUNVPK23cjs.a.info(_colors2.default.magenta("Logging in using email and password."));let{roles:d,loginCookie:P}=await _chunkUPUHHIXZcjs.we.call(void 0, s,{email:r,password:a});_chunkZUNVPK23cjs.a.info(_colors2.default.green(`Successfully logged in and found ${d.length} role${d.length===1?"":"s"}!`));let K=o?d.filter(e=>e.organization.id===o||e.organization.parentOrganizationId===o):d;s.setHeaders({Cookie:P});let m=[],c=[];return _chunkZUNVPK23cjs.a.info(_colors2.default.magenta(`Generating API keys with title: ${t}, scopes: ${f.join(",")}.`)),await _chunkUPUHHIXZcjs.a.call(void 0, K,async e=>{try{await _chunkUPUHHIXZcjs.xe.call(void 0, s,{roleId:e.id,email:r}),_chunkZUNVPK23cjs.a.info(_colors2.default.magenta(`Checking if API key already exists in organization "${e.organization.name}" with title: "${t}".`));let[g]=await _chunkUPUHHIXZcjs.Dc.call(void 0, s,[t]);if(g&&l)_chunkZUNVPK23cjs.a.info(_colors2.default.yellow(`Deleting existing API key in "${e.organization.name}" with title: "${t}".`)),await _chunkUPUHHIXZcjs.ze.call(void 0, s,g.id),_chunkZUNVPK23cjs.a.info(_colors2.default.green(`Successfully deleted API key in "${e.organization.name}" with title: "${t}".`));else if(g)throw new Error(`API key already exists with title: "${t}"`);if(x){_chunkZUNVPK23cjs.a.info(_colors2.default.magenta(`Creating API key in "${e.organization.name}" with title: "${t}".`));let{apiKey:N}=await _chunkUPUHHIXZcjs.ye.call(void 0, s,{title:t,scopes:f});m.push({organizationName:e.organization.name,organizationId:e.organization.id,apiKey:N}),_chunkZUNVPK23cjs.a.info(_colors2.default.green(`Successfully created API key in "${e.organization.name}" with title: "${t}".`))}else m.push({organizationName:e.organization.name,organizationId:e.organization.id,apiKey:""})}catch(g){_chunkZUNVPK23cjs.a.error(_colors2.default.red(`Failed to create API key in organization "${e.organization.name}"! - ${g.message}`)),c.push({organizationName:e.organization.name,organizationId:e.organization.id,error:g.message})}}),_chunkZUNVPK23cjs.a.info(_colors2.default.green(`Successfully created ${m.length} API key${m.length===1?"":"s"}`)),c.length>0&&_chunkZUNVPK23cjs.a.error(_colors2.default.red(`Failed to create ${c.length} API key${c.length===1?"":"s"}!`)),{errors:c,apiKeys:m}}var _typeutils = require('@transcend-io/type-utils');var _iots = require('io-ts'); var I = _interopRequireWildcard(_iots);var _fs = require('fs');function T(r){return r||(_chunkZUNVPK23cjs.a.error(_colors2.default.red("A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY")),process.exit(1)),_fs.existsSync.call(void 0, r)?_typeutils.decodeCodec.call(void 0, I.array(_chunkQEM6S2W7cjs.ha),_fs.readFileSync.call(void 0, r,"utf-8")):r}function Z(r,a,f=!1){if(!_fs.existsSync.call(void 0, r))return[];let t=_fs.readdirSync.call(void 0, r).filter(o=>a?a.filter(l=>o.endsWith(l)).length:!0).filter(o=>o.indexOf(".")>0);return f?t.map(o=>o.replace(/\.[^/.]+$/,"")):t}var _path = require('path');function te(r){return _fs.readdirSync.call(void 0, r).filter(a=>_fs.statSync.call(void 0, _path.join.call(void 0, r,a)).isDirectory())}exports.a = H; exports.b = T; exports.c = Z; exports.d = te;
2
- //# sourceMappingURL=chunk-AMO6I4AO.cjs.map