
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
sdk-sa-node
Advanced tools
Sensors Analytics [![NPM version][npm-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Dependency Status][depstat-image]][depstat-url] ==============================
This is the home-brewed version of Node SDK for Sensors Analytics.
Install using npm.
$ npm install sa-sdk-node --save
import SensorsAnalytics from 'sa-sdk-node'
const sa = new SensorsAnalytics()
sa.submitTo('http://xxx.cloud.sensorsdata.cn:8006/sa?token=xxx')
// Super Properties that assigned to every event tracking
sa.registerSuperProperties({ $appVersion: '1.0.0', env: 'production' })
// Track event
sa.track('user-id', 'userHappy')
// Track event with custom properties
sa.track('user-id', 'newOrder', { orderId: '12323' })
// Track Signup
sa.trackSignup('user-id', 'anonymous-id/device-id')
// Track Signup with custom properties
sa.trackSignup('user-id', 'anonymous-id/device-id', { userType: 'administrator' })
// Manipuate user project
sa.profileSet('user-id', { age: 18 })
sa.profileSetOnce('user-id', { registerTime: new Date().valueOf() })
sa.profileIncrement('user-id', { scoreCount: 100, issueCount: -1 })
sa.profileAppend('user-id', { tags: ['student', 'developer'] })
sa.profileUnset('user-id', ['temporaryTag'])
For more detailed information about each api, checkout Sensors Analytics manual
By default, the library uses current time as the time when event occurs,
but the behavior can be overrode by $time
property.
track
and trackSignup
support this feature.$time
can be Date
, number
, string
, Moment
instanceimport moment from 'moment'
sa.track('user-id', 'newOrder', { orderId: '12323', $time: new Date(2016,7,30) })
sa.track('user-id', 'newOrder', { orderId: '12323', $time: '2016-07-30T00:00:00+08:00' })
sa.track('user-id', 'newOrder', { orderId: '12323', $time: 1469808000000 })
sa.track('user-id', 'newOrder', { orderId: '12323', $time: moment() })
sa.trackSignup('user-id', 'anonymous-id/device-id', { $time: new Date(2016,7,30) })
sa.trackSignup('user-id', 'anonymous-id/device-id', { $time: '2016-07-30T00:00:00+08:00' })
sa.trackSignup('user-id', 'anonymous-id/device-id', { $time: 1469808000000 })
sa.trackSignup('user-id', 'anonymous-id/device-id', { $time: moment() })
SensorsData support parsing user geo location from IP address.
track
and trackSignup
support this feature.router.post('/api/new-order', (req, res) => {
sa.track(req.session.userId, 'newOrder', { $ip: req.ip })
// ...
})
Node SDK supports parsing client OS
, OS version
, Browser
, Browser version
, Browser Engine
, Model
from client's User Agent
track
and trackSignup
support this feature.router.post('/api/new-order', (req, res) => {
sa.track(req.session.userId, 'newOrder', { $userAgent: req.get('user-agent') })
// ...
})
By default, submitter can be created with server url
import SensorsAnalytics from 'sa-sdk-node'
const url = 'http://xxx.cloud.sensorsdata.cn:8006/sa?token=xxx'
const sa = new SensorsAnalytics()
const submitter = sa.submitTo(url)
But it also can be created with explicit config
import SensorsAnalytics from 'sa-sdk-node'
const url = 'http://xxx.cloud.sensorsdata.cn:8006/sa?token=xxx'
const sa = new SensorsAnalytics()
const submitter = sa.submitTo({ url, gzip: true, mode: 'track', timeout: 10 * 1000 })
// gzip: whether enable gzip, default to true
// mode: could be 'track' (production use), 'debug' (diagnosis data), 'dryRun' (diagnosis with no data recorded),
// also supports the values that aligned to other SDKs: debug_off, debug_and_track and debug_only,
// default to track
// mode:
// timeout: Http timeout in ms, default to 10s
Submitter can be create manually and attach to SensorsAnalytics
manually
Created with url with default config
import SensorsAnalytics, { Submitter } from 'sa-sdk-node'
const url = 'http://xxx.cloud.sensorsdata.cn:8006/sa?token=xxx'
const sa = new SensorsAnalytics()
const submitter = new Submitter(url)
sa.subscribe(submitter)
Or with explicit config
import SensorsAnalytics, { Submitter } from 'sa-sdk-node'
const url = 'http://xxx.cloud.sensorsdata.cn:8006/sa?token=xxx'
const sa = new SensorsAnalytics()
const submitter = new Submitter({ url, gzip: true, mode: 'track', timeout: 10 * 1000 })
sa.subscribe(submitter)
Network error handling
submitter.catch((err) => console.error(err))
WARN Batch submit is not supported by debug
or dryRun
mode. It causes 400 bad-request error
Suppose
import SensorsAnalytics, { Submitter } from 'sa-sdk-node'
const url = 'http://xxx.cloud.sensorsdata.cn:8006/sa?token=xxx'
const sa = new SensorsAnalytics()
// Submit when 20 events are tracked
sa.submitTo(url, { count: 20 })
// Submit when every 5 seconds
sa.submitTo(url, { timeSpan: 5 * 1000 })
// Submit every 5 seconds, but also submit immediately if 20 events tracked
sa.submitTo(url, { count: 20, timeSpan: 5 * 1000 })
Batch
can be created manually if needed, which can be subscribed with submitter
later
const batch = sa.inBatch({ count: 20, timeSpan: 5 * 1000 })
batch.subscribe(new Submitter(url))
This library is powered by Microsoft's RxJS.
SensorsAnalytics
is an Observable, which yields tracking data.
Submitter
is an Observer, which consume the tracking data.
Submitter
is also an Observable, which yields next when submitted succeeded, and yields Error
when network errors.
Ideally, you can use all RxJS tricks with this library
// All the event that raised by debug build app won't be submitted
sa.filter((event) => event.properties.releaseType !== 'debug')
.subscribe(submitter)
// Useful while tracking user input or other case
// The event won't be tracked unless user has stopped typing for 500ms
sa.debounce(500)
.subscribe(submitter)
textInput.onChange((text) => sa.track(userId, 'userType', { text }))
For more detail, checkout Microsoft's Rx documentation
MIT
FAQs
Sensors Analytics [![NPM version][npm-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Dependency Status][depstat-image]][depstat-url] ==============================
We found that sdk-sa-node demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.