feat: add distinct ID support to umIdentify #143
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds support for distinct user IDs in the
umIdentify()composable, addressing issue #138.Umami v2.18.0+ supports identifying users with distinct IDs for tracking across sessions. The official tracker supports three function signatures:
umami.identify(id)- ID onlyumami.identify(id, data)- ID with session dataumami.identify(data)- Data only (current behavior)This PR implements all three signatures while maintaining full backward compatibility.
Changes
src/types.tsid?: stringfield toIdentifyPayloadinterfacesrc/runtime/composables.tsidentityvariable to store distinct ID (matching official Umami tracker implementation)umIdentify()to accept(idOrData?: string | EventData, sessionData?: EventData)getPayload()to automatically includeidin all subsequent events (pageviews, custom events)umIdentify(data)calls work unchangedImplementation Details
This implementation matches the official Umami tracker's approach:
identify()is calledUsage Examples
Testing
Tested in production with user authentication flows:
Example payloads:
Identify call:
{"type":"identify","payload":{"id":"user@example.com","data":{"userId":"123","name":"John"},...}}Subsequent event (auto-includes ID):
{"type":"event","payload":{"id":"user@example.com","name":"button-click",...}}Fixes
Closes #138
🤖 Generated with Claude Code