@transcend-io/cli 4.11.0 → 4.12.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 (70) hide show
  1. package/build/codecs.d.ts +112 -80
  2. package/build/codecs.d.ts.map +1 -1
  3. package/build/requests/constants.d.ts +241 -0
  4. package/build/requests/constants.d.ts.map +1 -0
  5. package/build/requests/constants.js +70 -0
  6. package/build/requests/constants.js.map +1 -0
  7. package/build/requests/filterRows.d.ts +10 -0
  8. package/build/requests/filterRows.d.ts.map +1 -0
  9. package/build/requests/filterRows.js +61 -0
  10. package/build/requests/filterRows.js.map +1 -0
  11. package/build/requests/fuzzyMatchColumns.d.ts +20 -0
  12. package/build/requests/fuzzyMatchColumns.d.ts.map +1 -0
  13. package/build/requests/fuzzyMatchColumns.js +41 -0
  14. package/build/requests/fuzzyMatchColumns.js.map +1 -0
  15. package/build/requests/index.d.ts +10 -1
  16. package/build/requests/index.d.ts.map +1 -1
  17. package/build/requests/index.js +10 -1
  18. package/build/requests/index.js.map +1 -1
  19. package/build/requests/mapCsvColumnsToApi.d.ts +16 -0
  20. package/build/requests/mapCsvColumnsToApi.d.ts.map +1 -0
  21. package/build/requests/mapCsvColumnsToApi.js +44 -0
  22. package/build/requests/mapCsvColumnsToApi.js.map +1 -0
  23. package/build/requests/mapCsvRowsToRequestInputs.d.ts +50 -0
  24. package/build/requests/mapCsvRowsToRequestInputs.d.ts.map +1 -0
  25. package/build/requests/mapCsvRowsToRequestInputs.js +57 -0
  26. package/build/requests/mapCsvRowsToRequestInputs.js.map +1 -0
  27. package/build/requests/mapEnumValues.d.ts +14 -0
  28. package/build/requests/mapEnumValues.d.ts.map +1 -0
  29. package/build/requests/mapEnumValues.js +42 -0
  30. package/build/requests/mapEnumValues.js.map +1 -0
  31. package/build/requests/mapRequestEnumValues.d.ts +21 -0
  32. package/build/requests/mapRequestEnumValues.d.ts.map +1 -0
  33. package/build/requests/mapRequestEnumValues.js +46 -0
  34. package/build/requests/mapRequestEnumValues.js.map +1 -0
  35. package/build/requests/parseAttributesFromString.d.ts +14 -0
  36. package/build/requests/parseAttributesFromString.d.ts.map +1 -0
  37. package/build/requests/parseAttributesFromString.js +33 -0
  38. package/build/requests/parseAttributesFromString.js.map +1 -0
  39. package/build/requests/splitCsvToList.d.ts +8 -0
  40. package/build/requests/splitCsvToList.d.ts.map +1 -0
  41. package/build/requests/{splitToCsv.js → splitCsvToList.js} +4 -4
  42. package/build/requests/splitCsvToList.js.map +1 -0
  43. package/build/requests/submitPrivacyRequest.d.ts +5466 -0
  44. package/build/requests/submitPrivacyRequest.d.ts.map +1 -0
  45. package/build/requests/submitPrivacyRequest.js +81 -0
  46. package/build/requests/submitPrivacyRequest.js.map +1 -0
  47. package/build/requests/tests/fuzzyMatchColumns.test.d.ts +2 -0
  48. package/build/requests/tests/fuzzyMatchColumns.test.d.ts.map +1 -0
  49. package/build/requests/tests/fuzzyMatchColumns.test.js +26 -0
  50. package/build/requests/tests/fuzzyMatchColumns.test.js.map +1 -0
  51. package/build/requests/tests/mapCsvRowsToRequestInputs.test.d.ts +1 -0
  52. package/build/requests/tests/mapCsvRowsToRequestInputs.test.d.ts.map +1 -0
  53. package/build/requests/tests/mapCsvRowsToRequestInputs.test.js +3 -0
  54. package/build/requests/tests/mapCsvRowsToRequestInputs.test.js.map +1 -0
  55. package/build/requests/tests/parseAttributesFromString.test.d.ts +2 -0
  56. package/build/requests/tests/parseAttributesFromString.test.d.ts.map +1 -0
  57. package/build/requests/tests/parseAttributesFromString.test.js +25 -0
  58. package/build/requests/tests/parseAttributesFromString.test.js.map +1 -0
  59. package/build/requests/tests/splitCsvToList.test.d.ts +2 -0
  60. package/build/requests/tests/splitCsvToList.test.d.ts.map +1 -0
  61. package/build/requests/tests/{splitToCsv.test.js → splitCsvToList.test.js} +5 -5
  62. package/build/requests/tests/splitCsvToList.test.js.map +1 -0
  63. package/build/tsbuildinfo +1 -1
  64. package/package.json +8 -2
  65. package/build/requests/splitToCsv.d.ts +0 -8
  66. package/build/requests/splitToCsv.d.ts.map +0 -1
  67. package/build/requests/splitToCsv.js.map +0 -1
  68. package/build/requests/tests/splitToCsv.test.d.ts +0 -2
  69. package/build/requests/tests/splitToCsv.test.d.ts.map +0 -1
  70. package/build/requests/tests/splitToCsv.test.js.map +0 -1
@@ -0,0 +1,61 @@
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.filterRows = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const colors_1 = __importDefault(require("colors"));
9
+ const uniq_1 = __importDefault(require("lodash/uniq"));
10
+ const logger_1 = require("../logger");
11
+ const constants_1 = require("./constants");
12
+ const getUniqueValuesForColumn_1 = require("./getUniqueValuesForColumn");
13
+ /**
14
+ * Filter a list of CSV rows by column values
15
+ * Choose columns that contain metadata to filter the requests
16
+ *
17
+ * @param rows - Rows to filter
18
+ * @returns Filtered rows
19
+ */
20
+ async function filterRows(rows) {
21
+ // Determine set of column names
22
+ const columnNames = (0, uniq_1.default)(rows.map((x) => Object.keys(x)).flat());
23
+ // update these variables recursively
24
+ let filteredRows = rows;
25
+ let keepFiltering = true;
26
+ // loop over
27
+ while (keepFiltering) {
28
+ // Prompt user for column to filter on
29
+ // eslint-disable-next-line no-await-in-loop
30
+ const { filterColumnName } = await inquirer_1.default.prompt([
31
+ {
32
+ name: 'filterColumnName',
33
+ // eslint-disable-next-line max-len
34
+ message: `If you need to filter the list of requests to import, choose the column to filter on. Currently ${filteredRows.length} rows.`,
35
+ type: 'list',
36
+ default: columnNames,
37
+ choices: [constants_1.NONE, ...columnNames],
38
+ },
39
+ ]);
40
+ // Determine if filtering should continue, or loop should be exited
41
+ keepFiltering = constants_1.NONE !== filterColumnName;
42
+ if (keepFiltering) {
43
+ const options = (0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(filteredRows, filterColumnName);
44
+ // eslint-disable-next-line no-await-in-loop
45
+ const { valuesToKeep } = await inquirer_1.default.prompt([
46
+ {
47
+ name: 'valuesToKeep',
48
+ message: 'Keep rows matching this value',
49
+ type: 'checkbox',
50
+ default: columnNames,
51
+ choices: options,
52
+ },
53
+ ]);
54
+ filteredRows = filteredRows.filter((request) => valuesToKeep.includes(request[filterColumnName]));
55
+ }
56
+ }
57
+ logger_1.logger.info(colors_1.default.magenta(`Importing ${filteredRows.length} requests`));
58
+ return filteredRows;
59
+ }
60
+ exports.filterRows = filterRows;
61
+ //# sourceMappingURL=filterRows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterRows.js","sourceRoot":"","sources":["../../src/requests/filterRows.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAEhC,oDAA4B;AAC5B,uDAA+B;AAC/B,sCAAmC;AACnC,2CAAmC;AACnC,yEAAsE;AAEtE;;;;;;GAMG;AACI,KAAK,UAAU,UAAU,CAAC,IAAmB;IAClD,gCAAgC;IAChC,MAAM,WAAW,GAAG,IAAA,cAAI,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjE,qCAAqC;IACrC,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,aAAa,GAAG,IAAI,CAAC;IAEzB,YAAY;IACZ,OAAO,aAAa,EAAE;QACpB,sCAAsC;QACtC,4CAA4C;QAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAG/C;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,mCAAmC;gBACnC,OAAO,EAAE,mGAAmG,YAAY,CAAC,MAAM,QAAQ;gBACvI,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,CAAC,gBAAI,EAAE,GAAG,WAAW,CAAC;aAChC;SACF,CAAC,CAAC;QAEH,mEAAmE;QACnE,aAAa,GAAG,gBAAI,KAAK,gBAAgB,CAAC;QAC1C,IAAI,aAAa,EAAE;YACjB,MAAM,OAAO,GAAG,IAAA,mDAAwB,EAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;YACzE,4CAA4C;YAC5C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAG3C;gBACD;oBACE,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,+BAA+B;oBACxC,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW;oBACpB,OAAO,EAAE,OAAO;iBACjB;aACF,CAAC,CAAC;YAEH,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7C,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CACjD,CAAC;SACH;KACF;IAED,eAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,OAAO,CAAC,aAAa,YAAY,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;IACzE,OAAO,YAAY,CAAC;AACtB,CAAC;AApDD,gCAoDC"}
@@ -0,0 +1,20 @@
1
+ import inquirer from 'inquirer';
2
+ /**
3
+ * Check if word1 and word2 are a fuzzy match of each other.
4
+ * Returns true if word1 is fuzzy match of word2 or vice versa.
5
+ *
6
+ * @param word1 - First word
7
+ * @param word2 - Second word
8
+ * @returns True if words are fuzzy match
9
+ */
10
+ export declare function fuzzySearch(word1: string, word2: string): boolean;
11
+ /**
12
+ * Fuzzy match column names for a particular field
13
+ *
14
+ * @param allColumnNames - List of all column names
15
+ * @param fuzzyMapName - The name of field being mapped to
16
+ * @param isRequired - When require, don't show NONE
17
+ * @returns The list of suggestions for inquirer
18
+ */
19
+ export declare function fuzzyMatchColumns(allColumnNames: string[], fuzzyMapName: string, isRequired: boolean): (string | InstanceType<typeof inquirer.Separator>)[];
20
+ //# sourceMappingURL=fuzzyMatchColumns.d.ts.map
@@ -0,0 +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;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,GAClB,CAAC,MAAM,GAAG,YAAY,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAUtD"}
@@ -0,0 +1,41 @@
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.fuzzyMatchColumns = exports.fuzzySearch = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const constants_1 = require("./constants");
9
+ const fuzzysearch_1 = __importDefault(require("fuzzysearch"));
10
+ /**
11
+ * Check if word1 and word2 are a fuzzy match of each other.
12
+ * Returns true if word1 is fuzzy match of word2 or vice versa.
13
+ *
14
+ * @param word1 - First word
15
+ * @param word2 - Second word
16
+ * @returns True if words are fuzzy match
17
+ */
18
+ function fuzzySearch(word1, word2) {
19
+ return ((0, fuzzysearch_1.default)(word1.toLowerCase(), word2.toLowerCase()) ||
20
+ (0, fuzzysearch_1.default)(word2.toLowerCase(), word1.toLowerCase()));
21
+ }
22
+ exports.fuzzySearch = fuzzySearch;
23
+ /**
24
+ * Fuzzy match column names for a particular field
25
+ *
26
+ * @param allColumnNames - List of all column names
27
+ * @param fuzzyMapName - The name of field being mapped to
28
+ * @param isRequired - When require, don't show NONE
29
+ * @returns The list of suggestions for inquirer
30
+ */
31
+ function fuzzyMatchColumns(allColumnNames, fuzzyMapName, isRequired) {
32
+ const matchingColumnNames = allColumnNames.filter((x) => fuzzySearch(fuzzyMapName.toLowerCase(), x.toLowerCase()));
33
+ return [
34
+ ...matchingColumnNames,
35
+ new inquirer_1.default.Separator(),
36
+ ...(isRequired ? [] : [constants_1.NONE]),
37
+ ...allColumnNames.filter((x) => !matchingColumnNames.includes(x)),
38
+ ];
39
+ }
40
+ exports.fuzzyMatchColumns = fuzzyMatchColumns;
41
+ //# sourceMappingURL=fuzzyMatchColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzyMatchColumns.js","sourceRoot":"","sources":["../../src/requests/fuzzyMatchColumns.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,2CAAmC;AAEnC,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;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAC/B,cAAwB,EACxB,YAAoB,EACpB,UAAmB;IAEnB,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,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC;AAdD,8CAcC"}
@@ -1,4 +1,13 @@
1
- export * from './splitToCsv';
1
+ export * from './fuzzyMatchColumns';
2
+ export * from './constants';
3
+ export * from './mapEnumValues';
4
+ export * from './splitCsvToList';
5
+ export * from './parseAttributesFromString';
2
6
  export * from './readCsv';
3
7
  export * from './getUniqueValuesForColumn';
8
+ export * from './filterRows';
9
+ export * from './mapCsvColumnsToApi';
10
+ export * from './mapRequestEnumValues';
11
+ export * from './mapCsvRowsToRequestInputs';
12
+ export * from './submitPrivacyRequest';
4
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/requests/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,4BAA4B,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"}
@@ -10,7 +10,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./splitToCsv"), exports);
13
+ __exportStar(require("./fuzzyMatchColumns"), exports);
14
+ __exportStar(require("./constants"), exports);
15
+ __exportStar(require("./mapEnumValues"), exports);
16
+ __exportStar(require("./splitCsvToList"), exports);
17
+ __exportStar(require("./parseAttributesFromString"), exports);
14
18
  __exportStar(require("./readCsv"), exports);
15
19
  __exportStar(require("./getUniqueValuesForColumn"), exports);
20
+ __exportStar(require("./filterRows"), exports);
21
+ __exportStar(require("./mapCsvColumnsToApi"), exports);
22
+ __exportStar(require("./mapRequestEnumValues"), exports);
23
+ __exportStar(require("./mapCsvRowsToRequestInputs"), exports);
24
+ __exportStar(require("./submitPrivacyRequest"), exports);
16
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/requests/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B;AAC7B,4CAA0B;AAC1B,6DAA2C"}
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"}
@@ -0,0 +1,16 @@
1
+ import { ColumnName, CachedFileState } from './constants';
2
+ /**
3
+ * Mapping from column name to request input parameter
4
+ */
5
+ export declare type ColumnNameMap = {
6
+ [k in ColumnName]?: string;
7
+ };
8
+ /**
9
+ * Determine the mapping between columns in CSV
10
+ *
11
+ * @param columnNames - The set of column names
12
+ * @param cached - The cached file state used to map DSR inputs
13
+ * @returns The column name mapping
14
+ */
15
+ export declare function mapCsvColumnsToApi(columnNames: string[], cached: CachedFileState): Promise<ColumnNameMap>;
16
+ //# sourceMappingURL=mapCsvColumnsToApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCsvColumnsToApi.d.ts","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAe,MAAM,aAAa,CAAC;AAGvE;;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,CAqCxB"}
@@ -0,0 +1,44 @@
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.mapCsvColumnsToApi = void 0;
7
+ const type_utils_1 = require("@transcend-io/type-utils");
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const startCase_1 = __importDefault(require("lodash/startCase"));
10
+ const constants_1 = require("./constants");
11
+ const fuzzyMatchColumns_1 = require("./fuzzyMatchColumns");
12
+ /**
13
+ * Determine the mapping between columns in CSV
14
+ *
15
+ * @param columnNames - The set of column names
16
+ * @param cached - The cached file state used to map DSR inputs
17
+ * @returns The column name mapping
18
+ */
19
+ async function mapCsvColumnsToApi(columnNames, cached) {
20
+ // Determine the columns that should be mapped
21
+ const columnQuestions = (0, type_utils_1.getValues)(constants_1.ColumnName).filter((name) => !cached.columnNames[name]);
22
+ // Skip mapping when everything is mapped
23
+ const columnNameMap = columnQuestions.length === 0
24
+ ? {}
25
+ : // prompt questions to map columns
26
+ await inquirer_1.default.prompt(columnQuestions.map((name) => {
27
+ const field = (0, startCase_1.default)(name.replace('ColumnName', ''));
28
+ const matches = (0, fuzzyMatchColumns_1.fuzzyMatchColumns)(columnNames, field, constants_1.IS_REQUIRED[name]);
29
+ return {
30
+ name,
31
+ message: `Choose the column that will be used to map in the field: ${field}`,
32
+ type: 'list',
33
+ default: matches[0],
34
+ choices: matches,
35
+ };
36
+ }));
37
+ (0, type_utils_1.getEntries)(columnNameMap).forEach(([k, v]) => {
38
+ // eslint-disable-next-line no-param-reassign
39
+ cached.columnNames[k] = v;
40
+ });
41
+ return columnNameMap;
42
+ }
43
+ exports.mapCsvColumnsToApi = mapCsvColumnsToApi;
44
+ //# sourceMappingURL=mapCsvColumnsToApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCsvColumnsToApi.js","sourceRoot":"","sources":["../../src/requests/mapCsvColumnsToApi.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiE;AACjE,wDAAgC;AAChC,iEAAyC;AACzC,2CAAuE;AACvE,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,CAClB,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;IACR,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;AAxCD,gDAwCC"}
@@ -0,0 +1,50 @@
1
+ import { LanguageKey } from '@transcend-io/internationalization';
2
+ import { ObjByString } from '@transcend-io/type-utils';
3
+ import { CompletedRequestStatus, RequestAction, IdentifierType } from '@transcend-io/privacy-types';
4
+ import { CachedFileState } from './constants';
5
+ import { ColumnNameMap } from './mapCsvColumnsToApi';
6
+ /**
7
+ * Shape of additional identifiers
8
+ */
9
+ export declare type AttestedExtraIdentifiers = {
10
+ [k in IdentifierType]?: {
11
+ /** Name of identifier */
12
+ name?: string;
13
+ /** Value of identifier */
14
+ value: string;
15
+ }[];
16
+ };
17
+ export interface PrivacyRequestInput {
18
+ /** Email of user */
19
+ email: string;
20
+ /** Email is verified */
21
+ emailIsVerified: boolean;
22
+ /** Core identifier for user */
23
+ coreIdentifier: string;
24
+ /** Action type being submitted */
25
+ requestType: RequestAction;
26
+ /** Type of data subject */
27
+ subjectType: string;
28
+ /** The status that the request should be created as */
29
+ status?: CompletedRequestStatus;
30
+ /** The time that the request was created */
31
+ createdAt?: Date;
32
+ /** Whether in silent mode */
33
+ isSilent: boolean;
34
+ /** Data silo IDs to submit for */
35
+ dataSiloIds?: string[];
36
+ /** Language key to map to */
37
+ locale?: LanguageKey;
38
+ }
39
+ /**
40
+ * Take the raw rows in a CSV upload, and map those rows to the request
41
+ * input shape that can be passed to the Transcend API to submit a privacy
42
+ * request.
43
+ *
44
+ * @param requestInputs - CSV of requests to be uploaded
45
+ * @param cached - The cached set of mapping values
46
+ * @param columnNameMap - Mapping of column names
47
+ * @returns [raw input, request input] list
48
+ */
49
+ export declare function mapCsvRowsToRequestInputs(requestInputs: ObjByString[], cached: CachedFileState, columnNameMap: ColumnNameMap): [Record<string, string>, PrivacyRequestInput][];
50
+ //# sourceMappingURL=mapCsvRowsToRequestInputs.d.ts.map
@@ -0,0 +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;AACvD,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,cAAc,EACf,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;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,eAAe,EAAE,OAAO,CAAC;IACzB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,WAAW,EAAE,aAAa,CAAC;IAC3B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,WAAW,EAAE,EAC5B,MAAM,EAAE,eAAe,EACvB,aAAa,EAAE,aAAa,GAC3B,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,CAAC,EAAE,CAyDjD"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapCsvRowsToRequestInputs = void 0;
4
+ const constants_1 = require("./constants");
5
+ const splitCsvToList_1 = require("./splitCsvToList");
6
+ /**
7
+ * Take the raw rows in a CSV upload, and map those rows to the request
8
+ * input shape that can be passed to the Transcend API to submit a privacy
9
+ * request.
10
+ *
11
+ * @param requestInputs - CSV of requests to be uploaded
12
+ * @param cached - The cached set of mapping values
13
+ * @param columnNameMap - Mapping of column names
14
+ * @returns [raw input, request input] list
15
+ */
16
+ function mapCsvRowsToRequestInputs(requestInputs, cached, columnNameMap) {
17
+ // map the CSV to request input
18
+ const getMappedName = (attribute) => cached.columnNames[attribute] || columnNameMap[attribute];
19
+ return requestInputs.map((input) => [
20
+ input,
21
+ {
22
+ email: input[getMappedName(constants_1.ColumnName.Email)],
23
+ emailIsVerified: true,
24
+ isSilent: true,
25
+ coreIdentifier: input[getMappedName(constants_1.ColumnName.CoreIdentifier)],
26
+ requestType: cached.requestTypeToRequestAction[input[getMappedName(constants_1.ColumnName.RequestType)]],
27
+ subjectType: cached.subjectTypeToSubjectName[input[getMappedName(constants_1.ColumnName.SubjectType)]] || 'Customer',
28
+ ...(getMappedName(constants_1.ColumnName.Locale) !== constants_1.NONE &&
29
+ input[getMappedName(constants_1.ColumnName.Locale)]
30
+ ? {
31
+ locale: cached.languageToLocale[input[getMappedName(constants_1.ColumnName.Locale)]],
32
+ }
33
+ : {}),
34
+ ...(getMappedName(constants_1.ColumnName.RequestStatus) !== constants_1.NONE &&
35
+ cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]] !== constants_1.NONE &&
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)]),
51
+ }
52
+ : {}),
53
+ },
54
+ ]);
55
+ }
56
+ exports.mapCsvRowsToRequestInputs = mapCsvRowsToRequestInputs;
57
+ //# sourceMappingURL=mapCsvRowsToRequestInputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCsvRowsToRequestInputs.js","sourceRoot":"","sources":["../../src/requests/mapCsvRowsToRequestInputs.ts"],"names":[],"mappings":";;;AAQA,2CAAgE;AAEhE,qDAAkD;AAqClD;;;;;;;;;GASG;AACH,SAAgB,yBAAyB,CACvC,aAA4B,EAC5B,MAAuB,EACvB,aAA4B;IAE5B,+BAA+B;IAC/B,MAAM,aAAa,GAAG,CAAC,SAAqB,EAAU,EAAE,CACtD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAE,CAAC;IAC7D,OAAO,aAAa,CAAC,GAAG,CACtB,CAAC,KAAK,EAAiD,EAAE,CAAC;QACxD,KAAK;QACL;YACE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,KAAK,CAAC,CAAC;YAC7C,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,cAAc,CAAC,CAAC;YAC/D,WAAW,EACT,MAAM,CAAC,0BAA0B,CAC/B,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,CAC7C;YACH,WAAW,EACT,MAAM,CAAC,wBAAwB,CAC7B,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,CAC7C,IAAI,UAAU;YACjB,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,KAAK,gBAAI;gBAC7C,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC;gBACrC,CAAC,CAAC;oBACE,MAAM,EACJ,MAAM,CAAC,gBAAgB,CACrB,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC,CACxC;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,KAAK,gBAAI;gBACpD,MAAM,CAAC,qBAAqB,CAC1B,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC,CAC/C,KAAK,gBAAI;gBACV,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC;gBAC5C,CAAC,CAAC;oBACE,MAAM,EAAE,MAAM,CAAC,qBAAqB,CAClC,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC,CACrB;iBAC5B;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,SAAS,CAAC,KAAK,gBAAI;gBAChD,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC,CAAC;oBACE,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,SAAS,CAAC,CAAC,CAAC;iBAChE;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,KAAK,gBAAI;gBAClD,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC;gBAC1C,CAAC,CAAC;oBACE,WAAW,EAAE,IAAA,+BAAc,EACzB,KAAK,CAAC,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,CAC7C;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CACF,CAAC;AACJ,CAAC;AA7DD,8DA6DC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Map a set of inputs to a set of outputs
3
+ *
4
+ * @param csvInputs - Input list
5
+ * @param expectedOutputs - Output list
6
+ * @param cache - Cache
7
+ * @returns Mapping from row to enum value
8
+ */
9
+ export declare function mapEnumValues<TValue extends string>(csvInputs: string[], expectedOutputs: TValue[], cache: {
10
+ [k in string]: TValue;
11
+ }): Promise<{
12
+ [k in string]: TValue;
13
+ }>;
14
+ //# sourceMappingURL=mapEnumValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapEnumValues.d.ts","sourceRoot":"","sources":["../../src/requests/mapEnumValues.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,MAAM,SAAS,MAAM,EACvD,SAAS,EAAE,MAAM,EAAE,EACnB,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,EAAE;KAAG,CAAC,IAAI,MAAM,GAAG,MAAM;CAAE,GAC/B,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,GAAG,MAAM;CAAE,CAAC,CA6BpC"}
@@ -0,0 +1,42 @@
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.mapEnumValues = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
9
+ const type_utils_1 = require("@transcend-io/type-utils");
10
+ const fuzzyMatchColumns_1 = require("./fuzzyMatchColumns");
11
+ /**
12
+ * Map a set of inputs to a set of outputs
13
+ *
14
+ * @param csvInputs - Input list
15
+ * @param expectedOutputs - Output list
16
+ * @param cache - Cache
17
+ * @returns Mapping from row to enum value
18
+ */
19
+ async function mapEnumValues(csvInputs, expectedOutputs, cache) {
20
+ inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
21
+ const inputs = csvInputs
22
+ .map((item) => item || '<blank>')
23
+ .filter((value) => !cache[value]);
24
+ if (inputs.length === 0) {
25
+ return cache;
26
+ }
27
+ const result = await inquirer_1.default.prompt(inputs.map((value) => ({
28
+ name: value,
29
+ message: `Map value of: ${value}`,
30
+ type: 'autocomplete',
31
+ default: expectedOutputs.find((x) => (0, fuzzyMatchColumns_1.fuzzySearch)(value, x)),
32
+ source: (answersSoFar, input) => !input
33
+ ? expectedOutputs
34
+ : expectedOutputs.filter((x) => typeof x === 'string' && (0, fuzzyMatchColumns_1.fuzzySearch)(input, x)),
35
+ })));
36
+ return {
37
+ ...cache,
38
+ ...(0, type_utils_1.apply)(result, (r) => typeof r === 'string' ? r : Object.values(r)[0]),
39
+ };
40
+ }
41
+ exports.mapEnumValues = mapEnumValues;
42
+ //# sourceMappingURL=mapEnumValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapEnumValues.js","sourceRoot":"","sources":["../../src/requests/mapEnumValues.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,gGAA8D;AAC9D,yDAA8D;AAC9D,2DAAkD;AAElD;;;;;;;GAOG;AACI,KAAK,UAAU,aAAa,CACjC,SAAmB,EACnB,eAAyB,EACzB,KAAgC;IAEhC,kBAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,sCAAkB,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,SAAS;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC;SAChC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAClC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,iBAAiB,KAAK,EAAE;QACjC,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,+BAAW,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,YAAyB,EAAE,KAAa,EAAE,EAAE,CACnD,CAAC,KAAK;YACJ,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,eAAe,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,IAAA,+BAAW,EAAC,KAAK,EAAE,CAAC,CAAC,CACtD;KACR,CAAC,CAAC,CACJ,CAAC;IACF,OAAO;QACL,GAAG,KAAK;QACR,GAAG,IAAA,kBAAK,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACrB,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAY,CAAC,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CACxE;KACF,CAAC;AACJ,CAAC;AAjCD,sCAiCC"}
@@ -0,0 +1,21 @@
1
+ import { GraphQLClient } from 'graphql-request';
2
+ import type { PersistedState } from '@transcend-io/persisted-state';
3
+ import { ObjByString } from '@transcend-io/type-utils';
4
+ import { CachedState } from './constants';
5
+ import { ColumnNameMap } from './mapCsvColumnsToApi';
6
+ /**
7
+ * Map the values in a CSV to the enum values in Transcend
8
+ *
9
+ * @param client - GraphQL client
10
+ * @param requests - Set of privacy requests
11
+ * @param options - Options
12
+ */
13
+ export declare function mapRequestEnumValues(client: GraphQLClient, requests: ObjByString[], { fileName, state, columnNameMap, }: {
14
+ /** Name of fileName to be cached */
15
+ fileName: string;
16
+ /** State value to write cache to */
17
+ state: PersistedState<typeof CachedState>;
18
+ /** Mapping of column names */
19
+ columnNameMap: ColumnNameMap;
20
+ }): Promise<void>;
21
+ //# sourceMappingURL=mapRequestEnumValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapRequestEnumValues.d.ts","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAMpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,EACE,QAAQ,EACR,KAAK,EACL,aAAa,GACd,EAAE;IACD,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,KAAK,EAAE,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;IAC1C,8BAA8B;IAC9B,aAAa,EAAE,aAAa,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CAsDf"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapRequestEnumValues = void 0;
4
+ const privacy_types_1 = require("@transcend-io/privacy-types");
5
+ const internationalization_1 = require("@transcend-io/internationalization");
6
+ const logger_1 = require("../logger");
7
+ const graphql_1 = require("../graphql");
8
+ const constants_1 = require("./constants");
9
+ const mapEnumValues_1 = require("./mapEnumValues");
10
+ const getUniqueValuesForColumn_1 = require("./getUniqueValuesForColumn");
11
+ /**
12
+ * Map the values in a CSV to the enum values in Transcend
13
+ *
14
+ * @param client - GraphQL client
15
+ * @param requests - Set of privacy requests
16
+ * @param options - Options
17
+ */
18
+ async function mapRequestEnumValues(client, requests, { fileName, state, columnNameMap, }) {
19
+ // Current cache value
20
+ const cached = state.getValue(fileName);
21
+ // Get mapped value
22
+ const getMappedName = (attribute) => cached.columnNames[attribute] || columnNameMap[attribute];
23
+ // Fetch all data subjects in the organization
24
+ const { internalSubjects } = await (0, graphql_1.makeGraphQLRequest)(client, graphql_1.DATA_SUBJECTS);
25
+ logger_1.logger.info('Determine mapping for request action');
26
+ const requestTypeToRequestAction = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.RequestType)), Object.values(privacy_types_1.RequestAction), cached.requestTypeToRequestAction || {});
27
+ cached.requestTypeToRequestAction = requestTypeToRequestAction;
28
+ state.setValue(cached, fileName);
29
+ logger_1.logger.info('Determine mapping for subject');
30
+ const subjectTypeToSubjectName = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.SubjectType)), internalSubjects.map(({ type }) => type), cached.subjectTypeToSubjectName || {});
31
+ cached.subjectTypeToSubjectName = subjectTypeToSubjectName;
32
+ state.setValue(cached, fileName);
33
+ logger_1.logger.info('Determine mapping for locale');
34
+ const languageToLocale = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.Locale)), Object.values(internationalization_1.LanguageKey), cached.languageToLocale || {});
35
+ cached.languageToLocale = languageToLocale;
36
+ state.setValue(cached, fileName);
37
+ logger_1.logger.info('Determine mapping for request status');
38
+ const requestStatusColumn = getMappedName(constants_1.ColumnName.RequestStatus);
39
+ const statusToRequestStatus = requestStatusColumn === constants_1.NONE
40
+ ? {}
41
+ : await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, requestStatusColumn), [...Object.values(privacy_types_1.CompletedRequestStatus), constants_1.NONE], cached.statusToRequestStatus || {});
42
+ cached.statusToRequestStatus = statusToRequestStatus;
43
+ state.setValue(cached, fileName);
44
+ }
45
+ exports.mapRequestEnumValues = mapRequestEnumValues;
46
+ //# sourceMappingURL=mapRequestEnumValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapRequestEnumValues.js","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":";;;AAEA,+DAGqC;AACrC,6EAAiE;AAEjE,sCAAmC;AACnC,wCAA4E;AAC5E,2CAA4D;AAC5D,mDAAgD;AAEhD,yEAAsE;AAEtE;;;;;;GAMG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAqB,EACrB,QAAuB,EACvB,EACE,QAAQ,EACR,KAAK,EACL,aAAa,GAQd;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAExC,mBAAmB;IACnB,MAAM,aAAa,GAAG,CAAC,SAAqB,EAAU,EAAE,CACtD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,SAAS,CAAE,CAAC;IAE7D,8CAA8C;IAC9C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAA,4BAAkB,EAGlD,MAAM,EAAE,uBAAa,CAAC,CAAC;IAE1B,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,0BAA0B,GAC9B,MAAM,IAAA,6BAAa,EACjB,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,EACzE,MAAM,CAAC,MAAM,CAAC,6BAAa,CAAC,EAC5B,MAAM,CAAC,0BAA0B,IAAI,EAAE,CACxC,CAAC;IACJ,MAAM,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;IAC/D,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,wBAAwB,GAC5B,MAAM,IAAA,6BAAa,EACjB,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,sBAAU,CAAC,WAAW,CAAC,CAAC,EACzE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EACxC,MAAM,CAAC,wBAAwB,IAAI,EAAE,CACtC,CAAC;IACJ,MAAM,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IAC3D,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAmC,MAAM,IAAA,6BAAa,EAC1E,IAAA,mDAAwB,EAAC,QAAQ,EAAE,aAAa,CAAC,sBAAU,CAAC,MAAM,CAAC,CAAC,EACpE,MAAM,CAAC,MAAM,CAAC,kCAAW,CAAC,EAC1B,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAC9B,CAAC;IACF,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,mBAAmB,GAAG,aAAa,CAAC,sBAAU,CAAC,aAAa,CAAC,CAAC;IACpE,MAAM,qBAAqB,GAGzB,mBAAmB,KAAK,gBAAI;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,MAAM,IAAA,6BAAa,EACjB,IAAA,mDAAwB,EAAC,QAAQ,EAAE,mBAAmB,CAAC,EACvD,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,sCAAsB,CAAC,EAAE,gBAAI,CAAC,EAChD,MAAM,CAAC,qBAAqB,IAAI,EAAE,CACnC,CAAC;IACR,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AArED,oDAqEC"}
@@ -0,0 +1,14 @@
1
+ export interface AttributeInput {
2
+ /** Attribute key */
3
+ key: string;
4
+ /** Attribute values */
5
+ values: string[];
6
+ }
7
+ /**
8
+ * Parse out the extra attributes to apply to all requests uploaded
9
+ *
10
+ * @param attributes - input as string, e.g. ['key:value1;value2','key2:value3;value4']
11
+ * @returns The parsed attributes
12
+ */
13
+ export declare function parseAttributesFromString(attributes: string[]): AttributeInput[];
14
+ //# sourceMappingURL=parseAttributesFromString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAttributesFromString.d.ts","sourceRoot":"","sources":["../../src/requests/parseAttributesFromString.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAAE,GACnB,cAAc,EAAE,CAkBlB"}
@@ -0,0 +1,33 @@
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.parseAttributesFromString = void 0;
7
+ const colors_1 = __importDefault(require("colors"));
8
+ const logger_1 = require("../logger");
9
+ /**
10
+ * Parse out the extra attributes to apply to all requests uploaded
11
+ *
12
+ * @param attributes - input as string, e.g. ['key:value1;value2','key2:value3;value4']
13
+ * @returns The parsed attributes
14
+ */
15
+ function parseAttributesFromString(attributes) {
16
+ // Parse out the extra attributes to apply to all requests uploaded
17
+ const parsedAttributes = attributes.map((attribute) => {
18
+ const [attributeKey, attributeValuesRaw] = attribute.trim().split(':');
19
+ if (!attributeValuesRaw) {
20
+ throw new Error('Expected attributes in key:value1;value2,key2:value3;value4');
21
+ }
22
+ const attributeValues = attributeValuesRaw.split(';');
23
+ return {
24
+ key: attributeKey,
25
+ values: attributeValues,
26
+ };
27
+ });
28
+ logger_1.logger.info(colors_1.default.magenta('Attributes:'));
29
+ logger_1.logger.info(colors_1.default.magenta(JSON.stringify(parsedAttributes, null, 2)));
30
+ return parsedAttributes;
31
+ }
32
+ exports.parseAttributesFromString = parseAttributesFromString;
33
+ //# sourceMappingURL=parseAttributesFromString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAttributesFromString.js","sourceRoot":"","sources":["../../src/requests/parseAttributesFromString.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,sCAAmC;AASnC;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,UAAoB;IAEpB,mEAAmE;IACnE,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACpD,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;SACH;QACD,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO;YACL,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,eAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3C,eAAM,CAAC,IAAI,CAAC,gBAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AApBD,8DAoBC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Split string to CSV
3
+ *
4
+ * @param value - Value
5
+ * @returns List of values
6
+ */
7
+ export declare function splitCsvToList(value: string): string[];
8
+ //# sourceMappingURL=splitCsvToList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitCsvToList.d.ts","sourceRoot":"","sources":["../../src/requests/splitCsvToList.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKtD"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.splitToCsv = void 0;
3
+ exports.splitCsvToList = void 0;
4
4
  /**
5
5
  * Split string to CSV
6
6
  *
7
7
  * @param value - Value
8
8
  * @returns List of values
9
9
  */
10
- function splitToCsv(value) {
10
+ function splitCsvToList(value) {
11
11
  return value
12
12
  .split(',')
13
13
  .map((x) => x.trim())
14
14
  .filter((x) => x);
15
15
  }
16
- exports.splitToCsv = splitToCsv;
17
- //# sourceMappingURL=splitToCsv.js.map
16
+ exports.splitCsvToList = splitCsvToList;
17
+ //# sourceMappingURL=splitCsvToList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitCsvToList.js","sourceRoot":"","sources":["../../src/requests/splitCsvToList.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AALD,wCAKC"}