@transcend-io/cli 6.26.0 → 6.26.1
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 +10 -9
- package/build/cli-cron-pull-identifiers.js +5 -1
- package/build/cli-cron-pull-identifiers.js.map +1 -1
- package/build/cron/pullCustomSiloOutstandingIdentifiers.d.ts +3 -1
- package/build/cron/pullCustomSiloOutstandingIdentifiers.d.ts.map +1 -1
- package/build/cron/pullCustomSiloOutstandingIdentifiers.js +20 -8
- package/build/cron/pullCustomSiloOutstandingIdentifiers.js.map +1 -1
- package/build/tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1764,15 +1764,16 @@ The API key must be associated to the ID of the integration/data silo that is be
|
|
|
1764
1764
|
|
|
1765
1765
|
#### Arguments
|
|
1766
1766
|
|
|
1767
|
-
| Argument
|
|
1768
|
-
|
|
|
1769
|
-
| auth
|
|
1770
|
-
| dataSiloId
|
|
1771
|
-
| actions
|
|
1772
|
-
| file
|
|
1773
|
-
| transcendUrl
|
|
1774
|
-
| sombraAuth
|
|
1775
|
-
| pageLimit
|
|
1767
|
+
| Argument | Description | Type | Default | Required |
|
|
1768
|
+
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | ------------------------ | -------- |
|
|
1769
|
+
| auth | The Transcend API key with the scopes necessary for the command. | string | N/A | true |
|
|
1770
|
+
| dataSiloId | The ID of the data silo to pull in. | string - UUID | N/A | true |
|
|
1771
|
+
| actions | The [request action](https://docs.transcend.io/docs/privacy-requests/configuring-requests/data-subject-requests#data-actions) to restart. | RequestAction[] | N/A | true |
|
|
1772
|
+
| file | Path to the CSV file where identifiers will be written to. | string - file-path | ./cron-identifiers.csv | false |
|
|
1773
|
+
| transcendUrl | URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. | string - URL | https://api.transcend.io | false |
|
|
1774
|
+
| sombraAuth | The sombra internal key, use for additional authentication when self-hosting sombra. | string | N/A | false |
|
|
1775
|
+
| pageLimit | The page limit to use when pulling in pages of identifiers. | number | 100 | false |
|
|
1776
|
+
| skipRequestCount | 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. | boolean | false | false |
|
|
1776
1777
|
|
|
1777
1778
|
#### Usage
|
|
1778
1779
|
|
|
@@ -31,7 +31,7 @@ const requests_1 = require("./requests");
|
|
|
31
31
|
*/
|
|
32
32
|
async function main() {
|
|
33
33
|
// Parse command line arguments
|
|
34
|
-
const { file = './cron-identifiers.csv', transcendUrl = constants_1.DEFAULT_TRANSCEND_API, auth, sombraAuth, dataSiloId, actions, pageLimit = '100', } = (0, yargs_parser_1.default)(process.argv.slice(2));
|
|
34
|
+
const { file = './cron-identifiers.csv', transcendUrl = constants_1.DEFAULT_TRANSCEND_API, auth, sombraAuth, dataSiloId, actions, pageLimit = '100', skipRequestCount = false, } = (0, yargs_parser_1.default)(process.argv.slice(2));
|
|
35
35
|
// Ensure auth is passed
|
|
36
36
|
if (!auth) {
|
|
37
37
|
logger_1.logger.error(colors_1.default.red('A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY'));
|
|
@@ -45,6 +45,9 @@ async function main() {
|
|
|
45
45
|
logger_1.logger.error(colors_1.default.red('At least one action must be provided. You can specify using --actions=ERASURE'));
|
|
46
46
|
process.exit(1);
|
|
47
47
|
}
|
|
48
|
+
if (skipRequestCount === 'true') {
|
|
49
|
+
logger_1.logger.info(colors_1.default.yellow('Skipping request count as requested. This may help speed up the call.'));
|
|
50
|
+
}
|
|
48
51
|
// Validate actions
|
|
49
52
|
const parsedActions = (0, requests_1.splitCsvToList)(actions);
|
|
50
53
|
const invalidActions = parsedActions.filter(
|
|
@@ -63,6 +66,7 @@ async function main() {
|
|
|
63
66
|
auth,
|
|
64
67
|
sombraAuth,
|
|
65
68
|
dataSiloId,
|
|
69
|
+
skipRequestCount: skipRequestCount === 'true',
|
|
66
70
|
});
|
|
67
71
|
// Write CSV
|
|
68
72
|
const headers = (0, uniq_1.default)(identifiersFormattedForCsv.map((d) => Object.keys(d)).flat());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-cron-pull-identifiers.js","sourceRoot":"","sources":["../src/cli-cron-pull-identifiers.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,oDAA4B;AAE5B,qCAAkC;AAClC,uDAA+B;AAC/B,iCAAwE;AACxE,+DAA4D;AAC5D,2CAAoD;AACpD,yCAA4C;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,EACJ,IAAI,GAAG,wBAAwB,EAC/B,YAAY,GAAG,iCAAqB,EACpC,IAAI,EACJ,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"cli-cron-pull-identifiers.js","sourceRoot":"","sources":["../src/cli-cron-pull-identifiers.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,oDAA4B;AAE5B,qCAAkC;AAClC,uDAA+B;AAC/B,iCAAwE;AACxE,+DAA4D;AAC5D,2CAAoD;AACpD,yCAA4C;AAE5C;;;;;;;;;;;;;;;;GAgBG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,EACJ,IAAI,GAAG,wBAAwB,EAC/B,YAAY,GAAG,iCAAqB,EACpC,IAAI,EACJ,UAAU,EACV,UAAU,EACV,OAAO,EACP,SAAS,GAAG,KAAK,EACjB,gBAAgB,GAAG,KAAK,GACzB,GAAG,IAAA,sBAAK,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAA8B,CAAC;IAE9D,wBAAwB;IACxB,IAAI,CAAC,IAAI,EAAE;QACT,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,uFAAuF,CACxF,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,IAAI,CAAC,UAAU,EAAE;QACf,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,0GAA0G,CAC3G,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,IAAI,CAAC,OAAO,EAAE;QACZ,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,+EAA+E,CAChF,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,IAAI,gBAAgB,KAAK,MAAM,EAAE;QAC/B,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,MAAM,CACX,uEAAuE,CACxE,CACF,CAAC;KACH;IAED,mBAAmB;IACnB,MAAM,aAAa,GAAG,IAAA,yBAAc,EAAC,OAAO,CAAoB,CAAC;IACjE,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM;IACzC,8DAA8D;IAC9D,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,6BAAa,CAAC,CAAC,QAAQ,CAAC,IAAW,CAAC,CAC9D,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7B,eAAM,CAAC,KAAK,CACV,gBAAM,CAAC,GAAG,CACR,4BAA4B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;YACxD,sBAAsB,MAAM,CAAC,MAAM,CAAC,6BAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClE,CACF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,oCAAoC;IACpC,MAAM,EAAE,0BAA0B,EAAE,GAClC,MAAM,IAAA,2CAAoC,EAAC;QACzC,YAAY;QACZ,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;QAClC,OAAO,EAAE,aAAa;QACtB,IAAI;QACJ,UAAU;QACV,UAAU;QACV,gBAAgB,EAAE,gBAAgB,KAAK,MAAM;KAC9C,CAAC,CAAC;IAEL,YAAY;IACZ,MAAM,OAAO,GAAG,IAAA,cAAI,EAClB,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC7D,CAAC;IACF,IAAA,eAAQ,EAAC,IAAI,EAAE,0BAA0B,EAAE,OAAO,CAAC,CAAC;IACpD,eAAM,CAAC,IAAI,CACT,gBAAM,CAAC,KAAK,CACV,sBAAsB,0BAA0B,CAAC,MAAM,yBAAyB,IAAI,GAAG,CACxF,CACF,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -9,7 +9,7 @@ export interface CronIdentifierWithAction extends CronIdentifier {
|
|
|
9
9
|
*
|
|
10
10
|
* @param options - Options
|
|
11
11
|
*/
|
|
12
|
-
export declare function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth, sombraAuth, actions, pageLimit, transcendUrl, }: {
|
|
12
|
+
export declare function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth, sombraAuth, actions, pageLimit, transcendUrl, skipRequestCount, }: {
|
|
13
13
|
/** Transcend API key authentication */
|
|
14
14
|
auth: string;
|
|
15
15
|
/** Data Silo ID to pull down jobs for */
|
|
@@ -22,6 +22,8 @@ export declare function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth,
|
|
|
22
22
|
transcendUrl?: string;
|
|
23
23
|
/** Sombra API key authentication */
|
|
24
24
|
sombraAuth?: string;
|
|
25
|
+
/** Skip request count */
|
|
26
|
+
skipRequestCount?: boolean;
|
|
25
27
|
}): Promise<{
|
|
26
28
|
/** Raw Identifiers */
|
|
27
29
|
identifiers: CronIdentifierWithAction[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pullCustomSiloOutstandingIdentifiers.d.ts","sourceRoot":"","sources":["../../src/cron/pullCustomSiloOutstandingIdentifiers.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,wDAAwD;IACxD,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,oCAAoC,CAAC,EACzD,UAAU,EACV,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAe,EACf,YAAoC,
|
|
1
|
+
{"version":3,"file":"pullCustomSiloOutstandingIdentifiers.d.ts","sourceRoot":"","sources":["../../src/cron/pullCustomSiloOutstandingIdentifiers.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAK5D,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,wDAAwD;IACxD,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,oCAAoC,CAAC,EACzD,UAAU,EACV,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAe,EACf,YAAoC,EACpC,gBAAwB,GACzB,EAAE;IACD,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC;IACV,sBAAsB;IACtB,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACxC,oCAAoC;IACpC,0BAA0B,EAAE;SACzB,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM;KAChD,EAAE,CAAC;CACL,CAAC,CAwGD"}
|
|
@@ -16,15 +16,18 @@ const bluebird_1 = require("bluebird");
|
|
|
16
16
|
*
|
|
17
17
|
* @param options - Options
|
|
18
18
|
*/
|
|
19
|
-
async function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth, sombraAuth, actions, pageLimit = 100, transcendUrl = constants_1.DEFAULT_TRANSCEND_API, }) {
|
|
19
|
+
async function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth, sombraAuth, actions, pageLimit = 100, transcendUrl = constants_1.DEFAULT_TRANSCEND_API, skipRequestCount = false, }) {
|
|
20
20
|
// Create sombra instance to communicate with
|
|
21
21
|
const sombra = await (0, graphql_1.createSombraGotInstance)(transcendUrl, auth, sombraAuth);
|
|
22
22
|
// Create GraphQL client to connect to Transcend backend
|
|
23
23
|
const client = (0, graphql_1.buildTranscendGraphQLClient)(transcendUrl, auth);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
let totalRequestCount = 0;
|
|
25
|
+
if (!skipRequestCount) {
|
|
26
|
+
totalRequestCount = await (0, graphql_1.fetchRequestDataSiloActiveCount)(client, {
|
|
27
|
+
dataSiloId,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
logger_1.logger.info(colors_1.default.magenta(`Pulling ${skipRequestCount ? 'all' : totalRequestCount} outstanding request identifiers ` +
|
|
28
31
|
`for data silo: "${dataSiloId}" for requests of types "${actions.join('", "')}"`));
|
|
29
32
|
// Time duration
|
|
30
33
|
const t0 = new Date().getTime();
|
|
@@ -34,7 +37,9 @@ async function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth, sombraAu
|
|
|
34
37
|
// identifiers found in total
|
|
35
38
|
const identifiers = [];
|
|
36
39
|
// map over each action
|
|
37
|
-
|
|
40
|
+
if (!skipRequestCount) {
|
|
41
|
+
progressBar.start(totalRequestCount, 0);
|
|
42
|
+
}
|
|
38
43
|
await (0, bluebird_1.mapSeries)(actions, async (action) => {
|
|
39
44
|
let offset = 0;
|
|
40
45
|
let shouldContinue = true;
|
|
@@ -56,10 +61,17 @@ async function pullCustomSiloOutstandingIdentifiers({ dataSiloId, auth, sombraAu
|
|
|
56
61
|
}));
|
|
57
62
|
shouldContinue = pageIdentifiers.length === pageLimit;
|
|
58
63
|
offset += pageLimit;
|
|
59
|
-
|
|
64
|
+
if (!skipRequestCount) {
|
|
65
|
+
progressBar.update(foundRequestIds.size);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
logger_1.logger.info(colors_1.default.magenta(`Pulled ${pageIdentifiers.length} outstanding identifiers for ${foundRequestIds.size} requests`));
|
|
69
|
+
}
|
|
60
70
|
}
|
|
61
71
|
});
|
|
62
|
-
|
|
72
|
+
if (!skipRequestCount) {
|
|
73
|
+
progressBar.stop();
|
|
74
|
+
}
|
|
63
75
|
const t1 = new Date().getTime();
|
|
64
76
|
const totalTime = t1 - t0;
|
|
65
77
|
logger_1.logger.info(colors_1.default.green(`Successfully pulled ${identifiers.length} outstanding identifiers from ${foundRequestIds.size} requests in "${totalTime / 1000}" seconds!`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pullCustomSiloOutstandingIdentifiers.js","sourceRoot":"","sources":["../../src/cron/pullCustomSiloOutstandingIdentifiers.ts"],"names":[],"mappings":";;;;;;AAAA,wCAIoB;AACpB,oDAA4B;AAC5B,gEAAuC;AACvC,2EAGqC;AAErC,sCAAmC;AACnC,4CAAqD;AACrD,uCAAqC;AAOrC;;;;GAIG;AACI,KAAK,UAAU,oCAAoC,CAAC,EACzD,UAAU,EACV,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAS,GAAG,GAAG,EACf,YAAY,GAAG,iCAAqB,
|
|
1
|
+
{"version":3,"file":"pullCustomSiloOutstandingIdentifiers.js","sourceRoot":"","sources":["../../src/cron/pullCustomSiloOutstandingIdentifiers.ts"],"names":[],"mappings":"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"}
|