@transcend-io/cli 4.12.0 → 4.13.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 +137 -14
- package/build/cli-request-upload.d.ts +3 -0
- package/build/cli-request-upload.d.ts.map +1 -0
- package/build/cli-request-upload.js +57 -0
- package/build/cli-request-upload.js.map +1 -0
- package/build/graphql/fetchAllAttributeKeys.d.ts +15 -0
- package/build/graphql/fetchAllAttributeKeys.d.ts.map +1 -0
- package/build/graphql/fetchAllAttributeKeys.js +32 -0
- package/build/graphql/fetchAllAttributeKeys.js.map +1 -0
- package/build/graphql/gqls/attributeKey.d.ts +2 -0
- package/build/graphql/gqls/attributeKey.d.ts.map +1 -0
- package/build/graphql/gqls/attributeKey.js +19 -0
- package/build/graphql/gqls/attributeKey.js.map +1 -0
- package/build/graphql/gqls/enricher.d.ts +10 -0
- package/build/graphql/gqls/enricher.d.ts.map +1 -1
- package/build/graphql/gqls/enricher.js +11 -1
- package/build/graphql/gqls/enricher.js.map +1 -1
- package/build/graphql/gqls/index.d.ts +1 -0
- package/build/graphql/gqls/index.d.ts.map +1 -1
- package/build/graphql/gqls/index.js +1 -0
- package/build/graphql/gqls/index.js.map +1 -1
- package/build/graphql/index.d.ts +1 -0
- package/build/graphql/index.d.ts.map +1 -1
- package/build/graphql/index.js +1 -0
- package/build/graphql/index.js.map +1 -1
- package/build/requests/constants.d.ts +32 -5
- package/build/requests/constants.d.ts.map +1 -1
- package/build/requests/constants.js +21 -3
- package/build/requests/constants.js.map +1 -1
- package/build/requests/fuzzyMatchColumns.d.ts +3 -2
- package/build/requests/fuzzyMatchColumns.d.ts.map +1 -1
- package/build/requests/fuzzyMatchColumns.js +4 -2
- package/build/requests/fuzzyMatchColumns.js.map +1 -1
- package/build/requests/index.d.ts +3 -0
- package/build/requests/index.d.ts.map +1 -1
- package/build/requests/index.js +3 -0
- package/build/requests/index.js.map +1 -1
- package/build/requests/mapColumnsToAttributes.d.ts +20 -0
- package/build/requests/mapColumnsToAttributes.d.ts.map +1 -0
- package/build/requests/mapColumnsToAttributes.js +46 -0
- package/build/requests/mapColumnsToAttributes.js.map +1 -0
- package/build/requests/mapColumnsToIdentifiers.d.ts +20 -0
- package/build/requests/mapColumnsToIdentifiers.d.ts.map +1 -0
- package/build/requests/mapColumnsToIdentifiers.js +48 -0
- package/build/requests/mapColumnsToIdentifiers.js.map +1 -0
- package/build/requests/mapCsvColumnsToApi.d.ts.map +1 -1
- package/build/requests/mapCsvColumnsToApi.js +1 -1
- package/build/requests/mapCsvColumnsToApi.js.map +1 -1
- package/build/requests/mapCsvRowsToRequestInputs.d.ts +25 -7
- package/build/requests/mapCsvRowsToRequestInputs.d.ts.map +1 -1
- package/build/requests/mapCsvRowsToRequestInputs.js +108 -38
- package/build/requests/mapCsvRowsToRequestInputs.js.map +1 -1
- package/build/requests/submitPrivacyRequest.d.ts +6 -4
- package/build/requests/submitPrivacyRequest.d.ts.map +1 -1
- package/build/requests/submitPrivacyRequest.js +22 -5
- package/build/requests/submitPrivacyRequest.js.map +1 -1
- package/build/requests/uploadPrivacyRequestsFromCsv.d.ts +32 -0
- package/build/requests/uploadPrivacyRequestsFromCsv.d.ts.map +1 -0
- package/build/requests/uploadPrivacyRequestsFromCsv.js +139 -0
- package/build/requests/uploadPrivacyRequestsFromCsv.js.map +1 -0
- package/build/tsbuildinfo +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/requests/constants.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA+D;AAC/D,6EAAiE;AACjE,+DAGqC;AACrC,yCAA2B;AAEd,QAAA,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/requests/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,9 @@ export declare function fuzzySearch(word1: string, word2: string): boolean;
|
|
|
13
13
|
*
|
|
14
14
|
* @param allColumnNames - List of all column names
|
|
15
15
|
* @param fuzzyMapName - The name of field being mapped to
|
|
16
|
-
* @param isRequired - When
|
|
16
|
+
* @param isRequired - When true, don't include "NONE" as an option
|
|
17
|
+
* @param canApplyAll - When true, include an option to specify the value in bulk
|
|
17
18
|
* @returns The list of suggestions for inquirer
|
|
18
19
|
*/
|
|
19
|
-
export declare function fuzzyMatchColumns(allColumnNames: string[], fuzzyMapName: string, isRequired: boolean): (string | InstanceType<typeof inquirer.Separator>)[];
|
|
20
|
+
export declare function fuzzyMatchColumns(allColumnNames: string[], fuzzyMapName: string, isRequired: boolean, canApplyAll?: boolean): (string | InstanceType<typeof inquirer.Separator>)[];
|
|
20
21
|
//# sourceMappingURL=fuzzyMatchColumns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzyMatchColumns.d.ts","sourceRoot":"","sources":["../../src/requests/fuzzyMatchColumns.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAKhC;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED
|
|
1
|
+
{"version":3,"file":"fuzzyMatchColumns.d.ts","sourceRoot":"","sources":["../../src/requests/fuzzyMatchColumns.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAKhC;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAKjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,EACnB,WAAW,CAAC,EAAE,OAAO,GACpB,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAWtD"}
|
|
@@ -25,15 +25,17 @@ exports.fuzzySearch = fuzzySearch;
|
|
|
25
25
|
*
|
|
26
26
|
* @param allColumnNames - List of all column names
|
|
27
27
|
* @param fuzzyMapName - The name of field being mapped to
|
|
28
|
-
* @param isRequired - When
|
|
28
|
+
* @param isRequired - When true, don't include "NONE" as an option
|
|
29
|
+
* @param canApplyAll - When true, include an option to specify the value in bulk
|
|
29
30
|
* @returns The list of suggestions for inquirer
|
|
30
31
|
*/
|
|
31
|
-
function fuzzyMatchColumns(allColumnNames, fuzzyMapName, isRequired) {
|
|
32
|
+
function fuzzyMatchColumns(allColumnNames, fuzzyMapName, isRequired, canApplyAll) {
|
|
32
33
|
const matchingColumnNames = allColumnNames.filter((x) => fuzzySearch(fuzzyMapName.toLowerCase(), x.toLowerCase()));
|
|
33
34
|
return [
|
|
34
35
|
...matchingColumnNames,
|
|
35
36
|
new inquirer_1.default.Separator(),
|
|
36
37
|
...(isRequired ? [] : [constants_1.NONE]),
|
|
38
|
+
...(canApplyAll ? [constants_1.BULK_APPLY] : []),
|
|
37
39
|
...allColumnNames.filter((x) => !matchingColumnNames.includes(x)),
|
|
38
40
|
];
|
|
39
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzyMatchColumns.js","sourceRoot":"","sources":["../../src/requests/fuzzyMatchColumns.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"fuzzyMatchColumns.js","sourceRoot":"","sources":["../../src/requests/fuzzyMatchColumns.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,2CAA+C;AAE/C,8DAAsC;AAEtC;;;;;;;GAOG;AACH,SAAgB,WAAW,CAAC,KAAa,EAAE,KAAa;IACtD,OAAO,CACL,IAAA,qBAAW,EAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACrD,IAAA,qBAAW,EAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CACtD,CAAC;AACJ,CAAC;AALD,kCAKC;AAED;;;;;;;;GAQG;AACH,SAAgB,iBAAiB,CAC/B,cAAwB,EACxB,YAAoB,EACpB,UAAmB,EACnB,WAAqB;IAErB,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CACzD,CAAC;IACF,OAAO;QACL,GAAG,mBAAmB;QACtB,IAAI,kBAAQ,CAAC,SAAS,EAAE;QACxB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,sBAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC;AAhBD,8CAgBC"}
|
|
@@ -10,4 +10,7 @@ export * from './mapCsvColumnsToApi';
|
|
|
10
10
|
export * from './mapRequestEnumValues';
|
|
11
11
|
export * from './mapCsvRowsToRequestInputs';
|
|
12
12
|
export * from './submitPrivacyRequest';
|
|
13
|
+
export * from './mapColumnsToIdentifiers';
|
|
14
|
+
export * from './mapColumnsToAttributes';
|
|
15
|
+
export * from './uploadPrivacyRequestsFromCsv';
|
|
13
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/requests/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/requests/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC"}
|
package/build/requests/index.js
CHANGED
|
@@ -22,4 +22,7 @@ __exportStar(require("./mapCsvColumnsToApi"), exports);
|
|
|
22
22
|
__exportStar(require("./mapRequestEnumValues"), exports);
|
|
23
23
|
__exportStar(require("./mapCsvRowsToRequestInputs"), exports);
|
|
24
24
|
__exportStar(require("./submitPrivacyRequest"), exports);
|
|
25
|
+
__exportStar(require("./mapColumnsToIdentifiers"), exports);
|
|
26
|
+
__exportStar(require("./mapColumnsToAttributes"), exports);
|
|
27
|
+
__exportStar(require("./uploadPrivacyRequestsFromCsv"), exports);
|
|
25
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/requests/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,8CAA4B;AAC5B,kDAAgC;AAChC,mDAAiC;AACjC,8DAA4C;AAC5C,4CAA0B;AAC1B,6DAA2C;AAC3C,+CAA6B;AAC7B,uDAAqC;AACrC,yDAAuC;AACvC,8DAA4C;AAC5C,yDAAuC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/requests/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,8CAA4B;AAC5B,kDAAgC;AAChC,mDAAiC;AACjC,8DAA4C;AAC5C,4CAA0B;AAC1B,6DAA2C;AAC3C,+CAA6B;AAC7B,uDAAqC;AACrC,yDAAuC;AACvC,8DAA4C;AAC5C,yDAAuC;AACvC,4DAA0C;AAC1C,2DAAyC;AACzC,iEAA+C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import { CachedFileState } from './constants';
|
|
3
|
+
/**
|
|
4
|
+
* Mapping from attribute name to request input parameter
|
|
5
|
+
*/
|
|
6
|
+
export declare type AttributeNameMap = {
|
|
7
|
+
[k in string]: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Create a mapping from the attributes names that can be included
|
|
11
|
+
* at request submission, to the names of the columns that map to those
|
|
12
|
+
* attributes.
|
|
13
|
+
*
|
|
14
|
+
* @param client - GraphQL client
|
|
15
|
+
* @param columnNames - The set of all column names
|
|
16
|
+
* @param cached - Cached state of this mapping
|
|
17
|
+
* @returns Mapping from attributes name to column name
|
|
18
|
+
*/
|
|
19
|
+
export declare function mapColumnsToAttributes(client: GraphQLClient, columnNames: string[], cached: CachedFileState): Promise<AttributeNameMap>;
|
|
20
|
+
//# sourceMappingURL=mapColumnsToAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapColumnsToAttributes.d.ts","sourceRoot":"","sources":["../../src/requests/mapColumnsToAttributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;GAEG;AACH,oBAAY,gBAAgB,GAAG;KAC5B,CAAC,IAAI,MAAM,GAAG,MAAM;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAoC3B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.mapColumnsToAttributes = void 0;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const graphql_1 = require("../graphql");
|
|
9
|
+
const fuzzyMatchColumns_1 = require("./fuzzyMatchColumns");
|
|
10
|
+
/**
|
|
11
|
+
* Create a mapping from the attributes names that can be included
|
|
12
|
+
* at request submission, to the names of the columns that map to those
|
|
13
|
+
* attributes.
|
|
14
|
+
*
|
|
15
|
+
* @param client - GraphQL client
|
|
16
|
+
* @param columnNames - The set of all column names
|
|
17
|
+
* @param cached - Cached state of this mapping
|
|
18
|
+
* @returns Mapping from attributes name to column name
|
|
19
|
+
*/
|
|
20
|
+
async function mapColumnsToAttributes(client, columnNames, cached) {
|
|
21
|
+
// Grab the initializer
|
|
22
|
+
const requestAttributeKeys = await (0, graphql_1.fetchAllRequestAttributeKeys)(client);
|
|
23
|
+
// Determine the columns that should be mapped
|
|
24
|
+
const columnQuestions = requestAttributeKeys.filter(({ name }) => !cached.attributeNames[name]);
|
|
25
|
+
// Skip mapping when everything is mapped
|
|
26
|
+
const attributeNameMap = columnQuestions.length === 0
|
|
27
|
+
? {}
|
|
28
|
+
: // prompt questions to map columns
|
|
29
|
+
await inquirer_1.default.prompt(columnQuestions.map(({ name }) => {
|
|
30
|
+
const matches = (0, fuzzyMatchColumns_1.fuzzyMatchColumns)(columnNames, name, false);
|
|
31
|
+
return {
|
|
32
|
+
name,
|
|
33
|
+
message: `Choose the column that will be used to map in the attribute: ${name}`,
|
|
34
|
+
type: 'list',
|
|
35
|
+
default: matches[0],
|
|
36
|
+
choices: matches,
|
|
37
|
+
};
|
|
38
|
+
}));
|
|
39
|
+
Object.entries(attributeNameMap).forEach(([k, v]) => {
|
|
40
|
+
// eslint-disable-next-line no-param-reassign
|
|
41
|
+
cached.attributeNames[k] = v;
|
|
42
|
+
});
|
|
43
|
+
return attributeNameMap;
|
|
44
|
+
}
|
|
45
|
+
exports.mapColumnsToAttributes = mapColumnsToAttributes;
|
|
46
|
+
//# sourceMappingURL=mapColumnsToAttributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapColumnsToAttributes.js","sourceRoot":"","sources":["../../src/requests/mapColumnsToAttributes.ts"],"names":[],"mappings":";;;;;;AACA,wDAAgC;AAChC,wCAA0D;AAE1D,2DAAwD;AASxD;;;;;;;;;GASG;AACI,KAAK,UAAU,sBAAsB,CAC1C,MAAqB,EACrB,WAAqB,EACrB,MAAuB;IAEvB,uBAAuB;IACvB,MAAM,oBAAoB,GAAG,MAAM,IAAA,sCAA4B,EAAC,MAAM,CAAC,CAAC;IAExE,8CAA8C;IAC9C,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CACjD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAC3C,CAAC;IAEF,yCAAyC;IACzC,MAAM,gBAAgB,GACpB,eAAe,CAAC,MAAM,KAAK,CAAC;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kCAAkC;YAClC,MAAM,kBAAQ,CAAC,MAAM,CAKnB,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC/B,MAAM,OAAO,GAAG,IAAA,qCAAiB,EAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC5D,OAAO;oBACL,IAAI;oBACJ,OAAO,EAAE,gEAAgE,IAAI,EAAE;oBAC/E,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;oBACnB,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;IACR,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAClD,6CAA6C;QAC7C,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAxCD,wDAwCC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import { CachedFileState } from './constants';
|
|
3
|
+
/**
|
|
4
|
+
* Mapping from identifier name to request input parameter
|
|
5
|
+
*/
|
|
6
|
+
export declare type IdentifierNameMap = {
|
|
7
|
+
[k in string]: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Create a mapping from the identifier names that can be included
|
|
11
|
+
* at request submission, to the names of the columns that map to those
|
|
12
|
+
* identifiers.
|
|
13
|
+
*
|
|
14
|
+
* @param client - GraphQL client
|
|
15
|
+
* @param columnNames - The set of all column names
|
|
16
|
+
* @param cached - Cached state of this mapping
|
|
17
|
+
* @returns Mapping from identifier name to column name
|
|
18
|
+
*/
|
|
19
|
+
export declare function mapColumnsToIdentifiers(client: GraphQLClient, columnNames: string[], cached: CachedFileState): Promise<IdentifierNameMap>;
|
|
20
|
+
//# sourceMappingURL=mapColumnsToIdentifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapColumnsToIdentifiers.d.ts","sourceRoot":"","sources":["../../src/requests/mapColumnsToIdentifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;GAEG;AACH,oBAAY,iBAAiB,GAAG;KAC7B,CAAC,IAAI,MAAM,GAAG,MAAM;CACtB,CAAC;AAKF;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAwC5B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.mapColumnsToIdentifiers = void 0;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const graphql_1 = require("../graphql");
|
|
9
|
+
const fuzzyMatchColumns_1 = require("./fuzzyMatchColumns");
|
|
10
|
+
/** These are uploaded at the top level of the request */
|
|
11
|
+
const IDENTIFIER_BLOCK_LIST = ['email', 'coreIdentifier'];
|
|
12
|
+
/**
|
|
13
|
+
* Create a mapping from the identifier names that can be included
|
|
14
|
+
* at request submission, to the names of the columns that map to those
|
|
15
|
+
* identifiers.
|
|
16
|
+
*
|
|
17
|
+
* @param client - GraphQL client
|
|
18
|
+
* @param columnNames - The set of all column names
|
|
19
|
+
* @param cached - Cached state of this mapping
|
|
20
|
+
* @returns Mapping from identifier name to column name
|
|
21
|
+
*/
|
|
22
|
+
async function mapColumnsToIdentifiers(client, columnNames, cached) {
|
|
23
|
+
// Grab the initializer
|
|
24
|
+
const { initializer } = await (0, graphql_1.makeGraphQLRequest)(client, graphql_1.INITIALIZER);
|
|
25
|
+
// Determine the columns that should be mapped
|
|
26
|
+
const columnQuestions = initializer.identifiers.filter(({ name }) => !cached.identifierNames[name] && !IDENTIFIER_BLOCK_LIST.includes(name));
|
|
27
|
+
// Skip mapping when everything is mapped
|
|
28
|
+
const identifierNameMap = columnQuestions.length === 0
|
|
29
|
+
? {}
|
|
30
|
+
: // prompt questions to map columns
|
|
31
|
+
await inquirer_1.default.prompt(columnQuestions.map(({ name }) => {
|
|
32
|
+
const matches = (0, fuzzyMatchColumns_1.fuzzyMatchColumns)(columnNames, name, false);
|
|
33
|
+
return {
|
|
34
|
+
name,
|
|
35
|
+
message: `Choose the column that will be used to map in the identifier: ${name}`,
|
|
36
|
+
type: 'list',
|
|
37
|
+
default: matches[0],
|
|
38
|
+
choices: matches,
|
|
39
|
+
};
|
|
40
|
+
}));
|
|
41
|
+
Object.entries(identifierNameMap).forEach(([k, v]) => {
|
|
42
|
+
// eslint-disable-next-line no-param-reassign
|
|
43
|
+
cached.identifierNames[k] = v;
|
|
44
|
+
});
|
|
45
|
+
return identifierNameMap;
|
|
46
|
+
}
|
|
47
|
+
exports.mapColumnsToIdentifiers = mapColumnsToIdentifiers;
|
|
48
|
+
//# sourceMappingURL=mapColumnsToIdentifiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapColumnsToIdentifiers.js","sourceRoot":"","sources":["../../src/requests/mapColumnsToIdentifiers.ts"],"names":[],"mappings":";;;;;;AACA,wDAAgC;AAChC,wCAA0E;AAE1E,2DAAwD;AASxD,yDAAyD;AACzD,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;;;GASG;AACI,KAAK,UAAU,uBAAuB,CAC3C,MAAqB,EACrB,WAAqB,EACrB,MAAuB;IAEvB,uBAAuB;IACvB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,4BAAkB,EAG7C,MAAM,EAAE,qBAAW,CAAC,CAAC;IAExB,8CAA8C;IAC9C,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CACpD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACX,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CACzE,CAAC;IAEF,yCAAyC;IACzC,MAAM,iBAAiB,GACrB,eAAe,CAAC,MAAM,KAAK,CAAC;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kCAAkC;YAClC,MAAM,kBAAQ,CAAC,MAAM,CAKnB,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC/B,MAAM,OAAO,GAAG,IAAA,qCAAiB,EAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC5D,OAAO;oBACL,IAAI;oBACJ,OAAO,EAAE,iEAAiE,IAAI,EAAE;oBAChF,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;oBACnB,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;IACR,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACnD,6CAA6C;QAC7C,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AA5CD,0DA4CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapCsvColumnsToApi.d.ts","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"mapCsvColumnsToApi.d.ts","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,oBAAY,aAAa,GAAG;KACzB,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,MAAM;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,aAAa,CAAC,CAuCxB"}
|
|
@@ -25,7 +25,7 @@ async function mapCsvColumnsToApi(columnNames, cached) {
|
|
|
25
25
|
: // prompt questions to map columns
|
|
26
26
|
await inquirer_1.default.prompt(columnQuestions.map((name) => {
|
|
27
27
|
const field = (0, startCase_1.default)(name.replace('ColumnName', ''));
|
|
28
|
-
const matches = (0, fuzzyMatchColumns_1.fuzzyMatchColumns)(columnNames, field, constants_1.IS_REQUIRED[name]);
|
|
28
|
+
const matches = (0, fuzzyMatchColumns_1.fuzzyMatchColumns)(columnNames, field, constants_1.IS_REQUIRED[name], !!constants_1.CAN_APPLY_IN_BULK[name]);
|
|
29
29
|
return {
|
|
30
30
|
name,
|
|
31
31
|
message: `Choose the column that will be used to map in the field: ${field}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapCsvColumnsToApi.js","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiE;AACjE,wDAAgC;AAChC,iEAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"mapCsvColumnsToApi.js","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiE;AACjE,wDAAgC;AAChC,iEAAyC;AACzC,2CAKqB;AACrB,2DAAwD;AASxD;;;;;;GAMG;AACI,KAAK,UAAU,kBAAkB,CACtC,WAAqB,EACrB,MAAuB;IAEvB,8CAA8C;IAC9C,MAAM,eAAe,GAAG,IAAA,sBAAS,EAAC,sBAAU,CAAC,CAAC,MAAM,CAClD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CACpC,CAAC;IAEF,yCAAyC;IACzC,MAAM,aAAa,GACjB,eAAe,CAAC,MAAM,KAAK,CAAC;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,kCAAkC;YAClC,MAAM,kBAAQ,CAAC,MAAM,CAKnB,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,MAAM,KAAK,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,IAAA,qCAAiB,EAC/B,WAAW,EACX,KAAK,EACL,uBAAW,CAAC,IAAI,CAAC,EACjB,CAAC,CAAC,6BAAiB,CAAC,IAAI,CAAC,CAC1B,CAAC;gBACF,OAAO;oBACL,IAAI;oBACJ,OAAO,EAAE,4DAA4D,KAAK,EAAE;oBAC5E,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;oBACnB,OAAO,EAAE,OAAO;iBACjB,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;IAER,IAAA,uBAAU,EAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3C,6CAA6C;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,OAAO,aAAa,CAAC;AACvB,CAAC;AA1CD,gDA0CC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { LanguageKey } from '@transcend-io/internationalization';
|
|
2
|
-
import { ObjByString } from '@transcend-io/type-utils';
|
|
3
2
|
import { CompletedRequestStatus, RequestAction, IdentifierType } from '@transcend-io/privacy-types';
|
|
3
|
+
import { ObjByString } from '@transcend-io/type-utils';
|
|
4
4
|
import { CachedFileState } from './constants';
|
|
5
5
|
import { ColumnNameMap } from './mapCsvColumnsToApi';
|
|
6
|
+
import type { AttributeInput } from './parseAttributesFromString';
|
|
7
|
+
import { AttributeNameMap } from './mapColumnsToAttributes';
|
|
8
|
+
import { IdentifierNameMap } from './mapColumnsToIdentifiers';
|
|
6
9
|
/**
|
|
7
10
|
* Shape of additional identifiers
|
|
8
11
|
*/
|
|
@@ -17,25 +20,33 @@ export declare type AttestedExtraIdentifiers = {
|
|
|
17
20
|
export interface PrivacyRequestInput {
|
|
18
21
|
/** Email of user */
|
|
19
22
|
email: string;
|
|
20
|
-
/**
|
|
21
|
-
|
|
23
|
+
/** Extra identifiers */
|
|
24
|
+
attestedExtraIdentifiers: AttestedExtraIdentifiers;
|
|
22
25
|
/** Core identifier for user */
|
|
23
26
|
coreIdentifier: string;
|
|
24
27
|
/** Action type being submitted */
|
|
25
28
|
requestType: RequestAction;
|
|
26
29
|
/** Type of data subject */
|
|
27
30
|
subjectType: string;
|
|
31
|
+
/** Attribute inputs */
|
|
32
|
+
attributes?: AttributeInput[];
|
|
28
33
|
/** The status that the request should be created as */
|
|
29
34
|
status?: CompletedRequestStatus;
|
|
30
35
|
/** The time that the request was created */
|
|
31
36
|
createdAt?: Date;
|
|
32
|
-
/** Whether in silent mode */
|
|
33
|
-
isSilent: boolean;
|
|
34
37
|
/** Data silo IDs to submit for */
|
|
35
38
|
dataSiloIds?: string[];
|
|
36
39
|
/** Language key to map to */
|
|
37
40
|
locale?: LanguageKey;
|
|
38
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Transform the identifier value based on type
|
|
44
|
+
*
|
|
45
|
+
* @param identifierValue - Value of identifier
|
|
46
|
+
* @param identifierType - Type of identifier
|
|
47
|
+
* @returns Post-processed identifier
|
|
48
|
+
*/
|
|
49
|
+
export declare function normalizeIdentifierValue(identifierValue: string, identifierType: IdentifierType): string;
|
|
39
50
|
/**
|
|
40
51
|
* Take the raw rows in a CSV upload, and map those rows to the request
|
|
41
52
|
* input shape that can be passed to the Transcend API to submit a privacy
|
|
@@ -43,8 +54,15 @@ export interface PrivacyRequestInput {
|
|
|
43
54
|
*
|
|
44
55
|
* @param requestInputs - CSV of requests to be uploaded
|
|
45
56
|
* @param cached - The cached set of mapping values
|
|
46
|
-
* @param
|
|
57
|
+
* @param options - Options
|
|
47
58
|
* @returns [raw input, request input] list
|
|
48
59
|
*/
|
|
49
|
-
export declare function mapCsvRowsToRequestInputs(requestInputs: ObjByString[], cached: CachedFileState, columnNameMap
|
|
60
|
+
export declare function mapCsvRowsToRequestInputs(requestInputs: ObjByString[], cached: CachedFileState, { columnNameMap, identifierNameMap, attributeNameMap, }: {
|
|
61
|
+
/** Mapping of column names */
|
|
62
|
+
columnNameMap: ColumnNameMap;
|
|
63
|
+
/** Mapping of identifier names */
|
|
64
|
+
identifierNameMap: IdentifierNameMap;
|
|
65
|
+
/** Mapping of attribute names */
|
|
66
|
+
attributeNameMap: AttributeNameMap;
|
|
67
|
+
}): [Record<string, string>, PrivacyRequestInput][];
|
|
50
68
|
//# sourceMappingURL=mapCsvRowsToRequestInputs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapCsvRowsToRequestInputs.d.ts","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"mapCsvRowsToRequestInputs.d.ts","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAEL,sBAAsB,EACtB,aAAa,EACb,cAAc,EACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EACL,eAAe,EAKhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,oBAAY,wBAAwB,GAAG;KACpC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE;QACtB,yBAAyB;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,0BAA0B;QAC1B,KAAK,EAAE,MAAM,CAAC;KACf,EAAE;CACJ,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,WAAW,EAAE,aAAa,CAAC;IAC3B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,uDAAuD;IACvD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,cAAc,GAC7B,MAAM,CAaR;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,WAAW,EAAE,EAC5B,MAAM,EAAE,eAAe,EACvB,EACE,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,EAAE;IACD,8BAA8B;IAC9B,aAAa,EAAE,aAAa,CAAC;IAC7B,kCAAkC;IAClC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iCAAiC;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,GACA,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,EAAE,CA2GjD"}
|
|
@@ -1,8 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mapCsvRowsToRequestInputs = void 0;
|
|
3
|
+
exports.mapCsvRowsToRequestInputs = exports.normalizeIdentifierValue = void 0;
|
|
4
|
+
const privacy_types_1 = require("@transcend-io/privacy-types");
|
|
4
5
|
const constants_1 = require("./constants");
|
|
5
6
|
const splitCsvToList_1 = require("./splitCsvToList");
|
|
7
|
+
/**
|
|
8
|
+
* Transform the identifier value based on type
|
|
9
|
+
*
|
|
10
|
+
* @param identifierValue - Value of identifier
|
|
11
|
+
* @param identifierType - Type of identifier
|
|
12
|
+
* @returns Post-processed identifier
|
|
13
|
+
*/
|
|
14
|
+
function normalizeIdentifierValue(identifierValue, identifierType) {
|
|
15
|
+
// Lowercase email
|
|
16
|
+
if (identifierType === privacy_types_1.IdentifierType.Email) {
|
|
17
|
+
return identifierValue.toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
// Normalize phone number
|
|
20
|
+
if (identifierType === privacy_types_1.IdentifierType.Phone) {
|
|
21
|
+
return identifierValue
|
|
22
|
+
.replace(privacy_types_1.NORMALIZE_PHONE_NUMBER, '')
|
|
23
|
+
.replace(/[A-Za-z]/g, '');
|
|
24
|
+
}
|
|
25
|
+
return identifierValue;
|
|
26
|
+
}
|
|
27
|
+
exports.normalizeIdentifierValue = normalizeIdentifierValue;
|
|
6
28
|
/**
|
|
7
29
|
* Take the raw rows in a CSV upload, and map those rows to the request
|
|
8
30
|
* input shape that can be passed to the Transcend API to submit a privacy
|
|
@@ -10,48 +32,96 @@ const splitCsvToList_1 = require("./splitCsvToList");
|
|
|
10
32
|
*
|
|
11
33
|
* @param requestInputs - CSV of requests to be uploaded
|
|
12
34
|
* @param cached - The cached set of mapping values
|
|
13
|
-
* @param
|
|
35
|
+
* @param options - Options
|
|
14
36
|
* @returns [raw input, request input] list
|
|
15
37
|
*/
|
|
16
|
-
function mapCsvRowsToRequestInputs(requestInputs, cached, columnNameMap) {
|
|
38
|
+
function mapCsvRowsToRequestInputs(requestInputs, cached, { columnNameMap, identifierNameMap, attributeNameMap, }) {
|
|
17
39
|
// map the CSV to request input
|
|
18
40
|
const getMappedName = (attribute) => cached.columnNames[attribute] || columnNameMap[attribute];
|
|
19
|
-
return requestInputs.map((input) =>
|
|
20
|
-
|
|
21
|
-
{
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
input[getMappedName(constants_1.ColumnName.RequestStatus)]
|
|
37
|
-
? {
|
|
38
|
-
status: cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]],
|
|
39
|
-
}
|
|
40
|
-
: {}),
|
|
41
|
-
...(getMappedName(constants_1.ColumnName.CreatedAt) !== constants_1.NONE &&
|
|
42
|
-
input[getMappedName(constants_1.ColumnName.CreatedAt)]
|
|
43
|
-
? {
|
|
44
|
-
createdAt: new Date(input[getMappedName(constants_1.ColumnName.CreatedAt)]),
|
|
45
|
-
}
|
|
46
|
-
: {}),
|
|
47
|
-
...(getMappedName(constants_1.ColumnName.DataSiloIds) !== constants_1.NONE &&
|
|
48
|
-
input[getMappedName(constants_1.ColumnName.DataSiloIds)]
|
|
49
|
-
? {
|
|
50
|
-
dataSiloIds: (0, splitCsvToList_1.splitCsvToList)(input[getMappedName(constants_1.ColumnName.DataSiloIds)]),
|
|
41
|
+
return requestInputs.map((input) => {
|
|
42
|
+
// The extra identifiers to upload for this request
|
|
43
|
+
const attestedExtraIdentifiers = {};
|
|
44
|
+
Object.entries(identifierNameMap)
|
|
45
|
+
// filter out skipped identifiers
|
|
46
|
+
.filter(([, columnName]) => columnName !== constants_1.NONE)
|
|
47
|
+
.forEach(([identifierName, columnName]) => {
|
|
48
|
+
// Determine the identifier type being specified
|
|
49
|
+
const identifierType = Object.values(privacy_types_1.IdentifierType).includes(identifierName)
|
|
50
|
+
? identifierName
|
|
51
|
+
: privacy_types_1.IdentifierType.Custom;
|
|
52
|
+
// Only add the identifier if the value exists
|
|
53
|
+
const identifierValue = input[columnName];
|
|
54
|
+
if (identifierValue) {
|
|
55
|
+
// Initialize
|
|
56
|
+
if (!attestedExtraIdentifiers[identifierType]) {
|
|
57
|
+
attestedExtraIdentifiers[identifierType] = [];
|
|
51
58
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
59
|
+
// Add the identifier
|
|
60
|
+
attestedExtraIdentifiers[identifierType].push({
|
|
61
|
+
value: normalizeIdentifierValue(identifierValue, identifierType),
|
|
62
|
+
name: identifierName,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// The extra attributes to upload for this request
|
|
67
|
+
const attributes = [];
|
|
68
|
+
Object.entries(attributeNameMap)
|
|
69
|
+
// filter out skipped attributes
|
|
70
|
+
.filter(([, columnName]) => columnName !== constants_1.NONE)
|
|
71
|
+
.forEach(([attributeName, columnName]) => {
|
|
72
|
+
// Only add the identifier if the value exists
|
|
73
|
+
const attributeValueString = input[columnName];
|
|
74
|
+
if (attributeValueString) {
|
|
75
|
+
// Add the attribute
|
|
76
|
+
attributes.push({
|
|
77
|
+
values: (0, splitCsvToList_1.splitCsvToList)(attributeValueString),
|
|
78
|
+
key: attributeName,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const requestTypeColumn = getMappedName(constants_1.ColumnName.RequestType);
|
|
83
|
+
const dataSubjectTypeColumn = getMappedName(constants_1.ColumnName.SubjectType);
|
|
84
|
+
return [
|
|
85
|
+
input,
|
|
86
|
+
{
|
|
87
|
+
email: input[getMappedName(constants_1.ColumnName.Email)],
|
|
88
|
+
attestedExtraIdentifiers,
|
|
89
|
+
attributes,
|
|
90
|
+
coreIdentifier: input[getMappedName(constants_1.ColumnName.CoreIdentifier)],
|
|
91
|
+
requestType: requestTypeColumn === constants_1.BULK_APPLY
|
|
92
|
+
? cached.requestTypeToRequestAction[constants_1.BLANK]
|
|
93
|
+
: cached.requestTypeToRequestAction[input[requestTypeColumn]],
|
|
94
|
+
subjectType: dataSubjectTypeColumn === constants_1.BULK_APPLY
|
|
95
|
+
? cached.subjectTypeToSubjectName[constants_1.BLANK]
|
|
96
|
+
: cached.subjectTypeToSubjectName[input[dataSubjectTypeColumn]],
|
|
97
|
+
...(getMappedName(constants_1.ColumnName.Locale) !== constants_1.NONE &&
|
|
98
|
+
input[getMappedName(constants_1.ColumnName.Locale)]
|
|
99
|
+
? {
|
|
100
|
+
locale: cached.languageToLocale[input[getMappedName(constants_1.ColumnName.Locale)]],
|
|
101
|
+
}
|
|
102
|
+
: {}),
|
|
103
|
+
...(getMappedName(constants_1.ColumnName.RequestStatus) !== constants_1.NONE &&
|
|
104
|
+
cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]] !== constants_1.NONE &&
|
|
105
|
+
input[getMappedName(constants_1.ColumnName.RequestStatus)]
|
|
106
|
+
? {
|
|
107
|
+
status: cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]],
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
...(getMappedName(constants_1.ColumnName.CreatedAt) !== constants_1.NONE &&
|
|
111
|
+
input[getMappedName(constants_1.ColumnName.CreatedAt)]
|
|
112
|
+
? {
|
|
113
|
+
createdAt: new Date(input[getMappedName(constants_1.ColumnName.CreatedAt)]),
|
|
114
|
+
}
|
|
115
|
+
: {}),
|
|
116
|
+
...(getMappedName(constants_1.ColumnName.DataSiloIds) !== constants_1.NONE &&
|
|
117
|
+
input[getMappedName(constants_1.ColumnName.DataSiloIds)]
|
|
118
|
+
? {
|
|
119
|
+
dataSiloIds: (0, splitCsvToList_1.splitCsvToList)(input[getMappedName(constants_1.ColumnName.DataSiloIds)]),
|
|
120
|
+
}
|
|
121
|
+
: {}),
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
});
|
|
55
125
|
}
|
|
56
126
|
exports.mapCsvRowsToRequestInputs = mapCsvRowsToRequestInputs;
|
|
57
127
|
//# sourceMappingURL=mapCsvRowsToRequestInputs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapCsvRowsToRequestInputs.js","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"mapCsvRowsToRequestInputs.js","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as t from 'io-ts';
|
|
2
2
|
import type { Got } from 'got';
|
|
3
|
-
import { PrivacyRequestInput
|
|
3
|
+
import { PrivacyRequestInput } from './mapCsvRowsToRequestInputs';
|
|
4
4
|
import { AttributeInput } from './parseAttributesFromString';
|
|
5
5
|
export declare const PrivacyRequestResponse: t.TypeC<{
|
|
6
6
|
id: t.StringC;
|
|
@@ -5453,11 +5453,13 @@ export declare type PrivacyRequestResponse = t.TypeOf<typeof PrivacyRequestRespo
|
|
|
5453
5453
|
* @param options - Additional options
|
|
5454
5454
|
* @returns Successfully submitted request
|
|
5455
5455
|
*/
|
|
5456
|
-
export declare function submitPrivacyRequest(sombra: Got, input: PrivacyRequestInput, {
|
|
5457
|
-
/** Extra identifiers to upload */
|
|
5458
|
-
attestedExtraIdentifiers?: AttestedExtraIdentifiers;
|
|
5456
|
+
export declare function submitPrivacyRequest(sombra: Got, input: PrivacyRequestInput, { details, isTest, emailIsVerified, isSilent, additionalAttributes, }?: {
|
|
5459
5457
|
/** Whether or not the request is a test request */
|
|
5460
5458
|
isTest?: boolean;
|
|
5459
|
+
/** Whether or not the request is in silent mode */
|
|
5460
|
+
isSilent?: boolean;
|
|
5461
|
+
/** Whether the email is verified up front */
|
|
5462
|
+
emailIsVerified?: boolean;
|
|
5461
5463
|
/** Request details */
|
|
5462
5464
|
details?: string;
|
|
5463
5465
|
/** Additional attributes to tag the requests with */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submitPrivacyRequest.d.ts","sourceRoot":"","sources":["../../src/requests/submitPrivacyRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"submitPrivacyRequest.d.ts","sourceRoot":"","sources":["../../src/requests/submitPrivacyRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAS3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBjC,CAAC;AAEH,oBAAoB;AACpB,oBAAY,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE7E;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,mBAAmB,EAC1B,EACE,OAAY,EACZ,MAAc,EACd,eAAsB,EACtB,QAAe,EACf,oBAAyB,GAC1B,GAAE;IACD,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,oBAAoB,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC,GACL,OAAO,CAAC,sBAAsB,CAAC,CA+CjC"}
|