@transcend-io/cli 4.12.0 → 4.14.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 +156 -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 +63 -0
- package/build/cli-request-upload.js.map +1 -0
- package/build/graphql/fetchAllAttributeKeys.d.ts +17 -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 +20 -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 +56 -5
- package/build/requests/constants.d.ts.map +1 -1
- package/build/requests/constants.js +33 -3
- package/build/requests/constants.js.map +1 -1
- package/build/requests/extractClientError.d.ts +8 -0
- package/build/requests/extractClientError.d.ts.map +1 -0
- package/build/requests/extractClientError.js +15 -0
- package/build/requests/extractClientError.js.map +1 -0
- 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 +4 -0
- package/build/requests/index.d.ts.map +1 -1
- package/build/requests/index.js +4 -0
- package/build/requests/index.js.map +1 -1
- package/build/requests/mapColumnsToAttributes.d.ts +22 -0
- package/build/requests/mapColumnsToAttributes.d.ts.map +1 -0
- package/build/requests/mapColumnsToAttributes.js +47 -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 +51 -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 +31 -7
- package/build/requests/mapCsvRowsToRequestInputs.d.ts.map +1 -1
- package/build/requests/mapCsvRowsToRequestInputs.js +121 -38
- package/build/requests/mapCsvRowsToRequestInputs.js.map +1 -1
- package/build/requests/mapRequestEnumValues.d.ts.map +1 -1
- package/build/requests/mapRequestEnumValues.js +8 -4
- package/build/requests/mapRequestEnumValues.js.map +1 -1
- package/build/requests/parseAttributesFromString.js +1 -1
- package/build/requests/parseAttributesFromString.js.map +1 -1
- package/build/requests/submitPrivacyRequest.d.ts +7 -5
- package/build/requests/submitPrivacyRequest.d.ts.map +1 -1
- package/build/requests/submitPrivacyRequest.js +23 -6
- package/build/requests/submitPrivacyRequest.js.map +1 -1
- package/build/requests/uploadPrivacyRequestsFromCsv.d.ts +43 -0
- package/build/requests/uploadPrivacyRequestsFromCsv.d.ts.map +1 -0
- package/build/requests/uploadPrivacyRequestsFromCsv.js +220 -0
- package/build/requests/uploadPrivacyRequestsFromCsv.js.map +1 -0
- package/build/tsbuildinfo +1 -1
- package/package.json +5 -2
|
@@ -1,8 +1,38 @@
|
|
|
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
|
+
* @param defaultPhoneCountryCode - Default country code for phone numbers
|
|
13
|
+
* @returns Post-processed identifier
|
|
14
|
+
*/
|
|
15
|
+
function normalizeIdentifierValue(identifierValue, identifierType, defaultPhoneCountryCode) {
|
|
16
|
+
// Lowercase email
|
|
17
|
+
if (identifierType === privacy_types_1.IdentifierType.Email) {
|
|
18
|
+
return identifierValue.toLowerCase();
|
|
19
|
+
}
|
|
20
|
+
// Normalize phone number
|
|
21
|
+
if (identifierType === privacy_types_1.IdentifierType.Phone) {
|
|
22
|
+
const normalized = identifierValue
|
|
23
|
+
.replace(privacy_types_1.NORMALIZE_PHONE_NUMBER, '')
|
|
24
|
+
.replace(/[()]/g, '')
|
|
25
|
+
.replace(/[–]/g, '')
|
|
26
|
+
.replace(/[:]/g, '')
|
|
27
|
+
.replace(/[]/g, '')
|
|
28
|
+
.replace(/[A-Za-z]/g, '');
|
|
29
|
+
return normalized.startsWith('+')
|
|
30
|
+
? normalized
|
|
31
|
+
: `+${defaultPhoneCountryCode}${normalized}`;
|
|
32
|
+
}
|
|
33
|
+
return identifierValue;
|
|
34
|
+
}
|
|
35
|
+
exports.normalizeIdentifierValue = normalizeIdentifierValue;
|
|
6
36
|
/**
|
|
7
37
|
* Take the raw rows in a CSV upload, and map those rows to the request
|
|
8
38
|
* input shape that can be passed to the Transcend API to submit a privacy
|
|
@@ -10,48 +40,101 @@ const splitCsvToList_1 = require("./splitCsvToList");
|
|
|
10
40
|
*
|
|
11
41
|
* @param requestInputs - CSV of requests to be uploaded
|
|
12
42
|
* @param cached - The cached set of mapping values
|
|
13
|
-
* @param
|
|
43
|
+
* @param options - Options
|
|
14
44
|
* @returns [raw input, request input] list
|
|
15
45
|
*/
|
|
16
|
-
function mapCsvRowsToRequestInputs(requestInputs, cached, columnNameMap
|
|
46
|
+
function mapCsvRowsToRequestInputs(requestInputs, cached, { columnNameMap, identifierNameMap, attributeNameMap, requestAttributeKeys, defaultPhoneCountryCode = '1', // US
|
|
47
|
+
}) {
|
|
17
48
|
// map the CSV to request input
|
|
18
49
|
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)]),
|
|
50
|
+
return requestInputs.map((input) => {
|
|
51
|
+
// The extra identifiers to upload for this request
|
|
52
|
+
const attestedExtraIdentifiers = {};
|
|
53
|
+
Object.entries(identifierNameMap)
|
|
54
|
+
// filter out skipped identifiers
|
|
55
|
+
.filter(([, columnName]) => columnName !== constants_1.NONE)
|
|
56
|
+
.forEach(([identifierName, columnName]) => {
|
|
57
|
+
// Determine the identifier type being specified
|
|
58
|
+
const identifierType = Object.values(privacy_types_1.IdentifierType).includes(identifierName)
|
|
59
|
+
? identifierName
|
|
60
|
+
: privacy_types_1.IdentifierType.Custom;
|
|
61
|
+
// Only add the identifier if the value exists
|
|
62
|
+
const identifierValue = input[columnName];
|
|
63
|
+
if (identifierValue) {
|
|
64
|
+
// Initialize
|
|
65
|
+
if (!attestedExtraIdentifiers[identifierType]) {
|
|
66
|
+
attestedExtraIdentifiers[identifierType] = [];
|
|
51
67
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
68
|
+
// Add the identifier
|
|
69
|
+
attestedExtraIdentifiers[identifierType].push({
|
|
70
|
+
value: normalizeIdentifierValue(identifierValue, identifierType, defaultPhoneCountryCode),
|
|
71
|
+
name: identifierName,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// The extra attributes to upload for this request
|
|
76
|
+
const attributes = [];
|
|
77
|
+
Object.entries(attributeNameMap)
|
|
78
|
+
// filter out skipped attributes
|
|
79
|
+
.filter(([, columnName]) => columnName !== constants_1.NONE)
|
|
80
|
+
.forEach(([attributeName, columnName]) => {
|
|
81
|
+
var _a;
|
|
82
|
+
// Only add the identifier if the value exists
|
|
83
|
+
const attributeValueString = input[columnName];
|
|
84
|
+
if (attributeValueString) {
|
|
85
|
+
// Add the attribute
|
|
86
|
+
const isMulti = ((_a = requestAttributeKeys.find((attr) => attr.name === attributeName)) === null || _a === void 0 ? void 0 : _a.type) === 'MULTI_SELECT';
|
|
87
|
+
attributes.push({
|
|
88
|
+
values: isMulti
|
|
89
|
+
? (0, splitCsvToList_1.splitCsvToList)(attributeValueString)
|
|
90
|
+
: attributeValueString,
|
|
91
|
+
key: attributeName,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const requestTypeColumn = getMappedName(constants_1.ColumnName.RequestType);
|
|
96
|
+
const dataSubjectTypeColumn = getMappedName(constants_1.ColumnName.SubjectType);
|
|
97
|
+
return [
|
|
98
|
+
input,
|
|
99
|
+
{
|
|
100
|
+
email: input[getMappedName(constants_1.ColumnName.Email)],
|
|
101
|
+
attestedExtraIdentifiers,
|
|
102
|
+
attributes,
|
|
103
|
+
coreIdentifier: input[getMappedName(constants_1.ColumnName.CoreIdentifier)],
|
|
104
|
+
requestType: requestTypeColumn === constants_1.BULK_APPLY
|
|
105
|
+
? cached.requestTypeToRequestAction[constants_1.BLANK]
|
|
106
|
+
: cached.requestTypeToRequestAction[input[requestTypeColumn]],
|
|
107
|
+
subjectType: dataSubjectTypeColumn === constants_1.BULK_APPLY
|
|
108
|
+
? cached.subjectTypeToSubjectName[constants_1.BLANK]
|
|
109
|
+
: cached.subjectTypeToSubjectName[input[dataSubjectTypeColumn]],
|
|
110
|
+
...(getMappedName(constants_1.ColumnName.Locale) !== constants_1.NONE &&
|
|
111
|
+
input[getMappedName(constants_1.ColumnName.Locale)]
|
|
112
|
+
? {
|
|
113
|
+
locale: cached.languageToLocale[input[getMappedName(constants_1.ColumnName.Locale)]],
|
|
114
|
+
}
|
|
115
|
+
: {}),
|
|
116
|
+
...(getMappedName(constants_1.ColumnName.RequestStatus) !== constants_1.NONE &&
|
|
117
|
+
cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]] !== constants_1.NONE &&
|
|
118
|
+
input[getMappedName(constants_1.ColumnName.RequestStatus)]
|
|
119
|
+
? {
|
|
120
|
+
status: cached.statusToRequestStatus[input[getMappedName(constants_1.ColumnName.RequestStatus)]],
|
|
121
|
+
}
|
|
122
|
+
: {}),
|
|
123
|
+
...(getMappedName(constants_1.ColumnName.CreatedAt) !== constants_1.NONE &&
|
|
124
|
+
input[getMappedName(constants_1.ColumnName.CreatedAt)]
|
|
125
|
+
? {
|
|
126
|
+
createdAt: new Date(input[getMappedName(constants_1.ColumnName.CreatedAt)]),
|
|
127
|
+
}
|
|
128
|
+
: {}),
|
|
129
|
+
...(getMappedName(constants_1.ColumnName.DataSiloIds) !== constants_1.NONE &&
|
|
130
|
+
input[getMappedName(constants_1.ColumnName.DataSiloIds)]
|
|
131
|
+
? {
|
|
132
|
+
dataSiloIds: (0, splitCsvToList_1.splitCsvToList)(input[getMappedName(constants_1.ColumnName.DataSiloIds)]),
|
|
133
|
+
}
|
|
134
|
+
: {}),
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
});
|
|
55
138
|
}
|
|
56
139
|
exports.mapCsvRowsToRequestInputs = mapCsvRowsToRequestInputs;
|
|
57
140
|
//# 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapRequestEnumValues.d.ts","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"mapRequestEnumValues.d.ts","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,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,CA0Df"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.mapRequestEnumValues = void 0;
|
|
7
|
+
const colors_1 = __importDefault(require("colors"));
|
|
4
8
|
const privacy_types_1 = require("@transcend-io/privacy-types");
|
|
5
9
|
const internationalization_1 = require("@transcend-io/internationalization");
|
|
6
10
|
const logger_1 = require("../logger");
|
|
@@ -22,19 +26,19 @@ async function mapRequestEnumValues(client, requests, { fileName, state, columnN
|
|
|
22
26
|
const getMappedName = (attribute) => cached.columnNames[attribute] || columnNameMap[attribute];
|
|
23
27
|
// Fetch all data subjects in the organization
|
|
24
28
|
const { internalSubjects } = await (0, graphql_1.makeGraphQLRequest)(client, graphql_1.DATA_SUBJECTS);
|
|
25
|
-
logger_1.logger.info('
|
|
29
|
+
logger_1.logger.info(colors_1.default.magenta('Determining mapping of columns for request action'));
|
|
26
30
|
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
31
|
cached.requestTypeToRequestAction = requestTypeToRequestAction;
|
|
28
32
|
state.setValue(cached, fileName);
|
|
29
|
-
logger_1.logger.info('
|
|
33
|
+
logger_1.logger.info(colors_1.default.magenta('Determining mapping of columns for subject'));
|
|
30
34
|
const subjectTypeToSubjectName = await (0, mapEnumValues_1.mapEnumValues)((0, getUniqueValuesForColumn_1.getUniqueValuesForColumn)(requests, getMappedName(constants_1.ColumnName.SubjectType)), internalSubjects.map(({ type }) => type), cached.subjectTypeToSubjectName || {});
|
|
31
35
|
cached.subjectTypeToSubjectName = subjectTypeToSubjectName;
|
|
32
36
|
state.setValue(cached, fileName);
|
|
33
|
-
logger_1.logger.info('
|
|
37
|
+
logger_1.logger.info(colors_1.default.magenta('Determining mapping of columns for locale'));
|
|
34
38
|
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
39
|
cached.languageToLocale = languageToLocale;
|
|
36
40
|
state.setValue(cached, fileName);
|
|
37
|
-
logger_1.logger.info('
|
|
41
|
+
logger_1.logger.info(colors_1.default.magenta('Determining mapping of columns for request status'));
|
|
38
42
|
const requestStatusColumn = getMappedName(constants_1.ColumnName.RequestStatus);
|
|
39
43
|
const statusToRequestStatus = requestStatusColumn === constants_1.NONE
|
|
40
44
|
? {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapRequestEnumValues.js","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapRequestEnumValues.js","sourceRoot":"","sources":["../../src/requests/mapRequestEnumValues.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ function parseAttributesFromString(attributes) {
|
|
|
25
25
|
values: attributeValues,
|
|
26
26
|
};
|
|
27
27
|
});
|
|
28
|
-
logger_1.logger.info(colors_1.default.magenta('Attributes:'));
|
|
28
|
+
logger_1.logger.info(colors_1.default.magenta('Attributes to apply to all requests:'));
|
|
29
29
|
logger_1.logger.info(colors_1.default.magenta(JSON.stringify(parsedAttributes, null, 2)));
|
|
30
30
|
return parsedAttributes;
|
|
31
31
|
}
|
|
@@ -1 +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,
|
|
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,sCAAsC,CAAC,CAAC,CAAC;IACpE,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"}
|
|
@@ -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;
|
|
@@ -44,7 +44,7 @@ export declare const PrivacyRequestResponse: t.TypeC<{
|
|
|
44
44
|
CUSTOM_OPT_OUT: unknown;
|
|
45
45
|
}>;
|
|
46
46
|
subjectType: t.StringC;
|
|
47
|
-
email: t.StringC
|
|
47
|
+
email: t.UnionC<[t.NullC, t.StringC]>;
|
|
48
48
|
coreIdentifier: t.StringC;
|
|
49
49
|
isSilent: t.BooleanC;
|
|
50
50
|
isTest: t.BooleanC;
|
|
@@ -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"}
|
|
@@ -18,9 +18,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
18
|
__setModuleDefault(result, mod);
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
21
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
25
|
exports.submitPrivacyRequest = exports.PrivacyRequestResponse = void 0;
|
|
23
26
|
const t = __importStar(require("io-ts"));
|
|
27
|
+
const uniq_1 = __importDefault(require("lodash/uniq"));
|
|
24
28
|
const type_utils_1 = require("@transcend-io/type-utils");
|
|
25
29
|
const privacy_types_1 = require("@transcend-io/privacy-types");
|
|
26
30
|
exports.PrivacyRequestResponse = t.type({
|
|
@@ -29,7 +33,7 @@ exports.PrivacyRequestResponse = t.type({
|
|
|
29
33
|
status: (0, type_utils_1.valuesOf)(privacy_types_1.RequestStatus),
|
|
30
34
|
type: (0, type_utils_1.valuesOf)(privacy_types_1.RequestAction),
|
|
31
35
|
subjectType: t.string,
|
|
32
|
-
email: t.string,
|
|
36
|
+
email: t.union([t.null, t.string]),
|
|
33
37
|
coreIdentifier: t.string,
|
|
34
38
|
isSilent: t.boolean,
|
|
35
39
|
isTest: t.boolean,
|
|
@@ -48,7 +52,20 @@ exports.PrivacyRequestResponse = t.type({
|
|
|
48
52
|
* @param options - Additional options
|
|
49
53
|
* @returns Successfully submitted request
|
|
50
54
|
*/
|
|
51
|
-
async function submitPrivacyRequest(sombra, input, {
|
|
55
|
+
async function submitPrivacyRequest(sombra, input, { details = '', isTest = false, emailIsVerified = true, isSilent = true, additionalAttributes = [], } = {}) {
|
|
56
|
+
// Merge the per-request attributes with the
|
|
57
|
+
// global attributes
|
|
58
|
+
const mergedAttributes = [...additionalAttributes];
|
|
59
|
+
(input.attributes || []).forEach((attribute) => {
|
|
60
|
+
const existing = mergedAttributes.find((attr) => attr.key === attribute.key);
|
|
61
|
+
if (existing) {
|
|
62
|
+
existing.values.push(...attribute.values);
|
|
63
|
+
existing.values = (0, uniq_1.default)(existing.values);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
mergedAttributes.push(attribute);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
52
69
|
// Make the GraphQL request
|
|
53
70
|
const response = await sombra
|
|
54
71
|
.post('v1/data-subject-request', {
|
|
@@ -57,15 +74,15 @@ async function submitPrivacyRequest(sombra, input, { attestedExtraIdentifiers =
|
|
|
57
74
|
subject: {
|
|
58
75
|
coreIdentifier: input.coreIdentifier,
|
|
59
76
|
email: input.email,
|
|
60
|
-
emailIsVerified
|
|
61
|
-
attestedExtraIdentifiers,
|
|
77
|
+
emailIsVerified,
|
|
78
|
+
attestedExtraIdentifiers: input.attestedExtraIdentifiers,
|
|
62
79
|
},
|
|
63
80
|
subjectType: input.subjectType,
|
|
64
|
-
isSilent
|
|
81
|
+
isSilent,
|
|
65
82
|
isTest,
|
|
66
83
|
...(input.locale ? { locale: input.locale } : {}),
|
|
67
84
|
details,
|
|
68
|
-
attributes:
|
|
85
|
+
attributes: mergedAttributes,
|
|
69
86
|
...(input.createdAt ? { createdAt: input.createdAt } : {}),
|
|
70
87
|
...(input.dataSiloIds ? { dataSiloIds: input.dataSiloIds } : {}),
|
|
71
88
|
...(input.status ? { completedRequestStatus: input.status } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submitPrivacyRequest.js","sourceRoot":"","sources":["../../src/requests/submitPrivacyRequest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"submitPrivacyRequest.js","sourceRoot":"","sources":["../../src/requests/submitPrivacyRequest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,uDAA+B;AAC/B,yDAAiE;AACjE,+DAKqC;AAKxB,QAAA,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM;IACZ,IAAI,EAAE,CAAC,CAAC,MAAM;IACd,MAAM,EAAE,IAAA,qBAAQ,EAAC,6BAAa,CAAC;IAC/B,IAAI,EAAE,IAAA,qBAAQ,EAAC,6BAAa,CAAC;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM;IACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAClC,cAAc,EAAE,CAAC,CAAC,MAAM;IACxB,QAAQ,EAAE,CAAC,CAAC,OAAO;IACnB,MAAM,EAAE,CAAC,CAAC,OAAO;IACjB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAA,qBAAQ,EAAC,8BAAc,CAAC,CAAC,CAAC;IACpD,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAA,qBAAQ,EAAC,yCAAyB,CAAC,CAAC,CAAC;IAC1E,eAAe,EAAE,CAAC,CAAC,KAAK,CACtB,CAAC,CAAC,IAAI,CAAC;QACL,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,EAAE,CAAC,CAAC,MAAM;KACf,CAAC,CACH;CACF,CAAC,CAAC;AAKH;;;;;;;GAOG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAW,EACX,KAA0B,EAC1B,EACE,OAAO,GAAG,EAAE,EACZ,MAAM,GAAG,KAAK,EACd,eAAe,GAAG,IAAI,EACtB,QAAQ,GAAG,IAAI,EACf,oBAAoB,GAAG,EAAE,MAYvB,EAAE;IAEN,4CAA4C;IAC5C,oBAAoB;IACpB,MAAM,gBAAgB,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;IACnD,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CACrC,CAAC;QACF,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,QAAQ,CAAC,MAAM,GAAG,IAAA,cAAI,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACzC;aAAM;YACL,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,MAAM,MAAM;SAC1B,IAAI,CAAC,yBAAyB,EAAE;QAC/B,IAAI,EAAE;YACJ,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,OAAO,EAAE;gBACP,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,eAAe;gBACf,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;aACzD;YACD,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ;YACR,MAAM;YACN,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO;YACP,UAAU,EAAE,gBAAgB;YAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE;KACF,CAAC;SACD,IAAI,EAAE,CAAC;IAEV,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAA,wBAAW,EAC9C,CAAC,CAAC,IAAI,CAAC;QACL,OAAO,EAAE,8BAAsB;KAChC,CAAC,EACF,QAAQ,CACT,CAAC;IACF,OAAO,eAAe,CAAC;AACzB,CAAC;AApED,oDAoEC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload a set of privacy requests from CSV
|
|
3
|
+
*
|
|
4
|
+
* @param options - Options
|
|
5
|
+
*/
|
|
6
|
+
export declare function uploadPrivacyRequestsFromCsv({ cacheFilepath, file, auth, sombraAuth, concurrency, defaultPhoneCountryCode, // USA
|
|
7
|
+
transcendApiUrl, attributes, emailIsVerified, clearSuccessfulRequests, clearFailingRequests, clearDuplicateRequests, skipFilterStep, isTest, isSilent, debug, dryRun, }: {
|
|
8
|
+
/** File to cache metadata about mapping of CSV shape to script */
|
|
9
|
+
cacheFilepath: string;
|
|
10
|
+
/** CSV file path */
|
|
11
|
+
file: string;
|
|
12
|
+
/** Transcend API key authentication */
|
|
13
|
+
auth: string;
|
|
14
|
+
/** Default country code for phone numbers */
|
|
15
|
+
defaultPhoneCountryCode?: string;
|
|
16
|
+
/** Concurrency to upload in */
|
|
17
|
+
concurrency?: number;
|
|
18
|
+
/** API URL for Transcend backend */
|
|
19
|
+
transcendApiUrl?: string;
|
|
20
|
+
/** Sombra API key authentication */
|
|
21
|
+
sombraAuth?: string;
|
|
22
|
+
/** Include debug logs */
|
|
23
|
+
debug?: boolean;
|
|
24
|
+
/** Skip the step where requests are filtered */
|
|
25
|
+
skipFilterStep?: boolean;
|
|
26
|
+
/** Whether test requests are being uploaded */
|
|
27
|
+
isTest?: boolean;
|
|
28
|
+
/** When true, clear out the failed requests from cache */
|
|
29
|
+
clearFailingRequests?: boolean;
|
|
30
|
+
/** When true, clear out the successful requests from cache */
|
|
31
|
+
clearSuccessfulRequests?: boolean;
|
|
32
|
+
/** When true, clear out duplicate requests from cache */
|
|
33
|
+
clearDuplicateRequests?: boolean;
|
|
34
|
+
/** Whether requests are uploaded in silent mode */
|
|
35
|
+
isSilent?: boolean;
|
|
36
|
+
/** Whether the email was verified up front */
|
|
37
|
+
emailIsVerified?: boolean;
|
|
38
|
+
/** Attributes string pre-parse */
|
|
39
|
+
attributes?: string[];
|
|
40
|
+
/** Whether a dry run is happening */
|
|
41
|
+
dryRun?: boolean;
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
//# sourceMappingURL=uploadPrivacyRequestsFromCsv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadPrivacyRequestsFromCsv.d.ts","sourceRoot":"","sources":["../../src/requests/uploadPrivacyRequestsFromCsv.ts"],"names":[],"mappings":"AAyBA;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,WAAgB,EAChB,uBAA6B,EAAE,MAAM;AACrC,eAA4C,EAC5C,UAAe,EACf,eAAsB,EACtB,uBAA+B,EAC/B,oBAA4B,EAC5B,sBAA8B,EAC9B,cAAsB,EACtB,MAAc,EACd,QAAe,EACf,KAAa,EACb,MAAc,GACf,EAAE;IACD,kEAAkE;IAClE,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,8DAA8D;IAC9D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqQhB"}
|