Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warning logged about omitting identify when client is bootstrapped #282

Open
jakepeyser opened this issue May 11, 2023 · 4 comments
Open

Comments

@jakepeyser
Copy link

Describe the bug
When I bootstrap the JS SDK client with flags hydrated from SSR and include my user context, I still see a warning log printed to the dev console that reads:

[LaunchDarkly] Be sure to call identify in the LaunchDarkly client: https://docs.launchdarkly.com/sdk/features/identify#javascript

I don't expect to have to call identify here as I've already established my context for the session.

To reproduce

  1. Initialize the client with a context and { bootstrap: flags } option
  2. Call variation with that client

Expected behavior
I would expect no warning logs if the context was set during client initialization

Logs
image

[LaunchDarkly] Be sure to call identify in the LaunchDarkly client: https://docs.launchdarkly.com/sdk/features/identify#javascript

SDK version
"launchdarkly-js-client-sdk": "^3.1.3"

OS/platform
MacOS Monterey 12.6.2, Google Chrome 112.0.5615.137

@kinyoklion
Copy link
Member

Hello @jakepeyser,

It would appear this is because a variation call is made during the initialization, which isn't completed by the time the init call returns. I double checked this by doing a variation call after initialization was complete, not seeing this error. Then I did another trial where I did a variation call before initialization was complete and observed this error.

The intialization won't wait for a polling connection when bootstrap data is provided, but it still does some asynchronous work. This work is primarily related to context validation, during which a context key may be generated and persisted for anonymous contexts.

Is this a difference in behavior noted in a version upgrade, or is this an initial implementation?

Thanks,
Ryan

@jakepeyser
Copy link
Author

Hey @kinyoklion,

Thanks for the quick response! I've been seeing this warning since I set up my new project back in January, but I'm only now just getting around to optimizing how the LD client is bootstrapped.

I'd like to get the variation straight away given that the client has already been bootstrapped and should contain the correct values based on the initial context. I don't see why context validation would change the output of that call, so whether the client is ready or not by the time I call variation seems irrelevant.

Since I have the initial flags, I could delay my call to variation until I get a "ready" event from the client, but it feels unnecessary to me. Am I thinking about this in the wrong way?

@kinyoklion
Copy link
Member

@jakepeyser The variation will remain the same regardless. The effect would be if you were using any features that depend on the analytics events. For instance, if you were trying to do an experiment, then the back-end would not be able to determine percentages for different variations.

I do understand the desire to evaluate the flag immediately. I can not say for sure, but it may be possible to set the context earlier in the case where it was A.) Passed during initialization, and B.) Has a provided key and doesn't require a generated one.

I am not sure if we could make that a guaranteed part of the interface though.

Thanks,
Ryan

@jakepeyser
Copy link
Author

Ahh thank you for that explanation, it makes sense for that use case. We unfortunately aren't using experiments right now, so it sounds like out setup is fine.

I am passing the context during init and the key is always provided as we share a key for anon users. What would you suggest we do given our use case?

louis-launchdarkly added a commit that referenced this issue Nov 3, 2023
* Fix another linter warning.

* fix a broken readme link (#202)

* removing a stray character in the readme

* fix stream reconnect logic and add stream connection logging

* linter

* assume logger always exists, as we do in other components

* fix and simplify how the logger object is passed around

* make it so eventUrlTransformer actually does something

* linter

* copy flags object to prevent subtle update problem in Electron

* additional fix + test

* make bootstrapped flags available immediately

* Refactor some of the EventSource constructor selection logic.

* Change browserPlatform.js to check config options when determining
EventSource implementation to use. Added tests for EventSource factory
in browserPlatform.js

* Deal with linter.

* change how supported options are detected in EventSource polyfill

* fix broken homepage attributes (#209)

* improve bad initialization messages (#210)

* improve bad initialization messages

* remove the spaces

* fixing a broken link in a logged message (#212)

* add jsdelivr attribute to js packages (#213)

* adding an option to disable the camel-casing of flag keys (#214)

* adding an option disabling the camel-casing of flag keys

* update comment

* update comment

* fix linter errors

* address pr feedback

* updated readme

* [ch45487] useCamelCaseFlagKeys option (#215)

* Initial commit

* Update initLDClient.ts

* PR fixes. Added prettier.

* Update withLDProvider.test.tsx

* Fixed lint errors. Added test for useCamelCase false on server changes.

* Removed prettier.

* Re-added prettier

* Update yarn.lock

* Update prettier and lock files.

* Fixed more linting issues.

* fix a typo

* use persistent anonymous user logic by default in react sdk (#216)

* use persistent anonymous user logic by default in react sdk

* added a comment

* minor test change

* missed a line

* remove React package from monorepo

* make link text match link

* improve log format and add configurable prefix

* fix test

* linter

* deprecate samplingInterval

* linter

* improve log message for stream connection failures (#221)

* improve log message for stream connection failures

* update the reconnection warning so that it only displays for the first set of each reconnection attempts

* also test that the original put is getting called

* updating tests

* updating tests

* Revert "updating tests"

This reverts commit 84163cdf8b5af6a6e969d777b946a8a2973919ed.

* better abstraction

* minor change

* updating the js-common readme to mention client-side node (#222)

* remove common package, no more monorepo

* add Releaser metadata

* npm audit fix

* unify Rollup config

* migrate new demo code to new package structure

* moved example folder

* syntax fix in demo

* fix directory name

* fix linting

* use spread operator instead of Object.assign

* don't close client on beforeunload, but do flush events

* typo

* clarify test postconditions

* misc test app improvements for testing beforeunload handler

* rm unused yarn.lock

* rm typedoc dependency, don't commit installation of it during release

* fix paths

* fix file copying logic

* pr template

* revert

* fix programmatically reported version string

* upgrade Typescript to avoid Typedoc incompatibility

* Revert "upgrade Typescript to avoid Typedoc incompatibility"

This reverts commit 34d9a0f.

* update Babel, Jest, Rollup

* remove old releaser (#229)

* remove unused Rollup plugins, update dependencies

* use new config validation mechanism in js-sdk-common 3.x

* add image-loading event delivery logic factored out of js-sdk-common

* enable diagnostic events in JS SDK

* lint

* fix tests

* use common 3.0.0-beta2

* use 3.1.0-beta3, fix property name

* lint

* use js-sdk-common 3.1.0

* use js-sdk-common 3.1.1 for event payload ID fix

* use js-sdk-common 3.1.2 and loosen our other dependency

* fix license

* use js-sdk-common 3.2.0-beta1

* SDK name should be js-client-sdk

* misc fixes

* use js-sdk-common 3.2.0

* use js-sdk-common 3.2.0

* standardize linting

* use js-sdk-common 3.2.1

* use js-sdk-common 3.2.2

* update package-lock

* update js-sdk-common dependency for initialization error bugfix

* update js-sdk-common for content type bugfix; update some dev dependencies

* remove unsafe usage of hasOwnProperty

* use js-sdk-common 3.2.5

* resolve security vulnerability in acorn dependency (#240)

* update js-sdk-common to get console logging IE bugfix

* update js-sdk-common for duplicate diagnostic event fix

* update js-sdk-common for TS decl fix, improve TS compilation test (#243)

* bump to 3.2.9 to get startsWith fix (#244)

* add option to disable sync event flush (#245)

* update js-sdk-common + some dev dependencies

* No longer remove non-section hash in substring and regex matching

* linting

* the linting target to run in CI is "lint:all", not "lint"

* new js-common-sdk version (#249)

* resolve node-notifier vulnerability by updating jest dep (#250)

* adding contextKind to goal events, bumping js-common to get alias function (#251)

* pin typedoc to unblock our releases (#252)

* Removed the guides link

* add inlineUsersToEvents to TypeScript defs by updating js-sdk-common

* Update common JS SDK library to use fixes for debug event generation issues.

* Update package lock.

* use Releaser v2 config + newer CI image (#256)

* Updated readme headers (#258)

* don't log a warning about custom goal being unknown

* lint + comment

* Release js-client-sdk with the header transformation change

* Updates docs link

* bump js-sdk-common version for better localstorage error handling

* Update launchdarkly-js-sdk-common for JSON error handling fix (sc-142333)

* update lockfile

* add basicLogger export

* Update common for application tags support. (#265)

* Re-remove package-lock.json and add it to the .gitignore. (#266)

* Switch to 5.0 of the SDK common.

* Use a combination of dependencies that is compatible. (#269)

* Use a combination of dependencies that is compatible. (#269) (#270)

* Update js-sdk-common to 3.7.0 (#271)

* Update node version used during release. (#272)

* Update common to 3.8.1 (#273)

* Update common version for jitter and backoff. (#274)

* Update typedoc and make associated documentation changes. (#275)

* Update to prerelease package. (#276)

* Update release config to use node 14.

* Update typedoc and make associated documentation changes. (#275) (#277)

* Update to pre-release common 5.0.0-alpha.2

* Update typings.d.ts (#278)

Co-authored-by: Yusinto Ngadiman <[email protected]>

* Update to js-sdk-common 5.0.0-alpha.3

* [sc-177790] Replaced getUser with getContext (#279)

* Replaced getUser with getContext

* Remove contextKind

* Update GoalManager.js

Co-authored-by: Yusinto Ngadiman <[email protected]>

* Update GoalManager.js (#280)

* Switch to 5.0 of the SDK common.

* Use a combination of dependencies that is compatible. (#269)

* Update to prerelease package. (#276)

* Update release config to use node 14.

* Update typedoc and make associated documentation changes. (#275) (#277)

* Update to pre-release common 5.0.0-alpha.2

* Update typings.d.ts (#278)

Co-authored-by: Yusinto Ngadiman <[email protected]>

* Update to js-sdk-common 5.0.0-alpha.3

* [sc-177790] Replaced getUser with getContext (#279)

* Replaced getUser with getContext

* Remove contextKind

* Update GoalManager.js

Co-authored-by: Yusinto Ngadiman <[email protected]>

* Update GoalManager.js

Co-authored-by: Ryan Lamb <[email protected]>
Co-authored-by: Yusinto Ngadiman <[email protected]>

* Update GoalManager.js (#281)

Co-authored-by: Yusinto Ngadiman <[email protected]>

* Update SDK common version. (#282)

* Update release metadata.

* Refactor to use page visibility instead of unload/beforeunload. (#267)

* Upgrade JS SDK common to 5.0.1 for documentation fixes. (#283)

* Correcting documentation on visibility handler.

* build(deps): Upgrade to common 5.0.2 (#284)

* build(deps): Update to common 5.0.3 (#285)

---------

Co-authored-by: Gavin Whelan <[email protected]>
Co-authored-by: Ben Woskow <[email protected]>
Co-authored-by: Ben Woskow <[email protected]>
Co-authored-by: Eli Bishop <[email protected]>
Co-authored-by: LaunchDarklyCI <[email protected]>
Co-authored-by: Zach Davis <[email protected]>
Co-authored-by: Elliot <[email protected]>
Co-authored-by: LaunchDarklyReleaseBot <[email protected]>
Co-authored-by: Louis Chan <[email protected]>
Co-authored-by: Louis Chan <[email protected]>
Co-authored-by: Ember Stevens <[email protected]>
Co-authored-by: ember-stevens <[email protected]>
Co-authored-by: Ryan Lamb <[email protected]>
Co-authored-by: Yusinto Ngadiman <[email protected]>
Co-authored-by: Yusinto Ngadiman <[email protected]>
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

No branches or pull requests

2 participants