ad2app-lib 1.34.0 → 1.35.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.
@@ -48,6 +48,7 @@ export declare const EVENTS: {
48
48
  readonly PAYWALL_DISMISSED: "paywall_dismissed";
49
49
  readonly ACCESS_DENIED: "access_denied";
50
50
  readonly ONBOARDING_STEP_COMPLETED: "onboarding_step_completed";
51
+ readonly ONBOARDING_STEP_VIEWED: "onboarding_step_viewed";
51
52
  readonly EXIT_INTENT_SHOWN: "exit_intent_shown";
52
53
  readonly EXIT_INTENT_DISMISSED: "exit_intent_dismissed";
53
54
  readonly EXIT_INTENT_CAPTURED: "exit_intent_captured";
@@ -346,11 +347,16 @@ export interface EventProperties {
346
347
  app_locale: AppLocale;
347
348
  };
348
349
  [EVENTS.ONBOARDING_STEP_COMPLETED]: {
349
- flow: 'complete_profile';
350
+ flow: 'complete_profile' | 'beta_consent';
350
351
  step: string;
351
352
  step_index: number;
352
353
  app_locale: AppLocale;
353
354
  };
355
+ [EVENTS.ONBOARDING_STEP_VIEWED]: {
356
+ flow: 'complete_profile' | 'beta_consent';
357
+ step: string;
358
+ app_locale?: AppLocale;
359
+ };
354
360
  [EVENTS.EXIT_INTENT_SHOWN]: {
355
361
  surface: 'connect_wall';
356
362
  dwell_ms?: number;
@@ -72,6 +72,12 @@ exports.EVENTS = {
72
72
  // trust — it is part of why a REAL retry defect sat unnoticed in the same list.
73
73
  ACCESS_DENIED: 'access_denied', // entitlement 403 at the API choke point (beta wall / subscription)
74
74
  ONBOARDING_STEP_COMPLETED: 'onboarding_step_completed', // one step of a multi-step flow (complete-profile)
75
+ // Promoted from a raw string literal at ad2app-frontend's
76
+ // OnboardingFlow.tsx:887 (spec 158, 2026-09-03) — it was already firing in
77
+ // production (15 events, 3 people) ungoverned since spec 095. `flow` is
78
+ // widened alongside ONBOARDING_STEP_COMPLETED below to cover the beta
79
+ // consent step, which is not part of the complete-profile flow.
80
+ ONBOARDING_STEP_VIEWED: 'onboarding_step_viewed', // a step was actually shown (drop-off, not just completion)
75
81
  EXIT_INTENT_SHOWN: 'exit_intent_shown', // exit-intent capture modal armed (065, verbatim wire values)
76
82
  EXIT_INTENT_DISMISSED: 'exit_intent_dismissed',
77
83
  EXIT_INTENT_CAPTURED: 'exit_intent_captured', // email captured into the beta list
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ad2app-lib",
3
- "version": "1.34.0",
3
+ "version": "1.35.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "commonjs",
@@ -105,6 +105,7 @@ const EVENT_PROPERTY_WITNESS: { [E in keyof EventProperties]: EventProperties[E]
105
105
  [EVENTS.PAYWALL_DISMISSED]: { surface: "upgrade_modal", trigger: "user_click", hit_number: 1, app_locale: "en" },
106
106
  [EVENTS.ACCESS_DENIED]: { reason: "subscription-required", app_locale: "en" },
107
107
  [EVENTS.ONBOARDING_STEP_COMPLETED]: { flow: "complete_profile", step: "role", step_index: 1, app_locale: "en" },
108
+ [EVENTS.ONBOARDING_STEP_VIEWED]: { flow: "beta_consent", step: "consent" },
108
109
  [EVENTS.EXIT_INTENT_SHOWN]: { surface: "connect_wall" },
109
110
  [EVENTS.EXIT_INTENT_DISMISSED]: { surface: "connect_wall" },
110
111
  [EVENTS.EXIT_INTENT_CAPTURED]: { surface: "connect_wall" },
@@ -186,6 +187,10 @@ test("080 paywall / onboarding wire names are locked (rename breaks the baseline
186
187
  assert.equal(EVENTS.ONBOARDING_STEP_COMPLETED, "onboarding_step_completed");
187
188
  });
188
189
 
190
+ test("158: onboarding_step_viewed wire name is locked — it was already live in production as a raw string before this promotion (rename breaks the existing 15 events)", () => {
191
+ assert.equal(EVENTS.ONBOARDING_STEP_VIEWED, "onboarding_step_viewed");
192
+ });
193
+
189
194
  test("080 subscription-lifecycle wire names are locked (backend = source of truth)", () => {
190
195
  assert.deepEqual(
191
196
  [
@@ -78,6 +78,12 @@ export const EVENTS = {
78
78
  // trust — it is part of why a REAL retry defect sat unnoticed in the same list.
79
79
  ACCESS_DENIED: 'access_denied', // entitlement 403 at the API choke point (beta wall / subscription)
80
80
  ONBOARDING_STEP_COMPLETED: 'onboarding_step_completed', // one step of a multi-step flow (complete-profile)
81
+ // Promoted from a raw string literal at ad2app-frontend's
82
+ // OnboardingFlow.tsx:887 (spec 158, 2026-09-03) — it was already firing in
83
+ // production (15 events, 3 people) ungoverned since spec 095. `flow` is
84
+ // widened alongside ONBOARDING_STEP_COMPLETED below to cover the beta
85
+ // consent step, which is not part of the complete-profile flow.
86
+ ONBOARDING_STEP_VIEWED: 'onboarding_step_viewed', // a step was actually shown (drop-off, not just completion)
81
87
  EXIT_INTENT_SHOWN: 'exit_intent_shown', // exit-intent capture modal armed (065, verbatim wire values)
82
88
  EXIT_INTENT_DISMISSED: 'exit_intent_dismissed',
83
89
  EXIT_INTENT_CAPTURED: 'exit_intent_captured', // email captured into the beta list
@@ -436,11 +442,19 @@ export interface EventProperties {
436
442
  app_locale: AppLocale;
437
443
  };
438
444
  [EVENTS.ONBOARDING_STEP_COMPLETED]: {
439
- flow: 'complete_profile'; // closed set, extensible when a new flow ships
445
+ flow: 'complete_profile' | 'beta_consent'; // widened 2026-09-03 (spec 158) for the beta consent step
440
446
  step: string; // stable slug derived from the real wizard, not guessed
441
447
  step_index: number; // 1-based
442
448
  app_locale: AppLocale;
443
449
  };
450
+ // Promoted from a raw string (spec 158) — same `flow`/`step` shape as
451
+ // ONBOARDING_STEP_COMPLETED, fired once per step actually SHOWN rather than
452
+ // finished, so drop-off is visible per step, not only per completion.
453
+ [EVENTS.ONBOARDING_STEP_VIEWED]: {
454
+ flow: 'complete_profile' | 'beta_consent';
455
+ step: string;
456
+ app_locale?: AppLocale; // optional: the pre-existing raw call site does not have it yet (T001a repairs the call site, not the type's honesty about what ships today)
457
+ };
444
458
  // Exit-intent (065). surface value is VERBATIM from the ExitIntentModal
445
459
  // component ('connect_wall'); dwell_ms / page_views / app_locale are optional
446
460
  // additions T003 wires (the component does not emit them yet — fidelity gate).