@transcend-io/cli 4.26.3 → 4.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -24
- package/build/cli-pull.js +18 -1
- package/build/cli-pull.js.map +1 -1
- package/build/codecs.d.ts +11417 -17
- package/build/codecs.d.ts.map +1 -1
- package/build/codecs.js +259 -10
- package/build/codecs.js.map +1 -1
- package/build/graphql/fetchAllActions.d.ts +24 -0
- package/build/graphql/fetchAllActions.d.ts.map +1 -0
- package/build/graphql/fetchAllActions.js +32 -0
- package/build/graphql/fetchAllActions.js.map +1 -0
- package/build/graphql/fetchAllBusinessEntities.d.ts +38 -0
- package/build/graphql/fetchAllBusinessEntities.d.ts.map +1 -0
- package/build/graphql/fetchAllBusinessEntities.js +32 -0
- package/build/graphql/fetchAllBusinessEntities.js.map +1 -0
- package/build/graphql/fetchAllCookies.js +1 -1
- package/build/graphql/fetchAllCookies.js.map +1 -1
- package/build/graphql/fetchConsentManagerId.d.ts +29 -0
- package/build/graphql/fetchConsentManagerId.d.ts.map +1 -1
- package/build/graphql/fetchConsentManagerId.js +24 -2
- package/build/graphql/fetchConsentManagerId.js.map +1 -1
- package/build/graphql/fetchDataSubjects.d.ts +21 -1
- package/build/graphql/fetchDataSubjects.d.ts.map +1 -1
- package/build/graphql/fetchDataSubjects.js +16 -4
- package/build/graphql/fetchDataSubjects.js.map +1 -1
- package/build/graphql/fetchIdentifiers.d.ts +28 -0
- package/build/graphql/fetchIdentifiers.d.ts.map +1 -1
- package/build/graphql/fetchIdentifiers.js.map +1 -1
- package/build/graphql/gqls/action.d.ts +2 -0
- package/build/graphql/gqls/action.d.ts.map +1 -0
- package/build/graphql/gqls/action.js +19 -0
- package/build/graphql/gqls/action.js.map +1 -0
- package/build/graphql/gqls/attribute.js +2 -2
- package/build/graphql/gqls/attribute.js.map +1 -1
- package/build/graphql/gqls/businessEntity.d.ts +2 -0
- package/build/graphql/gqls/businessEntity.d.ts.map +1 -0
- package/build/graphql/gqls/businessEntity.js +27 -0
- package/build/graphql/gqls/businessEntity.js.map +1 -0
- package/build/graphql/gqls/consentManager.d.ts +3 -0
- package/build/graphql/gqls/consentManager.d.ts.map +1 -1
- package/build/graphql/gqls/consentManager.js +35 -4
- package/build/graphql/gqls/consentManager.js.map +1 -1
- package/build/graphql/gqls/dataSubject.d.ts.map +1 -1
- package/build/graphql/gqls/dataSubject.js +7 -0
- package/build/graphql/gqls/dataSubject.js.map +1 -1
- package/build/graphql/gqls/enricher.js +1 -1
- package/build/graphql/gqls/identifier.d.ts.map +1 -1
- package/build/graphql/gqls/identifier.js +15 -0
- package/build/graphql/gqls/identifier.js.map +1 -1
- package/build/graphql/gqls/index.d.ts +2 -0
- package/build/graphql/gqls/index.d.ts.map +1 -1
- package/build/graphql/gqls/index.js +2 -0
- package/build/graphql/gqls/index.js.map +1 -1
- package/build/graphql/index.d.ts +4 -0
- package/build/graphql/index.d.ts.map +1 -1
- package/build/graphql/index.js +4 -0
- package/build/graphql/index.js.map +1 -1
- package/build/graphql/pullTranscendConfiguration.d.ts +28 -7
- package/build/graphql/pullTranscendConfiguration.d.ts.map +1 -1
- package/build/graphql/pullTranscendConfiguration.js +298 -109
- package/build/graphql/pullTranscendConfiguration.js.map +1 -1
- package/build/graphql/syncAttribute.d.ts +12 -0
- package/build/graphql/syncAttribute.d.ts.map +1 -0
- package/build/graphql/syncAttribute.js +68 -0
- package/build/graphql/syncAttribute.js.map +1 -0
- package/build/graphql/syncConfigurationToTranscend.d.ts.map +1 -1
- package/build/graphql/syncConfigurationToTranscend.js +95 -9
- package/build/graphql/syncConfigurationToTranscend.js.map +1 -1
- package/build/graphql/syncDataFlows.d.ts +17 -0
- package/build/graphql/syncDataFlows.d.ts.map +1 -0
- package/build/graphql/syncDataFlows.js +70 -0
- package/build/graphql/syncDataFlows.js.map +1 -0
- package/build/graphql/syncEnrichers.d.ts.map +1 -1
- package/build/graphql/syncEnrichers.js +6 -3
- package/build/graphql/syncEnrichers.js.map +1 -1
- package/build/tests/readTranscendYaml.test.js +0 -3
- package/build/tests/readTranscendYaml.test.js.map +1 -1
- package/build/tsbuildinfo +1 -1
- 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
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
|
240
|
-
| ------------ |
|
|
241
|
-
| auth | The Transcend API capable of fetching the configuration
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
245
|
-
|
|
|
246
|
-
|
|
|
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,30 @@ 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 everything:
|
|
303
|
+
|
|
304
|
+
```sh
|
|
305
|
+
tr-pull --auth=$TRANSCEND_API_KEY --resources=all
|
|
306
|
+
```
|
|
307
|
+
|
|
274
308
|
Or with a specific page size (max 100)
|
|
275
309
|
|
|
276
310
|
```sh
|
|
@@ -293,14 +327,22 @@ Given a transcend.yml file, sync the contents up to your connected services view
|
|
|
293
327
|
|
|
294
328
|
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
329
|
|
|
296
|
-
The API key needs the following scopes:
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
-
|
|
303
|
-
|
|
330
|
+
The API key needs the following scopes when pushing the various resource types:
|
|
331
|
+
|
|
332
|
+
| Key | Description | Scope | Is Default | Link |
|
|
333
|
+
| ---------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
334
|
+
| 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) |
|
|
335
|
+
| 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) |
|
|
336
|
+
| 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) |
|
|
337
|
+
| enrichers | The Privacy Request enricher configurations. | Manage Request Identity Verification | true | [Privacy Requests -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
|
|
338
|
+
| 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) |
|
|
339
|
+
| identifiers | The Privacy Request identifier configurations. | Manage Identity Verification Settings | false | [Privacy Requests -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
|
|
340
|
+
| actions | The Privacy Request action settings. | Manage Data Subject Request Settings | false | [Privacy Requests -> Request Settings](https://app.transcend.io/privacy-requests/settings) |
|
|
341
|
+
| dataSubjects | The Privacy Request data subject settings. | Manage Data Subject Request Settings | false | [Privacy Requests -> Request Settings](https://app.transcend.io/privacy-requests/settings) |
|
|
342
|
+
| 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) |
|
|
343
|
+
| dataFlows | Consent Manager Data Flow definitions. | Manage Data Flows | false | [Consent Manager -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
|
|
344
|
+
| cookies | Consent Manager Cookie definitions. | Manage Data Flows | false | [Consent Manager -> Cookies](https://app.transcend.io/consent-manager/cookies/approved) |
|
|
345
|
+
| 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
346
|
|
|
305
347
|
#### Arguments
|
|
306
348
|
|
|
@@ -356,7 +398,7 @@ jobs:
|
|
|
356
398
|
deploy:
|
|
357
399
|
runs-on: ubuntu-latest
|
|
358
400
|
steps:
|
|
359
|
-
- uses: actions/checkout@
|
|
401
|
+
- uses: actions/checkout@v3
|
|
360
402
|
|
|
361
403
|
- name: Setup Node.js
|
|
362
404
|
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
|
});
|
package/build/cli-pull.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-pull.js","sourceRoot":"","sources":["../src/cli-pull.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,qCAAkC;AAClC,oDAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"cli-pull.js","sourceRoot":"","sources":["../src/cli-pull.ts"],"names":[],"mappings":"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"}
|