Skip to content

improve event lifecycles for UJ#234

Merged
e271828- merged 1 commit intofeature/user-journeyfrom
better_lifecycle
Feb 5, 2026
Merged

improve event lifecycles for UJ#234
e271828- merged 1 commit intofeature/user-journeyfrom
better_lifecycle

Conversation

@e271828-
Copy link
Contributor

@e271828- e271828- commented Feb 2, 2026

  • Verify user-journey events clear only on success, persist across tokens without destroy, and require re-setup after destroy

- Verify user-journey events clear only on success, persist across tokens without destroy, and require re-setup after destroy
@e271828- e271828- requested a review from CAMOBAP February 2, 2026 01:33
@github-actions
Copy link

github-actions bot commented Feb 2, 2026

Diffuse report:

OLD: sdk-main.aar
NEW: sdk-pr.aar

 AAR      │ old      │ new      │ diff      
──────────┼──────────┼──────────┼───────────
      jar │ 59.4 KiB │ 87.3 KiB │ +27.9 KiB 
 manifest │    411 B │    411 B │       0 B 
      res │ 78.2 KiB │ 78.2 KiB │       0 B 
    other │    1 KiB │    1 KiB │       0 B 
──────────┼──────────┼──────────┼───────────
    total │  139 KiB │  167 KiB │ +27.9 KiB 

 JAR     │ old │ new │ diff           
─────────┼─────┼─────┼────────────────
 classes │  38 │  59 │  +21 (+21 -0)  
 methods │ 569 │ 767 │ +198 (+204 -6) 
  fields │ 174 │ 255 │  +81 (+81 -0)
AAR
 size     │ diff      │ path          
──────────┼───────────┼───────────────
 87.3 KiB │ +27.9 KiB │ ∆ classes.jar 
──────────┼───────────┼───────────────
 87.3 KiB │ +27.9 KiB │ (total)
JAR
CLASSES:

   old │ new │ diff         
  ─────┼─────┼──────────────
   38  │ 59  │ +21 (+21 -0) 
  
  + com.hcaptcha.sdk.journeylitics.EventKind
  + com.hcaptcha.sdk.journeylitics.FieldKey
  + com.hcaptcha.sdk.journeylitics.InMemorySink
  + com.hcaptcha.sdk.journeylitics.JLConfig
  + com.hcaptcha.sdk.journeylitics.JLEvent
  + com.hcaptcha.sdk.journeylitics.JLSink
  + com.hcaptcha.sdk.journeylitics.Journeylitics_1_1
  + com.hcaptcha.sdk.journeylitics.Journeylitics_1
  + com.hcaptcha.sdk.journeylitics.Journeylitics_10
  + com.hcaptcha.sdk.journeylitics.Journeylitics_2
  + com.hcaptcha.sdk.journeylitics.Journeylitics_3_1
  + com.hcaptcha.sdk.journeylitics.Journeylitics_3
  + com.hcaptcha.sdk.journeylitics.Journeylitics_4
  + com.hcaptcha.sdk.journeylitics.Journeylitics_5
  + com.hcaptcha.sdk.journeylitics.Journeylitics_6
  + com.hcaptcha.sdk.journeylitics.Journeylitics_7
  + com.hcaptcha.sdk.journeylitics.Journeylitics_8
  + com.hcaptcha.sdk.journeylitics.Journeylitics_9
  + com.hcaptcha.sdk.journeylitics.Journeylitics_ListenerLookup
  + com.hcaptcha.sdk.journeylitics.Journeylitics
  + com.hcaptcha.sdk.journeylitics.MetaMapHelper
  

METHODS:

   old │ new │ diff           
  ─────┼─────┼────────────────
   569 │ 767 │ +198 (+204 -6) 
  
  + com.hcaptcha.sdk.HCaptcha access_100(HCaptcha) → InMemorySink
  + com.hcaptcha.sdk.HCaptcha access_200(HCaptcha, long)
  + com.hcaptcha.sdk.HCaptcha access_300(HCaptcha) → Handler
  + com.hcaptcha.sdk.HCaptcha access_400(HCaptcha, Object)
  + com.hcaptcha.sdk.HCaptcha access_500(HCaptcha, HCaptchaException)
  + com.hcaptcha.sdk.HCaptcha stopEvents()
  + com.hcaptcha.sdk.HCaptchaConfig _default_userJourney() → Boolean
  + com.hcaptcha.sdk.HCaptchaConfig <init>(String, Boolean, Boolean, Boolean, String, String, String, String, String, String, String, String, HCaptchaSize, HCaptchaOrientation, HCaptchaTheme, String, String, Boolean, IHCaptchaRetryPredicate, long, Boolean, Boolean, Boolean)
  + com.hcaptcha.sdk.HCaptchaConfig access_1600() → Boolean
  + com.hcaptcha.sdk.HCaptchaConfig getUserJourney() → Boolean
  + com.hcaptcha.sdk.HCaptchaConfig setUserJourney(Boolean)
  + com.hcaptcha.sdk.HCaptchaConfig_HCaptchaConfigBuilder userJourney(Boolean) → HCaptchaConfig_HCaptchaConfigBuilder
  + com.hcaptcha.sdk.HCaptchaVerifyParams <init>(String, String, String, Object)
  + com.hcaptcha.sdk.HCaptchaVerifyParams getUserJourney() → Object
  + com.hcaptcha.sdk.HCaptchaVerifyParams setUserJourney(Object)
  + com.hcaptcha.sdk.HCaptchaVerifyParams_HCaptchaVerifyParamsBuilder userJourney(Object) → HCaptchaVerifyParams_HCaptchaVerifyParamsBuilder
  + com.hcaptcha.sdk.IHCaptcha stopEvents()
  + com.hcaptcha.sdk.journeylitics.EventKind _values() → EventKind[]
  + com.hcaptcha.sdk.journeylitics.EventKind <clinit>()
  + com.hcaptcha.sdk.journeylitics.EventKind <init>(String, int, String)
  + com.hcaptcha.sdk.journeylitics.EventKind getValue() → String
  + com.hcaptcha.sdk.journeylitics.EventKind valueOf(String) → EventKind
  + com.hcaptcha.sdk.journeylitics.EventKind values() → EventKind[]
  + com.hcaptcha.sdk.journeylitics.FieldKey _values() → FieldKey[]
  + com.hcaptcha.sdk.journeylitics.FieldKey <clinit>()
  + com.hcaptcha.sdk.journeylitics.FieldKey <init>(String, int, String)
  + com.hcaptcha.sdk.journeylitics.FieldKey getJsonKey() → String
  + com.hcaptcha.sdk.journeylitics.FieldKey valueOf(String) → FieldKey
  + com.hcaptcha.sdk.journeylitics.FieldKey values() → FieldKey[]
  + com.hcaptcha.sdk.journeylitics.InMemorySink <init>()
  + com.hcaptcha.sdk.journeylitics.InMemorySink clearEvents()
  + com.hcaptcha.sdk.journeylitics.InMemorySink emit(JLEvent)
  + com.hcaptcha.sdk.journeylitics.InMemorySink getAndClearEvents() → List
  + com.hcaptcha.sdk.journeylitics.InMemorySink getEvents() → List
  + com.hcaptcha.sdk.journeylitics.JLConfig <clinit>()
  + com.hcaptcha.sdk.journeylitics.JLConfig <init>()
  + com.hcaptcha.sdk.journeylitics.JLConfig <init>(boolean, boolean, boolean, boolean, boolean, boolean, boolean, List)
  + com.hcaptcha.sdk.journeylitics.JLConfig <init>(JLSink)
  + com.hcaptcha.sdk.journeylitics.JLConfig getSinks() → List
  + com.hcaptcha.sdk.journeylitics.JLConfig isEnableClicks() → boolean
  + com.hcaptcha.sdk.journeylitics.JLConfig isEnableScreens() → boolean
  + com.hcaptcha.sdk.journeylitics.JLConfig isEnableScrolls() → boolean
  + com.hcaptcha.sdk.journeylitics.JLConfig isEnableSearch() → boolean
  + com.hcaptcha.sdk.journeylitics.JLConfig isEnableSliders() → boolean
  + com.hcaptc
...✂

@github-actions
Copy link

github-actions bot commented Feb 2, 2026

Benchmark report:

Test name Time ms. (median) Allocations (median)
com.hcaptcha.sdk.HCaptchaBenchmarkTest.EMULATOR_UNLOCKED_benchmarkInvisibleVerification +359.21 +917
com.hcaptcha.sdk.HCaptchaBenchmarkTest.EMULATOR_UNLOCKED_benchmarkInvisibleVerificationColdRun +433.22 +1248
com.hcaptcha.sdk.HCaptchaBenchmarkTest.EMULATOR_UNLOCKED_benchmarkInvisibleSetup +0.59 +321.20
com.hcaptcha.sdk.HCaptchaDebugInfoTest.EMULATOR_UNLOCKED_benchmarkDebugInfo -23.58 -5574
com.hcaptcha.sdk.HCaptchaDebugInfoTest.EMULATOR_UNLOCKED_benchmarkDebugSys +23.26 -20

@e271828- e271828- requested a review from DSergiu February 3, 2026 19:04
@e271828- e271828- merged commit 6e893ef into feature/user-journey Feb 5, 2026
11 checks passed
@e271828- e271828- deleted the better_lifecycle branch February 5, 2026 13:40
e271828- added a commit that referenced this pull request Mar 20, 2026
* feat: user journey

* chore: update timestamp and support string/map metadata

* Fix journeylitics hooks and compose analytics tracking

* fix: upgrade benchmark job os to macos-15

* refactor: clean up

* journeylitics: fix global sink handling + press scope unlock; add tests (#231)

* UJ: stopEvents (#232)

* Add stopEvents API for user journey tracking

 - expose stopEvents on IHCaptcha and call it from reset/destroy
  - unregister journey sink to stop event collection
  - document stopEvents in README
  - add unit test for sink removal

* lint

* Update README.md

* feat: update Journeylitics.start to accept Activity and throttle scroll events

---------

Co-authored-by: Aliaksandr Babrykovich <aliaksandr.babrykovich@callstack.com>

* improve event lifecycles for UJ (#234)

- Verify user-journey events clear only on success, persist across tokens without destroy, and require re-setup after destroy

---------

Co-authored-by: Aliaksandr Babrykovich <aliaksandr.babrykovich@callstack.com>
Co-authored-by: Sergiu Danalachi <danalachi.sergiu@gmail.com>
Co-authored-by: e271828- <e271828-@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants