Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | 1x 1x 1x 1x 1x 1x 11x 9x 9x 9x 9x 3x 3x 9x 1x 1x 9x 2x 2x 9x 1x 1x 1x 9x 9x 1x 1x | import queryString from 'query-string'
import createAPI from './api'
import createCache from './cache'
import createUser from './user'
const defaultConfig = {
apiURL: 'https://pas.put.io/api',
cache: {
domain: '.put.io',
expires: 365,
},
}
export type Config = typeof defaultConfig
export const createClientFactoryWithDependencies = (
cacheFactory: typeof createCache,
userFactory: typeof createUser,
apiFactory: typeof createAPI,
) => (config = defaultConfig) => {
{
const cache = cacheFactory(config.cache)
const user = userFactory(cache)
const api = apiFactory(config.apiURL, cache)
const alias = (params: { id: string | number; hash: string }) => {
const attributes = user.alias(params)
api.post('/alias', {
previous_id: attributes.anonymousId,
user_id: attributes.id,
user_hash: attributes.hash,
})
}
const identify = (params: {
id: string | number
hash: string
properties: Record<string, any>
}) => {
const attributes = user.identify(params)
api.post('/users', {
users: [
{
id: attributes.id,
hash: attributes.hash,
properties: attributes.properties,
},
],
})
}
const track = (name: string, properties: Record<string, any> = {}) => {
const attributes = user.attributes.getValue()
api.post('/events', {
events: [
{
user_id: attributes.id || attributes.anonymousId,
user_hash: attributes.hash,
name,
properties,
},
],
})
}
const pageView = () => {
const { search, origin, pathname } = window.location
const { utm_source, utm_medium, utm_campaign } = queryString.parse(search)
return track('page_viewed', {
domain: origin,
path: pathname,
referrer: document.referrer,
utm_source,
utm_medium,
utm_campaign,
})
}
const clear = () => user.clear()
return {
alias,
identify,
track,
pageView,
clear,
}
}
}
export const createClientFactory = () => {
return createClientFactoryWithDependencies(createCache, createUser, createAPI)
}
export type PutioAnalyticsClient = ReturnType<
ReturnType<typeof createClientFactory>
>
|