Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@exodus/analytics

Package Overview
Dependencies
Maintainers
0
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@exodus/analytics

Analytics-provider agnostic analytics reporter

  • 15.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
621
decreased by-37.34%
Maintainers
0
Weekly downloads
 
Created
Source

Exodus analytics

A base class encapsulating analytics integration.

API Reference

Property nameDescription
setAnonymousIdUse this to set a temporary id, mostly used to track onboarding events
setUserIdUse this to set the permanent user id, i.e. the seed derived id fetched from analyticsUserIdAtom
flushUse this to send persisted events to segment. Events that are tracked before setPermanentUserId is set will need to be flushed
getAnonymousIdGets the anonymousId associated with the tracker. This is a UUID until setPermanentUserId is called with the userId
trackUse this method to send events to segment. If setPermanentUserId has not been called, you must call track({ force: true }). To throttle tracked events, use track({ sample }) with sample ranging from 0-1, e.g. track({ sample: 0.2 }) will pass through 20% of events
setUserTraitsUsed to set global "traits". Should be used sparingly -- on seed import or seed create for example.
setDefaultEventPropertiesPretty much as it sounds. This sets persistent properties to be sent with every call to segment via track
trackInstallsets a persisted event that can be sent with flush postinstall

Usage

import createStorage from '@exodus/storage-memory' // use the relevant platform-specific implementation
import analyticsDefinition from '@exodus/analytics/module'
import Tracker from '@exodus/segment-metrics'

const analytics = analyticsDefinition.factory({
  storage: storage.namespace('analytics'),
  shareActivityAtom,
  tracker: new Tracker({ writeKey: segmentApiKey }),
  // optional
  config: {
    installEventReportingUrl,
  },
  logger,
})

// before onboarding, while not mandatory, it's recommended to set an annonymousId so all
// events triggered until we have can derive real userId from seed can be linked together
const anonymousId = '5c8d5e90-1ddb-4bdc-b428-a03ac2358c7f'
analytics.setAnonymousId(anonymousId)

// if we want all events to have a common set of properties, we can require their presence
analytics.requireDefaultEventProperties(['build', 'version'])

// now we can start tracking events
// using force: true, you can send the event right away associated w/ the anonymousId
// force: false (default) will simply persist the event until you call .flush()
analytics.track({ event: 'PersistedEvent' })
analytics.track({ event: 'UrgentEvent', force: true })

// throw out ~70% of events
analytics.track({ event: 'ThrottledEvent', sample: 0.3 })

// after we have access to a seed, analyticsUserIdAtom should hold a unique userId value
const userId = await analyticsUserIdAtom.get()
analytics.setUserId(userId)

// link anonymousId and userId together, done only once on wallet creation or import
analytics.linkUserIds({ userId, annonymousId })

// flush persisted events. Note this won't flush them right away, will wait for required properties are present
analytics.flush()

// set default properties
analytics.setDefaultEventProperties({ build: 'genesis', version: '1.0.0' })

// events will flow directly to segment now with real user id
analytics.track({ event: 'OtherEvent' })

Constructor Options

Property nameRequiredDescription
trackeryesA Tracker class instance.
storageyesAn object implementing the Storage interface (see below). Needed if you need to persist events (e.g. when a consumer application can be temporarily locked).
shareActivityAtomyesAn atom returning a boolean value indicating if a consumer application is ready to send events.
confignoStatic configuration options
config.installEventReportingUrlnoUrl to which to post app install events
type SerializedEvent = 'string'

interface Storage {
  set: (key: string, events: SerializedEvent[]) => Promise<undefined>
  get: (key: string) => Promise<SerializedEvent[]>
}

FAQs

Package last updated on 25 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc