@transcend-io/cli 4.132.1 → 4.132.3
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 +4 -1
- package/build/consent-manager/fetchConsentPreferences.js +1 -1
- package/build/consent-manager/fetchConsentPreferences.js.map +1 -1
- package/build/consent-manager/uploadConsentPreferences.d.ts +15 -7
- package/build/consent-manager/uploadConsentPreferences.d.ts.map +1 -1
- package/build/consent-manager/uploadConsentPreferences.js +64 -16
- package/build/consent-manager/uploadConsentPreferences.js.map +1 -1
- package/build/tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2079,9 +2079,12 @@ Each row in the CSV must include:
|
|
|
2079
2079
|
| timestamp | Timestamp for when consent was collected for that user | string - timestamp | N/A | true |
|
|
2080
2080
|
| purposes | JSON map from consent purpose name -> boolean indicating whether user has opted in or out of that purpose | {[k in string]: boolean } | {} | false |
|
|
2081
2081
|
| confirmed | Whether consent preferences have been explicitly confirmed or inferred | boolean | true | false |
|
|
2082
|
-
| updated |
|
|
2082
|
+
| updated | Has the consent been updated (including no-change confirmation) since default resolution | boolean | N/A | false |
|
|
2083
|
+
| prompted | Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js) | boolean | N/A | false |
|
|
2083
2084
|
| usp | US Privacy string | string - USP | N/A | false |
|
|
2084
2085
|
|
|
2086
|
+
An sample CSV can be found [here](./examples/preference-upload.csv).
|
|
2087
|
+
|
|
2085
2088
|
#### Authentication
|
|
2086
2089
|
|
|
2087
2090
|
In order to use this cli, you will first need to follow [this guide](https://docs.transcend.io/docs/consent/reference/managed-consent-database#authenticate-a-user's-consent) in order
|
|
@@ -60,7 +60,7 @@ async function fetchConsentPreferences(sombra, { partition, filterBy = {}, limit
|
|
|
60
60
|
.post('v1/consent-preferences', {
|
|
61
61
|
json: {
|
|
62
62
|
partition,
|
|
63
|
-
...
|
|
63
|
+
...filterBy,
|
|
64
64
|
// using lastKey to paginate if it exists (will not for first iteration)
|
|
65
65
|
startKey: currentLastKey || undefined,
|
|
66
66
|
limit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchConsentPreferences.js","sourceRoot":"","sources":["../../src/consent-manager/fetchConsentPreferences.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,yDAAuD;AAG1C,QAAA,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;CACxC,CAAC,CAAC;AAKU,QAAA,yBAAyB,GAAG,CAAC,CAAC,YAAY,CAAC;IACtD,CAAC,CAAC,IAAI,CAAC;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAiB,CAAC;KAClC,CAAC;IACF,CAAC,CAAC,OAAO,CAAC;QACR,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,MAAM;SACpB,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAOH;;;;;;GAMG;AACI,KAAK,UAAU,uBAAuB,CAC3C,MAAW,EACX,EACE,SAAS,EACT,QAAQ,GAAG,EAAE,EACb,KAAK,GAAG,EAAE,GAeX;IAED,IAAI,cAAoD,CAAC;IACzD,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,IAAI,cAAc,GAAG,IAAI,CAAC;IAE1B,OAAO,cAAc,EAAE;QACrB,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM;aAC1B,IAAI,CAAC,wBAAwB,EAAE;YAC9B,IAAI,EAAE;gBACJ,SAAS;gBACT,GAAG,
|
|
1
|
+
{"version":3,"file":"fetchConsentPreferences.js","sourceRoot":"","sources":["../../src/consent-manager/fetchConsentPreferences.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAA2B;AAC3B,yDAAuD;AAG1C,QAAA,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM;IACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;CACxC,CAAC,CAAC;AAKU,QAAA,yBAAyB,GAAG,CAAC,CAAC,YAAY,CAAC;IACtD,CAAC,CAAC,IAAI,CAAC;QACL,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAiB,CAAC;KAClC,CAAC;IACF,CAAC,CAAC,OAAO,CAAC;QACR,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;YACjB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,SAAS,EAAE,CAAC,CAAC,MAAM;SACpB,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAOH;;;;;;GAMG;AACI,KAAK,UAAU,uBAAuB,CAC3C,MAAW,EACX,EACE,SAAS,EACT,QAAQ,GAAG,EAAE,EACb,KAAK,GAAG,EAAE,GAeX;IAED,IAAI,cAAoD,CAAC;IACzD,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,IAAI,cAAc,GAAG,IAAI,CAAC;IAE1B,OAAO,cAAc,EAAE;QACrB,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM;aAC1B,IAAI,CAAC,wBAAwB,EAAE;YAC9B,IAAI,EAAE;gBACJ,SAAS;gBACT,GAAG,QAAQ;gBACX,wEAAwE;gBACxE,QAAQ,EAAE,cAAc,IAAI,SAAS;gBACrC,KAAK;aACN;SACF,CAAC;aACD,IAAI,EAAE,CAAC;QACV,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAA,wBAAW,EAAC,iCAAyB,EAAE,QAAQ,CAAC,CAAC;QAE5E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAChC,MAAM;SACP;QAED,8CAA8C;QAC9C,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAEpB,4CAA4C;QAC5C,cAAc,GAAG,OAAO,CAAC;QACzB,cAAc,GAAG,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KAC/D;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAvDD,0DAuDC"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import * as t from 'io-ts';
|
|
2
2
|
export declare const USP_STRING_REGEX: RegExp;
|
|
3
|
+
export declare const PurposeMap: t.RecordC<t.StringC, t.UnionC<[t.BooleanC, t.LiteralC<"Auto">]>>;
|
|
3
4
|
export declare const ManagedConsentDatabaseConsentPreference: t.IntersectionC<[t.TypeC<{
|
|
4
5
|
/** User ID */
|
|
5
6
|
userId: t.StringC;
|
|
6
7
|
/** Has the consent been updated (including no-change confirmation) since default resolution */
|
|
7
8
|
timestamp: t.StringC;
|
|
8
9
|
}>, t.PartialC<{
|
|
9
|
-
/**
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Purpose map
|
|
12
|
+
* This is a JSON object with keys as purpose names and values as booleans or 'Auto'
|
|
13
|
+
*/
|
|
14
|
+
purposes: t.StringC;
|
|
11
15
|
/** Was tracking consent confirmed by the user? If this is false, the consent was resolved from defaults & is not yet confirmed */
|
|
12
|
-
confirmed: t.
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
confirmed: t.UnionC<[t.LiteralC<"true">, t.LiteralC<"false">]>;
|
|
17
|
+
/**
|
|
18
|
+
* Has the consent been updated (including no-change confirmation) since default resolution
|
|
19
|
+
*/
|
|
20
|
+
updated: t.UnionC<[t.LiteralC<"true">, t.LiteralC<"false">]>;
|
|
21
|
+
/**
|
|
22
|
+
* Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js)
|
|
23
|
+
*/
|
|
24
|
+
prompted: t.UnionC<[t.LiteralC<"true">, t.LiteralC<"false">]>;
|
|
17
25
|
/** US Privacy (USP) String */
|
|
18
26
|
usp: t.StringC;
|
|
19
27
|
}>]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadConsentPreferences.d.ts","sourceRoot":"","sources":["../../src/consent-manager/uploadConsentPreferences.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"uploadConsentPreferences.d.ts","sourceRoot":"","sources":["../../src/consent-manager/uploadConsentPreferences.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAQ3B,eAAO,MAAM,gBAAgB,QAA6B,CAAC;AAE3D,eAAO,MAAM,UAAU,kEAGtB,CAAC;AAEF,eAAO,MAAM,uCAAuC;IAEhD,cAAc;;IAEd,+FAA+F;;;IAI/F;;;OAGG;;IAEH,kIAAkI;;IAElI;;OAEG;;IAEH;;OAEG;;IAEH,8BAA8B;;IAGhC,CAAC;AAEH,oBAAoB;AACpB,MAAM,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAC5D,OAAO,uCAAuC,CAC/C,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAiB,EACjB,YAA4C,GAC7C,EAAE;IACD,4BAA4B;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,EAAE,uCAAuC,EAAE,CAAC;IACvD,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2JhB"}
|
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.uploadConsentPreferences = exports.ManagedConsentDatabaseConsentPreference = exports.USP_STRING_REGEX = void 0;
|
|
29
|
+
exports.uploadConsentPreferences = exports.ManagedConsentDatabaseConsentPreference = exports.PurposeMap = exports.USP_STRING_REGEX = void 0;
|
|
30
30
|
const graphql_1 = require("../graphql");
|
|
31
31
|
const colors_1 = __importDefault(require("colors"));
|
|
32
32
|
const t = __importStar(require("io-ts"));
|
|
@@ -35,7 +35,9 @@ const bluebird_1 = require("bluebird");
|
|
|
35
35
|
const createConsentToken_1 = require("./createConsentToken");
|
|
36
36
|
const logger_1 = require("../logger");
|
|
37
37
|
const cli_progress_1 = __importDefault(require("cli-progress"));
|
|
38
|
+
const type_utils_1 = require("@transcend-io/type-utils");
|
|
38
39
|
exports.USP_STRING_REGEX = /^[0-9][Y|N]([Y|N])[Y|N]$/;
|
|
40
|
+
exports.PurposeMap = t.record(t.string, t.union([t.boolean, t.literal('Auto')]));
|
|
39
41
|
exports.ManagedConsentDatabaseConsentPreference = t.intersection([
|
|
40
42
|
t.type({
|
|
41
43
|
/** User ID */
|
|
@@ -44,14 +46,21 @@ exports.ManagedConsentDatabaseConsentPreference = t.intersection([
|
|
|
44
46
|
timestamp: t.string,
|
|
45
47
|
}),
|
|
46
48
|
t.partial({
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Purpose map
|
|
51
|
+
* This is a JSON object with keys as purpose names and values as booleans or 'Auto'
|
|
52
|
+
*/
|
|
53
|
+
purposes: t.string,
|
|
49
54
|
/** Was tracking consent confirmed by the user? If this is false, the consent was resolved from defaults & is not yet confirmed */
|
|
50
|
-
confirmed: t.
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
confirmed: t.union([t.literal('true'), t.literal('false')]),
|
|
56
|
+
/**
|
|
57
|
+
* Has the consent been updated (including no-change confirmation) since default resolution
|
|
58
|
+
*/
|
|
59
|
+
updated: t.union([t.literal('true'), t.literal('false')]),
|
|
60
|
+
/**
|
|
61
|
+
* Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js)
|
|
62
|
+
*/
|
|
63
|
+
prompted: t.union([t.literal('true'), t.literal('false')]),
|
|
55
64
|
/** US Privacy (USP) String */
|
|
56
65
|
usp: t.string,
|
|
57
66
|
}),
|
|
@@ -69,6 +78,24 @@ async function uploadConsentPreferences({ base64EncryptionKey, base64SigningKey,
|
|
|
69
78
|
if (invalidUspStrings.length > 0) {
|
|
70
79
|
throw new Error(`Received invalid usp strings: ${JSON.stringify(invalidUspStrings, null, 2)}`);
|
|
71
80
|
}
|
|
81
|
+
// Ensure purpose maps are valid
|
|
82
|
+
const invalidPurposeMaps = preferences
|
|
83
|
+
.map((pref, ind) => [pref, ind])
|
|
84
|
+
.filter(([pref]) => {
|
|
85
|
+
if (!pref.purposes) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
(0, type_utils_1.decodeCodec)(exports.PurposeMap, pref.purposes);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (invalidPurposeMaps.length > 0) {
|
|
97
|
+
throw new Error(`Received invalid purpose maps: ${JSON.stringify(invalidPurposeMaps, null, 2)}`);
|
|
98
|
+
}
|
|
72
99
|
// Ensure usp or preferences are provided
|
|
73
100
|
const invalidInputs = preferences.filter((pref) => !pref.usp && !pref.purposes);
|
|
74
101
|
if (invalidInputs.length > 0) {
|
|
@@ -82,7 +109,8 @@ async function uploadConsentPreferences({ base64EncryptionKey, base64SigningKey,
|
|
|
82
109
|
// Build a GraphQL client
|
|
83
110
|
let total = 0;
|
|
84
111
|
progressBar.start(preferences.length, 0);
|
|
85
|
-
await (0, bluebird_1.map)(preferences, async ({ userId, confirmed = true, purposes, ...consent }) => {
|
|
112
|
+
await (0, bluebird_1.map)(preferences, async ({ userId, confirmed = 'true', updated, prompted, purposes, ...consent }) => {
|
|
113
|
+
var _a, _b;
|
|
86
114
|
const token = (0, createConsentToken_1.createConsentToken)(userId, base64EncryptionKey, base64SigningKey);
|
|
87
115
|
// parse usp string
|
|
88
116
|
const [, saleStatus] = consent.usp
|
|
@@ -92,17 +120,37 @@ async function uploadConsentPreferences({ base64EncryptionKey, base64SigningKey,
|
|
|
92
120
|
token,
|
|
93
121
|
partition,
|
|
94
122
|
consent: {
|
|
95
|
-
confirmed,
|
|
96
|
-
purposes: purposes
|
|
123
|
+
confirmed: confirmed === 'true',
|
|
124
|
+
purposes: purposes
|
|
125
|
+
? (0, type_utils_1.decodeCodec)(exports.PurposeMap, purposes)
|
|
126
|
+
: consent.usp
|
|
127
|
+
? { SaleOfInfo: saleStatus === 'Y' }
|
|
128
|
+
: {},
|
|
129
|
+
...(updated ? { updated: updated === 'true' } : {}),
|
|
130
|
+
...(prompted ? { prompted: prompted === 'true' } : {}),
|
|
97
131
|
...consent,
|
|
98
132
|
},
|
|
99
133
|
};
|
|
100
134
|
// Make the request
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
135
|
+
try {
|
|
136
|
+
await transcendConsentApi
|
|
137
|
+
.post('sync', {
|
|
138
|
+
json: input,
|
|
139
|
+
})
|
|
140
|
+
.json();
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
try {
|
|
144
|
+
const parsed = JSON.parse(((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.body) || '{}');
|
|
145
|
+
if (parsed.error) {
|
|
146
|
+
logger_1.logger.error(colors_1.default.red(`Error: ${parsed.error}`));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
// continue
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`Received an error from server: ${((_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.body) || (err === null || err === void 0 ? void 0 : err.message)}`);
|
|
153
|
+
}
|
|
106
154
|
total += 1;
|
|
107
155
|
progressBar.update(total);
|
|
108
156
|
}, { concurrency });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadConsentPreferences.js","sourceRoot":"","sources":["../../src/consent-manager/uploadConsentPreferences.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAA+D;AAC/D,oDAA4B;AAC5B,yCAA2B;AAC3B,4CAA6D;AAC7D,uCAA+B;AAC/B,6DAA0D;AAC1D,sCAAmC;AACnC,gEAAuC;
|
|
1
|
+
{"version":3,"file":"uploadConsentPreferences.js","sourceRoot":"","sources":["../../src/consent-manager/uploadConsentPreferences.ts"],"names":[],"mappings":"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"}
|