@transcend-io/cli 4.63.0 → 4.64.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 +18 -9
- package/build/cli-request-cancel.js +4 -1
- package/build/cli-request-cancel.js.map +1 -1
- package/build/requests/cancelPrivacyRequests.d.ts +3 -1
- package/build/requests/cancelPrivacyRequests.d.ts.map +1 -1
- package/build/requests/cancelPrivacyRequests.js +6 -2
- package/build/requests/cancelPrivacyRequests.js.map +1 -1
- package/build/tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -682,15 +682,17 @@ The API key needs the following scopes:
|
|
|
682
682
|
|
|
683
683
|
#### Arguments
|
|
684
684
|
|
|
685
|
-
| Argument
|
|
686
|
-
|
|
|
687
|
-
| auth
|
|
688
|
-
| actions
|
|
689
|
-
| statuses
|
|
690
|
-
|
|
|
691
|
-
|
|
692
|
-
|
|
|
693
|
-
|
|
|
685
|
+
| Argument | Description | Type | Default | Required |
|
|
686
|
+
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ---------------------------------------------------------------------------------------- | -------- |
|
|
687
|
+
| auth | The Transcend API key with the scopes necessary for the command. | string | N/A | true |
|
|
688
|
+
| actions | The [request actions](https://docs.transcend.io/docs/privacy-requests/configuring-requests/data-subject-requests#data-actions) to cancel. | RequestAction[] | N/A | true |
|
|
689
|
+
| statuses | The [request statuses](https://docs.transcend.io/docs/privacy-requests/overview#request-statuses) to cancel. | RequestStatus[] | REQUEST_MADE,WAITING.ENRICHING,COMPILING,DELAYED,APPROVING,SECONDARY,SECONDARY_APPROVING | false |
|
|
690
|
+
| requestIds | Specify the specific request IDs to cancel | string[] | [] | false |
|
|
691
|
+
|
|
692
|
+
| silentModeBefore | Any requests made before this date should be marked as silent mode for canceling to skip email sending | Date | N/A | false |
|
|
693
|
+
| cancellationTitle | The title of the [email template](https://app.transcend.io/privacy-requests/email-templates) that should be sent to the requests upon cancelation. Any request in silent mode will not be emailed. | string | Request Canceled | false |
|
|
694
|
+
| transcendUrl | URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. | string - URL | https://api.transcend.io | false |
|
|
695
|
+
| concurrency | The concurrency to use when uploading requests in parallel. | number | 100 | false |
|
|
694
696
|
|
|
695
697
|
#### Usage
|
|
696
698
|
|
|
@@ -712,6 +714,13 @@ Bulk cancel all Erasure (request.type=ERASURE) requests that are in an enriching
|
|
|
712
714
|
yarn tr-request-cancel --auth=$TRANSCEND_API_KEY --actions=ERASURE --statuses=ENRICHING
|
|
713
715
|
```
|
|
714
716
|
|
|
717
|
+
Bulk cancel requests by ID
|
|
718
|
+
|
|
719
|
+
```sh
|
|
720
|
+
yarn tr-request-cancel --auth=$TRANSCEND_API_KEY --actions=ACCESS,ERASURE,SALE_OPT_OUT,CONTACT_OPT_OUT --statuses=ENRICHING,COMPILING,APPROVING,WAITING,REQUEST_MADE,ON_HOLD,DELAYED,SECONDARY \
|
|
721
|
+
--requestIds=c3ae78c9-2768-4666-991a-d2f729503337,342e4bd1-64ea-4af0-a4ad-704b5a07cfe4
|
|
722
|
+
```
|
|
723
|
+
|
|
715
724
|
Send a specific email template to the request that are being canceled. When not provided, the default cancellation template is used ("Request Canceled").
|
|
716
725
|
|
|
717
726
|
```sh
|
|
@@ -25,7 +25,9 @@ const requests_1 = require("./requests");
|
|
|
25
25
|
*/
|
|
26
26
|
async function main() {
|
|
27
27
|
// Parse command line arguments
|
|
28
|
-
const { transcendUrl = 'https://api.transcend.io', auth, actions = '', statuses = '', silentModeBefore, cancellationTitle, concurrency = '100',
|
|
28
|
+
const { transcendUrl = 'https://api.transcend.io', auth, actions = '', statuses = '', silentModeBefore, cancellationTitle, concurrency = '100',
|
|
29
|
+
/** List of request IDs */
|
|
30
|
+
requestIds = '', } = (0, yargs_parser_1.default)(process.argv.slice(2));
|
|
29
31
|
// Ensure auth is passed
|
|
30
32
|
if (!auth) {
|
|
31
33
|
logger_1.logger.error(colors_1.default.red('A Transcend API key must be provided. You can specify using --auth=$TRANSCEND_API_KEY'));
|
|
@@ -57,6 +59,7 @@ async function main() {
|
|
|
57
59
|
requestActions: parsedActions,
|
|
58
60
|
auth,
|
|
59
61
|
cancellationTitle,
|
|
62
|
+
requestIds: requestIds ? (0, requests_1.splitCsvToList)(requestIds) : undefined,
|
|
60
63
|
statuses: parsedStatuses.length > 0 ? parsedStatuses : undefined,
|
|
61
64
|
concurrency: parseInt(concurrency, 10),
|
|
62
65
|
silentModeBefore: silentModeBefore ? new Date(silentModeBefore) : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-request-cancel.js","sourceRoot":"","sources":["../src/cli-request-cancel.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,oDAA4B;AAE5B,qCAAkC;AAClC,+DAA2E;AAC3E,yCAAmE;AAEnE;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,EACJ,YAAY,GAAG,0BAA0B,EACzC,IAAI,EACJ,OAAO,GAAG,EAAE,EACZ,QAAQ,GAAG,EAAE,EACb,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"cli-request-cancel.js","sourceRoot":"","sources":["../src/cli-request-cancel.ts"],"names":[],"mappings":";;;;;;AAEA,gEAAiC;AACjC,oDAA4B;AAE5B,qCAAkC;AAClC,+DAA2E;AAC3E,yCAAmE;AAEnE;;;;;;;;;;;;;GAaG;AACH,KAAK,UAAU,IAAI;IACjB,+BAA+B;IAC/B,MAAM,EACJ,YAAY,GAAG,0BAA0B,EACzC,IAAI,EACJ,OAAO,GAAG,EAAE,EACZ,QAAQ,GAAG,EAAE,EACb,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GAAG,KAAK;IACnB,0BAA0B;IAC1B,UAAU,GAAG,EAAE,GAChB,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,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,oBAAoB;IACpB,MAAM,cAAc,GAAG,IAAA,yBAAc,EAAC,QAAQ,CAAoB,CAAC;IACnE,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM;IAC1C,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,6BAA6B,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;YACzD,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,wBAAwB;IACxB,MAAM,IAAA,gCAAqB,EAAC;QAC1B,YAAY;QACZ,cAAc,EAAE,aAAa;QAC7B,IAAI;QACJ,iBAAiB;QACjB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,IAAA,yBAAc,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,QAAQ,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QAChE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QACtC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { RequestAction, RequestStatus } from '@transcend-io/privacy-types';
|
|
|
5
5
|
* @param options - Options
|
|
6
6
|
* @returns The number of requests canceled
|
|
7
7
|
*/
|
|
8
|
-
export declare function cancelPrivacyRequests({ requestActions, cancellationTitle, auth, silentModeBefore, statuses, concurrency, transcendUrl, }: {
|
|
8
|
+
export declare function cancelPrivacyRequests({ requestActions, cancellationTitle, auth, requestIds, silentModeBefore, statuses, concurrency, transcendUrl, }: {
|
|
9
9
|
/** The request actions that should be restarted */
|
|
10
10
|
requestActions: RequestAction[];
|
|
11
11
|
/** Transcend API key authentication */
|
|
@@ -14,6 +14,8 @@ export declare function cancelPrivacyRequests({ requestActions, cancellationTitl
|
|
|
14
14
|
concurrency?: number;
|
|
15
15
|
/** The request statuses to cancel */
|
|
16
16
|
statuses?: RequestStatus[];
|
|
17
|
+
/** The set of privacy requests to cancel */
|
|
18
|
+
requestIds?: string[];
|
|
17
19
|
/** Mark these requests as silent mode if they were created before this date */
|
|
18
20
|
silentModeBefore?: Date;
|
|
19
21
|
/** API URL for Transcend backend */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancelPrivacyRequests.d.ts","sourceRoot":"","sources":["../../src/requests/cancelPrivacyRequests.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAY3E;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,cAAc,EACd,iBAAiB,EACjB,IAAI,EACJ,gBAAgB,EAChB,QASC,EACD,WAAiB,EACjB,YAAyC,GAC1C,EAAE;IACD,mDAAmD;IACnD,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cancelPrivacyRequests.d.ts","sourceRoot":"","sources":["../../src/requests/cancelPrivacyRequests.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAY3E;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,cAAc,EACd,iBAAiB,EACjB,IAAI,EACJ,UAAU,EACV,gBAAgB,EAChB,QASC,EACD,WAAiB,EACjB,YAAyC,GAC1C,EAAE;IACD,mDAAmD;IACnD,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAAC,MAAM,CAAC,CAwGlB"}
|
|
@@ -16,7 +16,7 @@ const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
|
16
16
|
* @param options - Options
|
|
17
17
|
* @returns The number of requests canceled
|
|
18
18
|
*/
|
|
19
|
-
async function cancelPrivacyRequests({ requestActions, cancellationTitle, auth, silentModeBefore, statuses = [
|
|
19
|
+
async function cancelPrivacyRequests({ requestActions, cancellationTitle, auth, requestIds, silentModeBefore, statuses = [
|
|
20
20
|
privacy_types_1.RequestStatus.Compiling,
|
|
21
21
|
privacy_types_1.RequestStatus.RequestMade,
|
|
22
22
|
privacy_types_1.RequestStatus.Delayed,
|
|
@@ -43,10 +43,14 @@ async function cancelPrivacyRequests({ requestActions, cancellationTitle, auth,
|
|
|
43
43
|
cancelationTemplate = exactTitleMatch;
|
|
44
44
|
}
|
|
45
45
|
// Pull in the requests
|
|
46
|
-
|
|
46
|
+
let allRequests = await (0, graphql_1.fetchAllRequests)(client, {
|
|
47
47
|
actions: requestActions,
|
|
48
48
|
statuses,
|
|
49
49
|
});
|
|
50
|
+
// Filter down requests by request ID
|
|
51
|
+
if (requestIds && requestIds.length > 0) {
|
|
52
|
+
allRequests = allRequests.filter((request) => requestIds.includes(request.id));
|
|
53
|
+
}
|
|
50
54
|
// Notify Transcend
|
|
51
55
|
logger_1.logger.info(colors_1.default.magenta(`Canceling "${allRequests.length}" requests${cancelationTemplate
|
|
52
56
|
? ` Using template: ${cancelationTemplate.title}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancelPrivacyRequests.js","sourceRoot":"","sources":["../../src/requests/cancelPrivacyRequests.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA+B;AAC/B,oDAA4B;AAC5B,sCAAmC;AACnC,+DAA2E;AAC3E,wCAQoB;AACpB,gEAAuC;AAEvC;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CAAC,EAC1C,cAAc,EACd,iBAAiB,EACjB,IAAI,EACJ,gBAAgB,EAChB,QAAQ,GAAG;IACT,6BAAa,CAAC,SAAS;IACvB,6BAAa,CAAC,WAAW;IACzB,6BAAa,CAAC,OAAO;IACrB,6BAAa,CAAC,SAAS;IACvB,6BAAa,CAAC,SAAS;IACvB,6BAAa,CAAC,SAAS;IACvB,6BAAa,CAAC,OAAO;IACrB,6BAAa,CAAC,kBAAkB;CACjC,EACD,WAAW,GAAG,GAAG,EACjB,YAAY,GAAG,0BAA0B,
|
|
1
|
+
{"version":3,"file":"cancelPrivacyRequests.js","sourceRoot":"","sources":["../../src/requests/cancelPrivacyRequests.ts"],"names":[],"mappings":"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"}
|