@transcend-io/cli 4.132.2 → 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 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 | Time consent preferences were last updated | string - timestamp | N/A | false |
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
@@ -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
- /** Purpose map */
10
- purposes: t.RecordC<t.StringC, t.UnionC<[t.BooleanC, t.LiteralC<"Auto">]>>;
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.BooleanC;
13
- /** Time updated */
14
- updated: t.BooleanC;
15
- /** Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js) */
16
- prompted: t.BooleanC;
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;AAO3B,eAAO,MAAM,gBAAgB,QAA6B,CAAC;AAE3D,eAAO,MAAM,uCAAuC;IAEhD,cAAc;;IAEd,+FAA+F;;;IAI/F,kBAAkB;;IAElB,kIAAkI;;IAElI,mBAAmB;;IAEnB,sGAAsG;;IAEtG,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,CAoGhB"}
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
- /** Purpose map */
48
- purposes: t.record(t.string, t.union([t.boolean, t.literal('Auto')])),
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.boolean,
51
- /** Time updated */
52
- updated: t.boolean,
53
- /** Whether or not the UI has been shown to the end-user (undefined in older versions of airgap.js) */
54
- prompted: t.boolean,
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 || (consent.usp ? { SaleOfInfo: saleStatus === 'Y' } : {}),
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
- await transcendConsentApi
102
- .post('sync', {
103
- json: input,
104
- })
105
- .json();
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":"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"}
1
+ {"version":3,"file":"uploadConsentPreferences.js","sourceRoot":"","sources":["../../src/consent-manager/uploadConsentPreferences.ts"],"names":[],"mappings":"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"}