@transcend-io/cli 4.26.3 → 4.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +72 -24
  2. package/build/cli-pull.js +18 -1
  3. package/build/cli-pull.js.map +1 -1
  4. package/build/codecs.d.ts +11417 -17
  5. package/build/codecs.d.ts.map +1 -1
  6. package/build/codecs.js +259 -10
  7. package/build/codecs.js.map +1 -1
  8. package/build/graphql/fetchAllActions.d.ts +24 -0
  9. package/build/graphql/fetchAllActions.d.ts.map +1 -0
  10. package/build/graphql/fetchAllActions.js +32 -0
  11. package/build/graphql/fetchAllActions.js.map +1 -0
  12. package/build/graphql/fetchAllBusinessEntities.d.ts +38 -0
  13. package/build/graphql/fetchAllBusinessEntities.d.ts.map +1 -0
  14. package/build/graphql/fetchAllBusinessEntities.js +32 -0
  15. package/build/graphql/fetchAllBusinessEntities.js.map +1 -0
  16. package/build/graphql/fetchAllCookies.js +1 -1
  17. package/build/graphql/fetchAllCookies.js.map +1 -1
  18. package/build/graphql/fetchConsentManagerId.d.ts +29 -0
  19. package/build/graphql/fetchConsentManagerId.d.ts.map +1 -1
  20. package/build/graphql/fetchConsentManagerId.js +24 -2
  21. package/build/graphql/fetchConsentManagerId.js.map +1 -1
  22. package/build/graphql/fetchDataSubjects.d.ts +21 -1
  23. package/build/graphql/fetchDataSubjects.d.ts.map +1 -1
  24. package/build/graphql/fetchDataSubjects.js +16 -4
  25. package/build/graphql/fetchDataSubjects.js.map +1 -1
  26. package/build/graphql/fetchIdentifiers.d.ts +28 -0
  27. package/build/graphql/fetchIdentifiers.d.ts.map +1 -1
  28. package/build/graphql/fetchIdentifiers.js.map +1 -1
  29. package/build/graphql/gqls/action.d.ts +2 -0
  30. package/build/graphql/gqls/action.d.ts.map +1 -0
  31. package/build/graphql/gqls/action.js +19 -0
  32. package/build/graphql/gqls/action.js.map +1 -0
  33. package/build/graphql/gqls/attribute.js +2 -2
  34. package/build/graphql/gqls/attribute.js.map +1 -1
  35. package/build/graphql/gqls/businessEntity.d.ts +2 -0
  36. package/build/graphql/gqls/businessEntity.d.ts.map +1 -0
  37. package/build/graphql/gqls/businessEntity.js +27 -0
  38. package/build/graphql/gqls/businessEntity.js.map +1 -0
  39. package/build/graphql/gqls/consentManager.d.ts +4 -0
  40. package/build/graphql/gqls/consentManager.d.ts.map +1 -1
  41. package/build/graphql/gqls/consentManager.js +47 -4
  42. package/build/graphql/gqls/consentManager.js.map +1 -1
  43. package/build/graphql/gqls/dataSubject.d.ts.map +1 -1
  44. package/build/graphql/gqls/dataSubject.js +7 -0
  45. package/build/graphql/gqls/dataSubject.js.map +1 -1
  46. package/build/graphql/gqls/enricher.js +1 -1
  47. package/build/graphql/gqls/identifier.d.ts.map +1 -1
  48. package/build/graphql/gqls/identifier.js +15 -0
  49. package/build/graphql/gqls/identifier.js.map +1 -1
  50. package/build/graphql/gqls/index.d.ts +2 -0
  51. package/build/graphql/gqls/index.d.ts.map +1 -1
  52. package/build/graphql/gqls/index.js +2 -0
  53. package/build/graphql/gqls/index.js.map +1 -1
  54. package/build/graphql/index.d.ts +5 -0
  55. package/build/graphql/index.d.ts.map +1 -1
  56. package/build/graphql/index.js +5 -0
  57. package/build/graphql/index.js.map +1 -1
  58. package/build/graphql/pullTranscendConfiguration.d.ts +28 -7
  59. package/build/graphql/pullTranscendConfiguration.d.ts.map +1 -1
  60. package/build/graphql/pullTranscendConfiguration.js +298 -109
  61. package/build/graphql/pullTranscendConfiguration.js.map +1 -1
  62. package/build/graphql/syncAttribute.d.ts +12 -0
  63. package/build/graphql/syncAttribute.d.ts.map +1 -0
  64. package/build/graphql/syncAttribute.js +68 -0
  65. package/build/graphql/syncAttribute.js.map +1 -0
  66. package/build/graphql/syncConfigurationToTranscend.d.ts.map +1 -1
  67. package/build/graphql/syncConfigurationToTranscend.js +107 -9
  68. package/build/graphql/syncConfigurationToTranscend.js.map +1 -1
  69. package/build/graphql/syncConsentManager.d.ts +10 -0
  70. package/build/graphql/syncConsentManager.d.ts.map +1 -0
  71. package/build/graphql/syncConsentManager.js +23 -0
  72. package/build/graphql/syncConsentManager.js.map +1 -0
  73. package/build/graphql/syncDataFlows.d.ts +17 -0
  74. package/build/graphql/syncDataFlows.d.ts.map +1 -0
  75. package/build/graphql/syncDataFlows.js +70 -0
  76. package/build/graphql/syncDataFlows.js.map +1 -0
  77. package/build/graphql/syncEnrichers.d.ts.map +1 -1
  78. package/build/graphql/syncEnrichers.js +6 -3
  79. package/build/graphql/syncEnrichers.js.map +1 -1
  80. package/build/tests/readTranscendYaml.test.js +0 -3
  81. package/build/tests/readTranscendYaml.test.js.map +1 -1
  82. package/build/tsbuildinfo +1 -1
  83. package/package.json +2 -2
package/README.md CHANGED
@@ -224,26 +224,36 @@ This command can be helpful if you are looking to:
224
224
 
225
225
  In order to use this cli, you will first need to generate an API key on the Transcend Admin Dashboard (https://app.transcend.io/infrastructure/api-keys).
226
226
 
227
- The API key needs the following scopes:
228
-
229
- - View Data Map
230
- - View Identity Verification Settings
231
- - View Data Subject Request Settings
232
- - View API Keys
233
- - View Email Templates
227
+ The API key permissions for this command vary based on the value to the `resources` argument. See the table below to understand the necessary permissions for the resources you are attempting to pull.
228
+
229
+ | Key | Description | Scope | Is Default | Link |
230
+ | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------ | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
231
+ | apiKeys | API Key definitions assigned to Data Silos. API keys cannot be created through the cli, but you can map API key usage to Data Silos. | View API Keys | true | [Infrastructure -> API keys](https://app.transcend.io/infrastructure/api-keys) |
232
+ | templates | Email templates. Only template titles can be created and mapped to other resources. | View Email Templates | true | [Privacy Requests -> Email Templates](https://app.transcend.io/privacy-requests/email-templates) |
233
+ | dataSilos | The Data Silo/Integration definitions. | View Data Map,View Data Subject Request Settings | true | [Data Mapping -> Data Inventory -> Data Silos](https://app.transcend.io/data-map/data-inventory/) and [Infrastucture -> Integrations](https://app.transcend.io/infrastructure/integrationsdata-silos) |
234
+ | enrichers | The Privacy Request enricher configurations. | View Identity Verification Settings | true | [Privacy Requests -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
235
+ | businessEntities | The business entities in the data inventory. | View Data Map | false | [Data Mapping -> Data Inventory -> Business Entities](https://app.transcend.io/data-map/data-inventory/business-entities) |
236
+ | identifiers | The Privacy Request identifier configurations. | View Identity Verification Settings | false | [Privacy Requests -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
237
+ | actions | The Privacy Request action settings. | View Data Subject Request Settings | false | [Privacy Requests -> Request Settings](https://app.transcend.io/privacy-requests/settings) |
238
+ | dataSubjects | The Privacy Request data subject settings. | View Data Subject Request Settings | false | [Privacy Requests -> Request Settings](https://app.transcend.io/privacy-requests/settings) |
239
+ | attributes | Attribute definitions that define extra metadata for each table in the Admin Dashboard. | View Global Attributes | false | [Infrastructure -> Attributes](https://app.transcend.io/infrastructure/attributes) |
240
+ | dataFlows | Consent Manager Data Flow definitions. | View Data Map Data Flows | false | [Consent Manager -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
241
+ | cookies | Consent Manager Cookie definitions. | View Data Flows | false | [Consent Manager -> Cookies](https://app.transcend.io/consent-manager/cookies/approved) |
242
+ | consentManager | Consent Manager general settings, including domain list. | View Consent Manager | false | [Consent Manager -> Developer Settings](https://app.transcend.io/consent-manager/developer-settings) |
234
243
 
235
244
  _Note: The scopes for tr-push are comprehensive of the scopes for tr-pull_
236
245
 
237
246
  #### Arguments
238
247
 
239
- | Argument | Description | Type | Default | Required |
240
- | ------------ | ----------------------------------------------------------------------------- | ------------------- | ------------------------ | -------- |
241
- | auth | The Transcend API capable of fetching the configuration | string | N/A | true |
242
- | file | Path to the YAML file to pull into | string - file-path | ./transcend.yml | false |
243
- | transcendUrl | URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. | string - URL | https://api.transcend.io | false |
244
- | dataSiloIds | The UUIDs of the data silos that should be pulled into the YAML file. | list(string - UUID) | N/A | false |
245
- | pageSize | The page size to use when paginating over the API | number | 50 | false |
246
- | debug | Set to true to include debug logs while pulling the configuration | boolean | false | false |
248
+ | Argument | Description | Type | Default | Required |
249
+ | ------------ | ---------------------------------------------------------------------------------------- | ------------------- | ------------------------------------- | -------- |
250
+ | auth | The Transcend API capable of fetching the configuration | string | N/A | true |
251
+ | resources | The different resource types to pull in (see table above for breakdown of each resource) | string | apiKeys,templates,dataSilos,enrichers | false |
252
+ | file | Path to the YAML file to pull into | string - file-path | ./transcend.yml | false |
253
+ | transcendUrl | URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. | string - URL | https://api.transcend.io | false |
254
+ | dataSiloIds | The UUIDs of the data silos that should be pulled into the YAML file. | list(string - UUID) | N/A | false |
255
+ | pageSize | The page size to use when paginating over the API | number | 50 | false |
256
+ | debug | Set to true to include debug logs while pulling the configuration | boolean | false | false |
247
257
 
248
258
  #### Usage
249
259
 
@@ -271,6 +281,36 @@ Or a specific types of data silo(s) can be pulled in:
271
281
  tr-pull --auth=$TRANSCEND_API_KEY --integrationNames=salesforce,snowflake
272
282
  ```
273
283
 
284
+ Specifying the resource types to pull in (the following resources are the default resources):
285
+
286
+ ```sh
287
+ tr-pull --auth=$TRANSCEND_API_KEY --resources=apiKeys,templates,dataSilos,enrichers
288
+ ```
289
+
290
+ Pull in data flow and cookie resources instead (see [this example](./examples/data-flows-cookies.yml)):
291
+
292
+ ```sh
293
+ tr-pull --auth=$TRANSCEND_API_KEY --resources=dataFlows,cookies
294
+ ```
295
+
296
+ Pull in attribute definitions only (see [this example](./examples/attributes.yml)):
297
+
298
+ ```sh
299
+ tr-pull --auth=$TRANSCEND_API_KEY --resources=attributes
300
+ ```
301
+
302
+ Pull in consent manager domain list (see [this example](./examples/consent-manager-domains.yml)):
303
+
304
+ ```sh
305
+ tr-pull --auth=$TRANSCEND_API_KEY --resources=consentManager
306
+ ```
307
+
308
+ Pull everything:
309
+
310
+ ```sh
311
+ tr-pull --auth=$TRANSCEND_API_KEY --resources=all
312
+ ```
313
+
274
314
  Or with a specific page size (max 100)
275
315
 
276
316
  ```sh
@@ -293,14 +333,22 @@ Given a transcend.yml file, sync the contents up to your connected services view
293
333
 
294
334
  In order to use this cli, you will first need to generate an API key on the Transcend Admin Dashboard (https://app.transcend.io/infrastructure/api-keys).
295
335
 
296
- The API key needs the following scopes:
297
-
298
- - Manage Data Map
299
- - Manage Request Identity Verification
300
- - Connect Data Silos
301
- - Manage Data Subject Request Settings
302
- - View API Keys
303
- - Manage Email Templates
336
+ The API key needs the following scopes when pushing the various resource types:
337
+
338
+ | Key | Description | Scope | Is Default | Link |
339
+ | ---------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
340
+ | apiKeys | API Key definitions. API keys cannot be created through the cli, but you can map API key usage to Data Silos. | View API Keys | true | [Infrastructure -> API keys](https://app.transcend.io/infrastructure/api-keys) |
341
+ | templates | Email templates. Only template titles can be created and mapped to other resources. | Manage Email Templates | true | [Privacy Requests -> Email Templates](https://app.transcend.io/privacy-requests/email-templates) |
342
+ | dataSilos | The Data Silo/Integration definitions. | Manage Data Map,Connect Data Silos | true | [Data Mapping -> Data Inventory -> Data Silos](https://app.transcend.io/data-map/data-inventory/) and [Infrastucture -> Integrations](https://app.transcend.io/infrastructure/integrationsdata-silos) |
343
+ | enrichers | The Privacy Request enricher configurations. | Manage Request Identity Verification | true | [Privacy Requests -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
344
+ | businessEntities | The business entities in the data inventory. | Manage Data Map | false | [Data Mapping -> Data Inventory -> Business Entities](https://app.transcend.io/data-map/data-inventory/business-entities) |
345
+ | identifiers | The Privacy Request identifier configurations. | Manage Identity Verification Settings | false | [Privacy Requests -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
346
+ | actions | The Privacy Request action settings. | Manage Data Subject Request Settings | false | [Privacy Requests -> Request Settings](https://app.transcend.io/privacy-requests/settings) |
347
+ | dataSubjects | The Privacy Request data subject settings. | Manage Data Subject Request Settings | false | [Privacy Requests -> Request Settings](https://app.transcend.io/privacy-requests/settings) |
348
+ | attributes | Attribute definitions that define extra metadata for each table in the Admin Dashboard. | Manage Global Attributes | false | [Infrastructure -> Attributes](https://app.transcend.io/infrastructure/attributes) |
349
+ | dataFlows | Consent Manager Data Flow definitions. | Manage Data Flows | false | [Consent Manager -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
350
+ | cookies | Consent Manager Cookie definitions. | Manage Data Flows | false | [Consent Manager -> Cookies](https://app.transcend.io/consent-manager/cookies/approved) |
351
+ | consentManager | Consent Manager general settings, including domain list. | Deploy Consent Manager | false | [Consent Manager -> Developer Settings](https://app.transcend.io/consent-manager/developer-settings) |
304
352
 
305
353
  #### Arguments
306
354
 
@@ -356,7 +404,7 @@ jobs:
356
404
  deploy:
357
405
  runs-on: ubuntu-latest
358
406
  steps:
359
- - uses: actions/checkout@v2
407
+ - uses: actions/checkout@v3
360
408
 
361
409
  - name: Setup Node.js
362
410
  uses: actions/setup-node@v2
package/build/cli-pull.js CHANGED
@@ -10,6 +10,7 @@ const colors_1 = __importDefault(require("colors"));
10
10
  const graphql_1 = require("./graphql");
11
11
  const readTranscendYaml_1 = require("./readTranscendYaml");
12
12
  const constants_1 = require("./constants");
13
+ const VALID_RESOURCES = Object.values(graphql_1.TranscendPullResource);
13
14
  /**
14
15
  * Sync data silo configuration from Transcend down locally to disk
15
16
  *
@@ -21,7 +22,7 @@ const constants_1 = require("./constants");
21
22
  */
22
23
  async function main() {
23
24
  // Parse command line arguments
24
- const { file = './transcend.yml', transcendUrl = 'https://api.transcend.io', dataSiloIds = '', integrationNames = '', pageSize = '', debug = '', auth, } = (0, yargs_parser_1.default)(process.argv.slice(2));
25
+ const { file = './transcend.yml', transcendUrl = 'https://api.transcend.io', dataSiloIds = '', integrationNames = '', resources = graphql_1.DEFAULT_TRANSCEND_PULL_RESOURCES.join(','), pageSize = '', debug = '', auth, } = (0, yargs_parser_1.default)(process.argv.slice(2));
25
26
  // Ensure auth is passed
26
27
  if (!auth) {
27
28
  logger_1.logger.error(colors_1.default.red('A Transcend API key must be provided. You can specify using --auth=asd123'));
@@ -29,6 +30,21 @@ async function main() {
29
30
  }
30
31
  // Create a GraphQL client
31
32
  const client = (0, graphql_1.buildTranscendGraphQLClient)(transcendUrl, auth);
33
+ // Parse request actions
34
+ let splitResources = [];
35
+ if (!resources) {
36
+ logger_1.logger.error(colors_1.default.red(`Missing required parameter "resources". e.g. --resources=${VALID_RESOURCES.join(',')}`));
37
+ process.exit(1);
38
+ }
39
+ splitResources =
40
+ resources === 'all'
41
+ ? VALID_RESOURCES
42
+ : resources.split(',');
43
+ const invalidResources = splitResources.filter((resource) => !VALID_RESOURCES.includes(resource));
44
+ if (invalidResources.length > 0) {
45
+ logger_1.logger.error(colors_1.default.red(`Received invalid resources values: "${invalidResources.join(',')}". Allowed: ${VALID_RESOURCES.join(',')}`));
46
+ process.exit(1);
47
+ }
32
48
  // Sync to Disk
33
49
  try {
34
50
  const configuration = await (0, graphql_1.pullTranscendConfiguration)(client, {
@@ -36,6 +52,7 @@ async function main() {
36
52
  integrationNames: integrationNames
37
53
  .split(',')
38
54
  .filter((x) => !!x),
55
+ resources: splitResources,
39
56
  pageSize: pageSize ? parseInt(pageSize, 10) : 50,
40
57
  debug: debug === 'true',
41
58
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cli-pull.js","sourceRoot":"","sources":["../src/cli-pull.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,qCAAkC;AAClC,oDAA4B;AAC5B,uCAGmB;AACnB,2DAAyD;AACzD,2CAAsD;AAEtD;;;;;;;;GAQG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,EACJ,IAAI,GAAG,iBAAiB,EACxB,YAAY,GAAG,0BAA0B,EACzC,WAAW,GAAG,EAAE,EAChB,gBAAgB,GAAG,EAAE,EACrB,QAAQ,GAAG,EAAE,EACb,KAAK,GAAG,EAAE,EACV,IAAI,GACL,GAAG,IAAA,sBAAK,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,wBAAwB;IACxB,IAAI,CAAC,IAAI,EAAE;QACT,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,2EAA2E,CAC5E,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAG,IAAA,qCAA2B,EAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAE/D,eAAe;IACf,IAAI;QACF,MAAM,aAAa,GAAG,MAAM,IAAA,oCAA0B,EAAC,MAAM,EAAE;YAC7D,WAAW,EAAG,WAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,gBAAgB,EAAG,gBAA2B;iBAC3C,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;YAChD,KAAK,EAAE,KAAK,KAAK,MAAM;SACxB,CAAC,CAAC;QAEH,eAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,OAAO,CAAC,kCAAkC,IAAI,MAAM,CAAC,CAAC,CAAC;QAC1E,IAAA,sCAAkB,EAAC,IAAI,EAAE,aAAa,CAAC,CAAC;KACzC;IAAC,OAAO,GAAG,EAAE;QACZ,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CAAC,yCAAyC,GAAG,CAAC,OAAO,EAAE,CAAC,CACnE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,mBAAmB;IACnB,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,KAAK,CACV,4CAA4C,IAAI,aAAa,mCAAuB,EAAE,CACvF,CACF,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cli-pull.js","sourceRoot":"","sources":["../src/cli-pull.ts"],"names":[],"mappings":"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"}