@walkeros/cli 4.7.1-next-1791015692826 → 4.7.2-next-1791147139360
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/CHANGELOG.md +26 -6
- package/dist/cli.js +17 -14
- package/dist/examples/flow-complete.json +22 -22
- package/dist/examples/flow-complete.md +4 -4
- package/dist/examples/index.js +23 -23
- package/dist/examples/index.js.map +1 -1
- package/dist/index.js +118 -117
- package/dist/index.js.map +1 -1
- package/examples/flow-complete.json +22 -22
- package/examples/flow-complete.md +4 -4
- package/package.json +29 -29
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
# @walkeros/cli
|
|
2
2
|
|
|
3
|
-
## 4.7.
|
|
3
|
+
## 4.7.2-next-1791147139360
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ff23953: A tool refused for a missing role, scope or feature no longer
|
|
8
|
+
suggests logging in; that hint now appears only when the login is rejected or
|
|
9
|
+
missing. Project commands now report error codes such as `FORBIDDEN` in the
|
|
10
|
+
machine-readable error line and show upgrade instructions when the app needs a
|
|
11
|
+
newer CLI.
|
|
12
|
+
- ff23953: The MCP setup-mapping prompt, the MCP instructions, the schema
|
|
13
|
+
descriptions and the flow-complete example no longer claim that a mapping
|
|
14
|
+
rule's `consent` gates events. A rule's `consent` is not enforced yet; to
|
|
15
|
+
require consent for a destination, set `consent` in the destination's config.
|
|
16
|
+
- Updated dependencies [ff23953]
|
|
17
|
+
- @walkeros/core@4.7.2-next-1791147139360
|
|
18
|
+
- @walkeros/collector@4.7.2-next-1791147139360
|
|
19
|
+
- @walkeros/server-core@4.7.2-next-1791147139360
|
|
20
|
+
- @walkeros/server-destination-api@4.7.2-next-1791147139360
|
|
21
|
+
- @walkeros/transformer-validate@4.7.2-next-1791147139360
|
|
22
|
+
|
|
23
|
+
## 4.7.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
6
26
|
|
|
@@ -21,11 +41,11 @@
|
|
|
21
41
|
- Updated dependencies [0635330]
|
|
22
42
|
- Updated dependencies [0635330]
|
|
23
43
|
- Updated dependencies [91e9aeb]
|
|
24
|
-
- @walkeros/collector@4.7.1
|
|
25
|
-
- @walkeros/core@4.7.1
|
|
26
|
-
- @walkeros/server-core@4.7.1
|
|
27
|
-
- @walkeros/server-destination-api@4.7.1
|
|
28
|
-
- @walkeros/transformer-validate@4.7.1
|
|
44
|
+
- @walkeros/collector@4.7.1
|
|
45
|
+
- @walkeros/core@4.7.1
|
|
46
|
+
- @walkeros/server-core@4.7.1
|
|
47
|
+
- @walkeros/server-destination-api@4.7.1
|
|
48
|
+
- @walkeros/transformer-validate@4.7.1
|
|
29
49
|
|
|
30
50
|
## 4.7.0
|
|
31
51
|
|
package/dist/cli.js
CHANGED
|
@@ -43,6 +43,11 @@ var init_client_context = __esm({
|
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
// src/core/api-error.ts
|
|
46
|
+
function notAuthenticatedError() {
|
|
47
|
+
return new ApiError("Not authenticated. Run `walkeros auth login` first.", {
|
|
48
|
+
code: "UNAUTHORIZED"
|
|
49
|
+
});
|
|
50
|
+
}
|
|
46
51
|
function extractApiErrorOptions(error, fallbackMessage) {
|
|
47
52
|
if (!error || typeof error !== "object" || !("error" in error) || typeof error.error !== "object") {
|
|
48
53
|
return null;
|
|
@@ -1732,6 +1737,7 @@ var init_config_file = __esm({
|
|
|
1732
1737
|
"src/lib/config-file.ts"() {
|
|
1733
1738
|
"use strict";
|
|
1734
1739
|
init_define_CLIENT_OPERATION_DIGESTS();
|
|
1740
|
+
init_api_error();
|
|
1735
1741
|
}
|
|
1736
1742
|
});
|
|
1737
1743
|
|
|
@@ -4048,7 +4054,7 @@ var init_dev = __esm({
|
|
|
4048
4054
|
be2 = q4 = i4.object({ key: i4.string().optional().describe('Property path to extract from event (e.g., "data.id", "user.email")'), value: i4.union([i4.string(), i4.number(), i4.boolean()]).optional().describe("Static primitive value"), fn: i4.string().optional().describe("Custom transformation function as string (serialized)"), map: he2.optional().describe("Object mapping: transform event data to structured output"), loop: me2.optional().describe("Loop transformation: [source, transform] for array processing"), set: ge2.optional().describe("Set of values: combine or select from multiple values"), consent: V3.optional().describe("Required consent states to include this value"), condition: i4.string().optional().describe("Condition function as string: return true to include value"), validate: i4.string().optional().describe("Validation function as string: return true if value is valid") }).refine((e6) => Object.keys(e6).length > 0, { message: "ValueConfig must have at least one property" }).meta({ id: "MappingValueConfig", title: "Mapping.ValueConfig", description: "Object-form value transformation with map/loop/set/condition/consent etc." }).describe("Value transformation configuration with multiple strategies");
|
|
4049
4055
|
ve2 = i4.record(i4.string(), ue2).meta({ id: "MappingPolicy", title: "Mapping.Policy", description: "Policy rules for event pre-processing (key \u2192 value transformation)." }).describe("Policy rules for event pre-processing (key \u2192 value mapping)");
|
|
4050
4056
|
ye2 = i4.object({ name: i4.string().nullable().optional(), data: i4.union([ue2, fe2]).nullable().optional(), settings: i4.unknown().nullable().optional(), condition: i4.string().nullable().optional(), consent: V3.nullable().optional(), policy: ve2.nullable().optional(), batch: i4.union([i4.number(), i4.object({ wait: i4.number().optional(), size: i4.number().optional(), age: i4.number().optional() })]).nullable().optional(), include: i4.array(i4.string()).nullable().optional(), ignore: i4.boolean().nullable().optional(), silent: i4.boolean().nullable().optional() }).meta({ id: "MappingRulePatch", title: "Mapping.RulePatch", description: "Partial rule deep-merged onto a package-shipped default; a null value clears the inherited field." }).describe("Partial rule for `extend`; null clears an inherited field");
|
|
4051
|
-
Se = i4.object({ name: i4.string().optional().describe('Custom event name override (e.g., "view_item" for "product view")'), data: i4.union([ue2, fe2]).optional().describe("Data transformation rules for event"), settings: i4.unknown().optional().describe("Destination-specific settings for this event mapping"), condition: i4.string().optional().describe("Condition function as string: return true to process event"), consent: V3.optional().describe("
|
|
4057
|
+
Se = i4.object({ name: i4.string().optional().describe('Custom event name override (e.g., "view_item" for "product view")'), data: i4.union([ue2, fe2]).optional().describe("Data transformation rules for event"), settings: i4.unknown().optional().describe("Destination-specific settings for this event mapping"), condition: i4.string().optional().describe("Condition function as string: return true to process event"), consent: V3.optional().describe("Not enforced yet. To require consent for a destination, set consent in its config."), policy: ve2.optional().describe("Event-level policy overrides (applied after config-level policy)"), batch: i4.union([i4.number(), i4.object({ wait: i4.number().optional(), size: i4.number().optional(), age: i4.number().optional() })]).optional().describe("Batch scheduling: bare number is the debounce wait window (legacy); object form supports wait/size/age."), include: i4.array(i4.string()).optional().describe('Event sections (e.g. ["context", "globals"]) flattened into context.data'), ignore: i4.boolean().optional().describe("Skip the event entirely. No push, no side effects. Use for suppression."), silent: i4.boolean().optional().describe("Run side effects (settings.identify, ...) but suppress the destination default push call."), extend: ye2.optional().describe("Merge mode: a partial rule deep-merged onto the package-shipped default at this key (instead of replacing it). A null value clears an inherited field."), remove: i4.array(i4.string()).optional().describe("Dotted paths stripped from the produced data payload after evaluation (applied last).") }).meta({ id: "MappingRule", title: "Mapping.Rule", description: "Configuration for transforming a single event at one stage of the flow (source or destination)." }).describe("Mapping rule for specific entity-action combination");
|
|
4052
4058
|
we = i4.record(i4.string(), i4.record(i4.string(), i4.union([Se, i4.array(Se)])).optional()).meta({ id: "MappingRules", title: "Mapping.Rules", description: 'Event mapping rules tree: entity \u2192 action \u2192 Rule (or Rule[]). Use "*" as wildcard for entity or action.' }).describe('Event mapping rules: entity \u2192 action \u2192 Rule. Keys match event name split by space. Use "*" as wildcard for entity or action. Priority: exact > entity wildcard > action wildcard > global wildcard (*\u2192*).');
|
|
4053
4059
|
ke2 = i4.object({ consent: V3.optional().describe("Required consent states to process any events"), data: i4.union([ue2, fe2]).optional().describe("Global data transformation applied to all events"), include: i4.array(i4.string()).optional().describe("Event sections to flatten into context.data"), mapping: we.optional().describe("Entity-action specific mapping rules"), policy: ve2.optional().describe("Pre-processing policy rules applied before mapping") }).meta({ id: "MappingConfig", title: "Mapping.Config", description: "Shared mapping configuration (consent, data, include, mapping, policy)." }).describe("Shared mapping configuration for sources and destinations");
|
|
4054
4060
|
Ce2 = i4.object({ eventMapping: Se.optional().describe("Resolved mapping rule for event"), mappingKey: i4.string().optional().describe('Mapping key used (e.g., "product.view")') }).meta({ id: "MappingResult", title: "Mapping.Result", description: "Mapping resolution result (matched rule + key)." }).describe("Mapping resolution result");
|
|
@@ -4160,7 +4166,7 @@ var init_dev = __esm({
|
|
|
4160
4166
|
rn2 = o3(Yt2);
|
|
4161
4167
|
sn2 = {};
|
|
4162
4168
|
t4(sn2, { ConfigSchema: () => an2, PartialConfigSchema: () => cn2, configJsonSchema: () => ln2, partialConfigJsonSchema: () => dn2 });
|
|
4163
|
-
an2 = i4.object({ settings: i4.any().meta({ id: "TransformerSettings", title: "Transformer.Settings", description: "Implementation-specific configuration (transformer-defined shape)." }).describe("Implementation-specific configuration").optional(), env: i4.any().meta({ id: "TransformerEnv", title: "Transformer.Env", description: "Environment dependencies (transformer-defined shape)." }).describe("Environment dependencies (platform-specific)").optional(), id: c2.describe("Transformer instance identifier (defaults to transformer key)").optional(), logger: ot2.optional().describe("Logger configuration (level, handler) to override the collector defaults"), before: Ue3.optional().describe("Pre-transformer chain that runs before this transformer pushes"), next: Ue3.optional().describe("Graph wiring to the next transformer in the chain"), cache: Ze3.optional().describe("Step-level cache configuration for this transformer"), state: i4.union([nt3, i4.array(nt3)]).optional().describe("Declarative store get/set operations applied around this transformer"), init: i4.boolean().describe("Whether to initialize immediately").optional(), disabled: i4.boolean().describe("Completely skip this transformer in chains").optional(), mock: i4.unknown().meta({ id: "TransformerMock", title: "Transformer.Mock", description: "Return this value instead of calling push(). Dev/testing only." }).optional().describe("Return this value instead of calling push(). Global mock for all chains. Dev/testing only."), chainMocks: i4.record(i4.string(), i4.unknown().meta({ id: "TransformerChainMock", title: "Transformer.ChainMock", description: "Chain-path-specific mock value. Dev/testing only." })).optional().describe("Path-specific mock values keyed by chain path. Takes precedence over global mock. Dev/testing only."), mapping: ke2.optional().describe("Declarative event-to-event mapping applied when this transformer step has no code. At this position, only event-mutating fields apply (policy, mapping[].policy, mapping[].name, mapping[].ignore,
|
|
4169
|
+
an2 = i4.object({ settings: i4.any().meta({ id: "TransformerSettings", title: "Transformer.Settings", description: "Implementation-specific configuration (transformer-defined shape)." }).describe("Implementation-specific configuration").optional(), env: i4.any().meta({ id: "TransformerEnv", title: "Transformer.Env", description: "Environment dependencies (transformer-defined shape)." }).describe("Environment dependencies (platform-specific)").optional(), id: c2.describe("Transformer instance identifier (defaults to transformer key)").optional(), logger: ot2.optional().describe("Logger configuration (level, handler) to override the collector defaults"), before: Ue3.optional().describe("Pre-transformer chain that runs before this transformer pushes"), next: Ue3.optional().describe("Graph wiring to the next transformer in the chain"), cache: Ze3.optional().describe("Step-level cache configuration for this transformer"), state: i4.union([nt3, i4.array(nt3)]).optional().describe("Declarative store get/set operations applied around this transformer"), init: i4.boolean().describe("Whether to initialize immediately").optional(), disabled: i4.boolean().describe("Completely skip this transformer in chains").optional(), mock: i4.unknown().meta({ id: "TransformerMock", title: "Transformer.Mock", description: "Return this value instead of calling push(). Dev/testing only." }).optional().describe("Return this value instead of calling push(). Global mock for all chains. Dev/testing only."), chainMocks: i4.record(i4.string(), i4.unknown().meta({ id: "TransformerChainMock", title: "Transformer.ChainMock", description: "Chain-path-specific mock value. Dev/testing only." })).optional().describe("Path-specific mock values keyed by chain path. Takes precedence over global mock. Dev/testing only."), mapping: ke2.optional().describe("Declarative event-to-event mapping applied when this transformer step has no code. At this position, only event-mutating fields apply (policy, mapping[].policy, mapping[].name, mapping[].ignore, include); consent is not enforced and vendor-payload fields are ignored.") }).strict().meta({ id: "TransformerConfig", title: "Transformer.Config", description: "Transformer configuration (settings, env, chain wiring, cache, mocks)." }).describe("Transformer configuration");
|
|
4164
4170
|
cn2 = an2.partial().meta({ id: "TransformerPartialConfig", title: "Transformer.PartialConfig", description: "Partial transformer configuration with all fields optional." }).describe("Partial transformer configuration with all fields optional");
|
|
4165
4171
|
ln2 = o3(an2);
|
|
4166
4172
|
dn2 = o3(cn2);
|
|
@@ -4614,8 +4620,7 @@ function createApiClient() {
|
|
|
4614
4620
|
// here would go stale and never pick up a refresh.
|
|
4615
4621
|
async onRequest({ request }) {
|
|
4616
4622
|
const token = await resolveAccessToken();
|
|
4617
|
-
if (!token)
|
|
4618
|
-
throw new Error("Not authenticated. Run `walkeros auth login` first.");
|
|
4623
|
+
if (!token) throw notAuthenticatedError();
|
|
4619
4624
|
requireSecureUrl(request.url);
|
|
4620
4625
|
request.headers.set("Authorization", `Bearer ${token}`);
|
|
4621
4626
|
return request;
|
|
@@ -4627,6 +4632,7 @@ var init_api_client = __esm({
|
|
|
4627
4632
|
"src/core/api-client.ts"() {
|
|
4628
4633
|
"use strict";
|
|
4629
4634
|
init_define_CLIENT_OPERATION_DIGESTS();
|
|
4635
|
+
init_api_error();
|
|
4630
4636
|
init_auth();
|
|
4631
4637
|
init_config_file();
|
|
4632
4638
|
init_secure_url();
|
|
@@ -4640,7 +4646,7 @@ async function listProjects(options = {}) {
|
|
|
4640
4646
|
const { data, error } = await client.GET("/api/projects", {
|
|
4641
4647
|
params: { query: { cursor: options.cursor, limit: options.limit } }
|
|
4642
4648
|
});
|
|
4643
|
-
if (error)
|
|
4649
|
+
if (error) throwApiError(error, "Failed to list projects");
|
|
4644
4650
|
return data;
|
|
4645
4651
|
}
|
|
4646
4652
|
async function getProject(options = {}) {
|
|
@@ -4649,7 +4655,7 @@ async function getProject(options = {}) {
|
|
|
4649
4655
|
const { data, error } = await client.GET("/api/projects/{projectId}", {
|
|
4650
4656
|
params: { path: { projectId: id } }
|
|
4651
4657
|
});
|
|
4652
|
-
if (error)
|
|
4658
|
+
if (error) throwApiError(error, "Failed to get project");
|
|
4653
4659
|
return data;
|
|
4654
4660
|
}
|
|
4655
4661
|
async function createProject(options) {
|
|
@@ -4657,8 +4663,7 @@ async function createProject(options) {
|
|
|
4657
4663
|
const { data, error } = await client.POST("/api/projects", {
|
|
4658
4664
|
body: { name: options.name }
|
|
4659
4665
|
});
|
|
4660
|
-
if (error)
|
|
4661
|
-
throw new Error(error.error?.message || "Failed to create project");
|
|
4666
|
+
if (error) throwApiError(error, "Failed to create project");
|
|
4662
4667
|
return data;
|
|
4663
4668
|
}
|
|
4664
4669
|
async function updateProject(options) {
|
|
@@ -4668,8 +4673,7 @@ async function updateProject(options) {
|
|
|
4668
4673
|
params: { path: { projectId: id } },
|
|
4669
4674
|
body: { name: options.name }
|
|
4670
4675
|
});
|
|
4671
|
-
if (error)
|
|
4672
|
-
throw new Error(error.error?.message || "Failed to update project");
|
|
4676
|
+
if (error) throwApiError(error, "Failed to update project");
|
|
4673
4677
|
return data;
|
|
4674
4678
|
}
|
|
4675
4679
|
async function deleteProject(options = {}) {
|
|
@@ -4678,8 +4682,7 @@ async function deleteProject(options = {}) {
|
|
|
4678
4682
|
const { data, error } = await client.DELETE("/api/projects/{projectId}", {
|
|
4679
4683
|
params: { path: { projectId: id } }
|
|
4680
4684
|
});
|
|
4681
|
-
if (error)
|
|
4682
|
-
throw new Error(error.error?.message || "Failed to delete project");
|
|
4685
|
+
if (error) throwApiError(error, "Failed to delete project");
|
|
4683
4686
|
if (getDefaultProject() === id) clearDefaultProject();
|
|
4684
4687
|
return data ?? { success: true };
|
|
4685
4688
|
}
|
|
@@ -6765,7 +6768,7 @@ function Ln(e6, t5, n6, o5) {
|
|
|
6765
6768
|
if (!r6 || !i6) throw new Pt("Event name is invalid");
|
|
6766
6769
|
const { timestamp: a5 = Date.now(), name: c3 = `${r6} ${i6}`, data: u4 = {}, context: d3 = {}, globals: l4 = {}, custom: f4 = {}, user: p4 = o5.user, nested: g4 = [], consent: h3 = o5.consent, id: m4 = Ze(), trigger: w4 = "", entity: v4 = r6, action: y4 = i6, timing: b4 = 0, source: k4 = { type: "collector", schema: "4" } } = t5, S3 = k4 ?? { type: "collector", schema: "4" }, _3 = S3.count ?? (e6.count += 1), E3 = S3.trace ?? n6?._meta.trace ?? e6.trace, O3 = { ...S3, count: _3 };
|
|
6767
6770
|
void 0 !== E3 && (O3.trace = E3);
|
|
6768
|
-
const q5 = e6.name ?? S3.platform ?? "default", C5 = e6.release ?? "4.7.
|
|
6771
|
+
const q5 = e6.name ?? S3.platform ?? "default", C5 = e6.release ?? "4.7.2-next-1791147139360";
|
|
6769
6772
|
O3.release = { ...S3.release, [q5]: C5 };
|
|
6770
6773
|
return { name: c3, data: u4, context: d3, globals: be(o5.globals, l4), custom: f4, user: p4, nested: g4, consent: h3, id: m4, trigger: w4, entity: v4, action: y4, timestamp: a5, timing: b4, source: O3 };
|
|
6771
6774
|
}
|
|
@@ -15546,7 +15549,7 @@ init_dist();
|
|
|
15546
15549
|
import * as fs23 from "fs";
|
|
15547
15550
|
import * as path22 from "path";
|
|
15548
15551
|
import Ajv from "ajv";
|
|
15549
|
-
var CLIENT_HEADER = "walkeros-cli/4.7.
|
|
15552
|
+
var CLIENT_HEADER = "walkeros-cli/4.7.2-next-1791147139360";
|
|
15550
15553
|
function createSettingsContext(configDir) {
|
|
15551
15554
|
return { configDir, cache: /* @__PURE__ */ new Map(), compiled: /* @__PURE__ */ new Map() };
|
|
15552
15555
|
}
|
|
@@ -241,25 +241,25 @@
|
|
|
241
241
|
"bundle": {
|
|
242
242
|
"packages": {
|
|
243
243
|
"@walkeros/collector": {
|
|
244
|
-
"version": "4.7.
|
|
244
|
+
"version": "4.7.2-next-1791147139360"
|
|
245
245
|
},
|
|
246
246
|
"@walkeros/web-source-cmp-usercentrics": {
|
|
247
|
-
"version": "4.7.
|
|
247
|
+
"version": "4.7.2-next-1791147139360"
|
|
248
248
|
},
|
|
249
249
|
"@walkeros/web-source-session": {
|
|
250
|
-
"version": "4.7.
|
|
250
|
+
"version": "4.7.2-next-1791147139360"
|
|
251
251
|
},
|
|
252
252
|
"@walkeros/web-source-datalayer": {
|
|
253
|
-
"version": "4.7.
|
|
253
|
+
"version": "4.7.2-next-1791147139360"
|
|
254
254
|
},
|
|
255
255
|
"@walkeros/web-source-browser": {
|
|
256
|
-
"version": "4.7.
|
|
256
|
+
"version": "4.7.2-next-1791147139360"
|
|
257
257
|
},
|
|
258
258
|
"@walkeros/web-destination-gtag": {
|
|
259
|
-
"version": "4.7.
|
|
259
|
+
"version": "4.7.2-next-1791147139360"
|
|
260
260
|
},
|
|
261
261
|
"@walkeros/web-destination-api": {
|
|
262
|
-
"version": "4.7.
|
|
262
|
+
"version": "4.7.2-next-1791147139360"
|
|
263
263
|
}
|
|
264
264
|
},
|
|
265
265
|
"env": {
|
|
@@ -1764,40 +1764,40 @@
|
|
|
1764
1764
|
"bundle": {
|
|
1765
1765
|
"packages": {
|
|
1766
1766
|
"@walkeros/collector": {
|
|
1767
|
-
"version": "4.7.
|
|
1767
|
+
"version": "4.7.2-next-1791147139360"
|
|
1768
1768
|
},
|
|
1769
1769
|
"@walkeros/server-source-express": {
|
|
1770
|
-
"version": "4.7.
|
|
1770
|
+
"version": "4.7.2-next-1791147139360"
|
|
1771
1771
|
},
|
|
1772
1772
|
"@walkeros/transformer-ga4": {
|
|
1773
|
-
"version": "4.7.
|
|
1773
|
+
"version": "4.7.2-next-1791147139360"
|
|
1774
1774
|
},
|
|
1775
1775
|
"@walkeros/transformer-validate": {
|
|
1776
|
-
"version": "4.7.
|
|
1776
|
+
"version": "4.7.2-next-1791147139360"
|
|
1777
1777
|
},
|
|
1778
1778
|
"@walkeros/server-transformer-bot": {
|
|
1779
|
-
"version": "4.7.
|
|
1779
|
+
"version": "4.7.2-next-1791147139360"
|
|
1780
1780
|
},
|
|
1781
1781
|
"@walkeros/server-transformer-fingerprint": {
|
|
1782
|
-
"version": "4.7.
|
|
1782
|
+
"version": "4.7.2-next-1791147139360"
|
|
1783
1783
|
},
|
|
1784
1784
|
"@walkeros/server-transformer-file": {
|
|
1785
|
-
"version": "4.7.
|
|
1785
|
+
"version": "4.7.2-next-1791147139360"
|
|
1786
1786
|
},
|
|
1787
1787
|
"@walkeros/server-store-fs": {
|
|
1788
|
-
"version": "4.7.
|
|
1788
|
+
"version": "4.7.2-next-1791147139360"
|
|
1789
1789
|
},
|
|
1790
1790
|
"@walkeros/server-destination-gcp": {
|
|
1791
|
-
"version": "4.7.
|
|
1791
|
+
"version": "4.7.2-next-1791147139360"
|
|
1792
1792
|
},
|
|
1793
1793
|
"@walkeros/server-destination-meta": {
|
|
1794
|
-
"version": "4.7.
|
|
1794
|
+
"version": "4.7.2-next-1791147139360"
|
|
1795
1795
|
},
|
|
1796
1796
|
"@walkeros/server-destination-piwikpro": {
|
|
1797
|
-
"version": "4.7.
|
|
1797
|
+
"version": "4.7.2-next-1791147139360"
|
|
1798
1798
|
},
|
|
1799
1799
|
"@walkeros/server-destination-datamanager": {
|
|
1800
|
-
"version": "4.7.
|
|
1800
|
+
"version": "4.7.2-next-1791147139360"
|
|
1801
1801
|
}
|
|
1802
1802
|
}
|
|
1803
1803
|
}
|
|
@@ -4858,13 +4858,13 @@
|
|
|
4858
4858
|
"bundle": {
|
|
4859
4859
|
"packages": {
|
|
4860
4860
|
"@walkeros/collector": {
|
|
4861
|
-
"version": "4.7.
|
|
4861
|
+
"version": "4.7.2-next-1791147139360"
|
|
4862
4862
|
},
|
|
4863
4863
|
"@walkeros/server-source-gcp": {
|
|
4864
|
-
"version": "4.7.
|
|
4864
|
+
"version": "4.7.2-next-1791147139360"
|
|
4865
4865
|
},
|
|
4866
4866
|
"@walkeros/server-destination-gcp": {
|
|
4867
|
-
"version": "4.7.
|
|
4867
|
+
"version": "4.7.2-next-1791147139360"
|
|
4868
4868
|
}
|
|
4869
4869
|
}
|
|
4870
4870
|
}
|
|
@@ -347,8 +347,8 @@ walkeros push packages/cli/examples/flow-complete.json -f web -e '{"name":"order
|
|
|
347
347
|
|
|
348
348
|
## consent-privacy: Consent and personal data
|
|
349
349
|
|
|
350
|
-
- **Purpose:** consent at the destination
|
|
351
|
-
|
|
350
|
+
- **Purpose:** consent at the destination and the field; `policy` before
|
|
351
|
+
mapping; what happens to the email and the IP address.
|
|
352
352
|
- **Features:**
|
|
353
353
|
- `cmp-category-map` at
|
|
354
354
|
`/flows/web/sources/usercentrics/config/settings/categoryMap`: categoryMap
|
|
@@ -367,8 +367,8 @@ walkeros push packages/cli/examples/flow-complete.json -f web -e '{"name":"order
|
|
|
367
367
|
Destination consent: Meta only gets events with marketing consent.
|
|
368
368
|
- `rule-consent` at
|
|
369
369
|
`/flows/web/destinations/ga4/config/mapping/order/complete/consent`: Rule
|
|
370
|
-
consent on purchases:
|
|
371
|
-
belongs to Meta and Data Manager.
|
|
370
|
+
consent on purchases: not enforced yet; the destination's functional consent
|
|
371
|
+
gates them. Marketing consent belongs to Meta and Data Manager.
|
|
372
372
|
- `value-consent` at
|
|
373
373
|
`/flows/web/destinations/collect/config/policy/user.email/consent`: Field
|
|
374
374
|
consent: the email is only kept with marketing consent.
|
package/dist/examples/index.js
CHANGED
|
@@ -264,25 +264,25 @@ var flow_complete_default = {
|
|
|
264
264
|
bundle: {
|
|
265
265
|
packages: {
|
|
266
266
|
"@walkeros/collector": {
|
|
267
|
-
version: "4.7.
|
|
267
|
+
version: "4.7.2-next-1791147139360"
|
|
268
268
|
},
|
|
269
269
|
"@walkeros/web-source-cmp-usercentrics": {
|
|
270
|
-
version: "4.7.
|
|
270
|
+
version: "4.7.2-next-1791147139360"
|
|
271
271
|
},
|
|
272
272
|
"@walkeros/web-source-session": {
|
|
273
|
-
version: "4.7.
|
|
273
|
+
version: "4.7.2-next-1791147139360"
|
|
274
274
|
},
|
|
275
275
|
"@walkeros/web-source-datalayer": {
|
|
276
|
-
version: "4.7.
|
|
276
|
+
version: "4.7.2-next-1791147139360"
|
|
277
277
|
},
|
|
278
278
|
"@walkeros/web-source-browser": {
|
|
279
|
-
version: "4.7.
|
|
279
|
+
version: "4.7.2-next-1791147139360"
|
|
280
280
|
},
|
|
281
281
|
"@walkeros/web-destination-gtag": {
|
|
282
|
-
version: "4.7.
|
|
282
|
+
version: "4.7.2-next-1791147139360"
|
|
283
283
|
},
|
|
284
284
|
"@walkeros/web-destination-api": {
|
|
285
|
-
version: "4.7.
|
|
285
|
+
version: "4.7.2-next-1791147139360"
|
|
286
286
|
}
|
|
287
287
|
},
|
|
288
288
|
env: {
|
|
@@ -1787,40 +1787,40 @@ var flow_complete_default = {
|
|
|
1787
1787
|
bundle: {
|
|
1788
1788
|
packages: {
|
|
1789
1789
|
"@walkeros/collector": {
|
|
1790
|
-
version: "4.7.
|
|
1790
|
+
version: "4.7.2-next-1791147139360"
|
|
1791
1791
|
},
|
|
1792
1792
|
"@walkeros/server-source-express": {
|
|
1793
|
-
version: "4.7.
|
|
1793
|
+
version: "4.7.2-next-1791147139360"
|
|
1794
1794
|
},
|
|
1795
1795
|
"@walkeros/transformer-ga4": {
|
|
1796
|
-
version: "4.7.
|
|
1796
|
+
version: "4.7.2-next-1791147139360"
|
|
1797
1797
|
},
|
|
1798
1798
|
"@walkeros/transformer-validate": {
|
|
1799
|
-
version: "4.7.
|
|
1799
|
+
version: "4.7.2-next-1791147139360"
|
|
1800
1800
|
},
|
|
1801
1801
|
"@walkeros/server-transformer-bot": {
|
|
1802
|
-
version: "4.7.
|
|
1802
|
+
version: "4.7.2-next-1791147139360"
|
|
1803
1803
|
},
|
|
1804
1804
|
"@walkeros/server-transformer-fingerprint": {
|
|
1805
|
-
version: "4.7.
|
|
1805
|
+
version: "4.7.2-next-1791147139360"
|
|
1806
1806
|
},
|
|
1807
1807
|
"@walkeros/server-transformer-file": {
|
|
1808
|
-
version: "4.7.
|
|
1808
|
+
version: "4.7.2-next-1791147139360"
|
|
1809
1809
|
},
|
|
1810
1810
|
"@walkeros/server-store-fs": {
|
|
1811
|
-
version: "4.7.
|
|
1811
|
+
version: "4.7.2-next-1791147139360"
|
|
1812
1812
|
},
|
|
1813
1813
|
"@walkeros/server-destination-gcp": {
|
|
1814
|
-
version: "4.7.
|
|
1814
|
+
version: "4.7.2-next-1791147139360"
|
|
1815
1815
|
},
|
|
1816
1816
|
"@walkeros/server-destination-meta": {
|
|
1817
|
-
version: "4.7.
|
|
1817
|
+
version: "4.7.2-next-1791147139360"
|
|
1818
1818
|
},
|
|
1819
1819
|
"@walkeros/server-destination-piwikpro": {
|
|
1820
|
-
version: "4.7.
|
|
1820
|
+
version: "4.7.2-next-1791147139360"
|
|
1821
1821
|
},
|
|
1822
1822
|
"@walkeros/server-destination-datamanager": {
|
|
1823
|
-
version: "4.7.
|
|
1823
|
+
version: "4.7.2-next-1791147139360"
|
|
1824
1824
|
}
|
|
1825
1825
|
}
|
|
1826
1826
|
}
|
|
@@ -4881,13 +4881,13 @@ var flow_complete_default = {
|
|
|
4881
4881
|
bundle: {
|
|
4882
4882
|
packages: {
|
|
4883
4883
|
"@walkeros/collector": {
|
|
4884
|
-
version: "4.7.
|
|
4884
|
+
version: "4.7.2-next-1791147139360"
|
|
4885
4885
|
},
|
|
4886
4886
|
"@walkeros/server-source-gcp": {
|
|
4887
|
-
version: "4.7.
|
|
4887
|
+
version: "4.7.2-next-1791147139360"
|
|
4888
4888
|
},
|
|
4889
4889
|
"@walkeros/server-destination-gcp": {
|
|
4890
|
-
version: "4.7.
|
|
4890
|
+
version: "4.7.2-next-1791147139360"
|
|
4891
4891
|
}
|
|
4892
4892
|
}
|
|
4893
4893
|
}
|
|
@@ -5793,7 +5793,7 @@ var teaching = {
|
|
|
5793
5793
|
chapter: "consent-privacy",
|
|
5794
5794
|
level: "intermediate",
|
|
5795
5795
|
useCases: ["consent"],
|
|
5796
|
-
note: "Rule consent on purchases:
|
|
5796
|
+
note: "Rule consent on purchases: not enforced yet; the destination's functional consent gates them. Marketing consent belongs to Meta and Data Manager.",
|
|
5797
5797
|
docs: []
|
|
5798
5798
|
},
|
|
5799
5799
|
"value-consent": {
|