@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 CHANGED
@@ -1,6 +1,26 @@
1
1
  # @walkeros/cli
2
2
 
3
- ## 4.7.1-next-1791015692826
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-next-1791015692826
25
- - @walkeros/core@4.7.1-next-1791015692826
26
- - @walkeros/server-core@4.7.1-next-1791015692826
27
- - @walkeros/server-destination-api@4.7.1-next-1791015692826
28
- - @walkeros/transformer-validate@4.7.1-next-1791015692826
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("Required consent states to process this event"), 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");
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, mapping[].consent, include); vendor-payload fields are ignored.") }).strict().meta({ id: "TransformerConfig", title: "Transformer.Config", description: "Transformer configuration (settings, env, chain wiring, cache, mocks)." }).describe("Transformer configuration");
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) throw new Error(error.error?.message || "Failed to list projects");
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) throw new Error(error.error?.message || "Failed to get project");
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.1-next-1791015692826";
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.1-next-1791015692826";
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.1-next-1791015692826"
244
+ "version": "4.7.2-next-1791147139360"
245
245
  },
246
246
  "@walkeros/web-source-cmp-usercentrics": {
247
- "version": "4.7.1-next-1791015692826"
247
+ "version": "4.7.2-next-1791147139360"
248
248
  },
249
249
  "@walkeros/web-source-session": {
250
- "version": "4.7.1-next-1791015692826"
250
+ "version": "4.7.2-next-1791147139360"
251
251
  },
252
252
  "@walkeros/web-source-datalayer": {
253
- "version": "4.7.1-next-1791015692826"
253
+ "version": "4.7.2-next-1791147139360"
254
254
  },
255
255
  "@walkeros/web-source-browser": {
256
- "version": "4.7.1-next-1791015692826"
256
+ "version": "4.7.2-next-1791147139360"
257
257
  },
258
258
  "@walkeros/web-destination-gtag": {
259
- "version": "4.7.1-next-1791015692826"
259
+ "version": "4.7.2-next-1791147139360"
260
260
  },
261
261
  "@walkeros/web-destination-api": {
262
- "version": "4.7.1-next-1791015692826"
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.1-next-1791015692826"
1767
+ "version": "4.7.2-next-1791147139360"
1768
1768
  },
1769
1769
  "@walkeros/server-source-express": {
1770
- "version": "4.7.1-next-1791015692826"
1770
+ "version": "4.7.2-next-1791147139360"
1771
1771
  },
1772
1772
  "@walkeros/transformer-ga4": {
1773
- "version": "4.7.1-next-1791015692826"
1773
+ "version": "4.7.2-next-1791147139360"
1774
1774
  },
1775
1775
  "@walkeros/transformer-validate": {
1776
- "version": "4.7.1-next-1791015692826"
1776
+ "version": "4.7.2-next-1791147139360"
1777
1777
  },
1778
1778
  "@walkeros/server-transformer-bot": {
1779
- "version": "4.7.1-next-1791015692826"
1779
+ "version": "4.7.2-next-1791147139360"
1780
1780
  },
1781
1781
  "@walkeros/server-transformer-fingerprint": {
1782
- "version": "4.7.1-next-1791015692826"
1782
+ "version": "4.7.2-next-1791147139360"
1783
1783
  },
1784
1784
  "@walkeros/server-transformer-file": {
1785
- "version": "4.7.1-next-1791015692826"
1785
+ "version": "4.7.2-next-1791147139360"
1786
1786
  },
1787
1787
  "@walkeros/server-store-fs": {
1788
- "version": "4.7.1-next-1791015692826"
1788
+ "version": "4.7.2-next-1791147139360"
1789
1789
  },
1790
1790
  "@walkeros/server-destination-gcp": {
1791
- "version": "4.7.1-next-1791015692826"
1791
+ "version": "4.7.2-next-1791147139360"
1792
1792
  },
1793
1793
  "@walkeros/server-destination-meta": {
1794
- "version": "4.7.1-next-1791015692826"
1794
+ "version": "4.7.2-next-1791147139360"
1795
1795
  },
1796
1796
  "@walkeros/server-destination-piwikpro": {
1797
- "version": "4.7.1-next-1791015692826"
1797
+ "version": "4.7.2-next-1791147139360"
1798
1798
  },
1799
1799
  "@walkeros/server-destination-datamanager": {
1800
- "version": "4.7.1-next-1791015692826"
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.1-next-1791015692826"
4861
+ "version": "4.7.2-next-1791147139360"
4862
4862
  },
4863
4863
  "@walkeros/server-source-gcp": {
4864
- "version": "4.7.1-next-1791015692826"
4864
+ "version": "4.7.2-next-1791147139360"
4865
4865
  },
4866
4866
  "@walkeros/server-destination-gcp": {
4867
- "version": "4.7.1-next-1791015692826"
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, the rule and the field; `policy`
351
- before mapping; what happens to the email and the IP address.
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: functional, like the destination; marketing consent
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.
@@ -264,25 +264,25 @@ var flow_complete_default = {
264
264
  bundle: {
265
265
  packages: {
266
266
  "@walkeros/collector": {
267
- version: "4.7.1-next-1791015692826"
267
+ version: "4.7.2-next-1791147139360"
268
268
  },
269
269
  "@walkeros/web-source-cmp-usercentrics": {
270
- version: "4.7.1-next-1791015692826"
270
+ version: "4.7.2-next-1791147139360"
271
271
  },
272
272
  "@walkeros/web-source-session": {
273
- version: "4.7.1-next-1791015692826"
273
+ version: "4.7.2-next-1791147139360"
274
274
  },
275
275
  "@walkeros/web-source-datalayer": {
276
- version: "4.7.1-next-1791015692826"
276
+ version: "4.7.2-next-1791147139360"
277
277
  },
278
278
  "@walkeros/web-source-browser": {
279
- version: "4.7.1-next-1791015692826"
279
+ version: "4.7.2-next-1791147139360"
280
280
  },
281
281
  "@walkeros/web-destination-gtag": {
282
- version: "4.7.1-next-1791015692826"
282
+ version: "4.7.2-next-1791147139360"
283
283
  },
284
284
  "@walkeros/web-destination-api": {
285
- version: "4.7.1-next-1791015692826"
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.1-next-1791015692826"
1790
+ version: "4.7.2-next-1791147139360"
1791
1791
  },
1792
1792
  "@walkeros/server-source-express": {
1793
- version: "4.7.1-next-1791015692826"
1793
+ version: "4.7.2-next-1791147139360"
1794
1794
  },
1795
1795
  "@walkeros/transformer-ga4": {
1796
- version: "4.7.1-next-1791015692826"
1796
+ version: "4.7.2-next-1791147139360"
1797
1797
  },
1798
1798
  "@walkeros/transformer-validate": {
1799
- version: "4.7.1-next-1791015692826"
1799
+ version: "4.7.2-next-1791147139360"
1800
1800
  },
1801
1801
  "@walkeros/server-transformer-bot": {
1802
- version: "4.7.1-next-1791015692826"
1802
+ version: "4.7.2-next-1791147139360"
1803
1803
  },
1804
1804
  "@walkeros/server-transformer-fingerprint": {
1805
- version: "4.7.1-next-1791015692826"
1805
+ version: "4.7.2-next-1791147139360"
1806
1806
  },
1807
1807
  "@walkeros/server-transformer-file": {
1808
- version: "4.7.1-next-1791015692826"
1808
+ version: "4.7.2-next-1791147139360"
1809
1809
  },
1810
1810
  "@walkeros/server-store-fs": {
1811
- version: "4.7.1-next-1791015692826"
1811
+ version: "4.7.2-next-1791147139360"
1812
1812
  },
1813
1813
  "@walkeros/server-destination-gcp": {
1814
- version: "4.7.1-next-1791015692826"
1814
+ version: "4.7.2-next-1791147139360"
1815
1815
  },
1816
1816
  "@walkeros/server-destination-meta": {
1817
- version: "4.7.1-next-1791015692826"
1817
+ version: "4.7.2-next-1791147139360"
1818
1818
  },
1819
1819
  "@walkeros/server-destination-piwikpro": {
1820
- version: "4.7.1-next-1791015692826"
1820
+ version: "4.7.2-next-1791147139360"
1821
1821
  },
1822
1822
  "@walkeros/server-destination-datamanager": {
1823
- version: "4.7.1-next-1791015692826"
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.1-next-1791015692826"
4884
+ version: "4.7.2-next-1791147139360"
4885
4885
  },
4886
4886
  "@walkeros/server-source-gcp": {
4887
- version: "4.7.1-next-1791015692826"
4887
+ version: "4.7.2-next-1791147139360"
4888
4888
  },
4889
4889
  "@walkeros/server-destination-gcp": {
4890
- version: "4.7.1-next-1791015692826"
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: functional, like the destination; marketing consent belongs to Meta and Data Manager.",
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": {