@leanbase.com/js 0.1.2 → 0.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/autocapture-utils.d.ts +17 -0
  2. package/dist/autocapture.d.ts +35 -0
  3. package/dist/config.d.ts +5 -0
  4. package/dist/constants.d.ts +54 -0
  5. package/dist/entrypoints/main.cjs.d.ts +4 -0
  6. package/dist/entrypoints/module.es.d.ts +4 -0
  7. package/dist/extensions/rageclick.d.ts +9 -0
  8. package/dist/iife.d.ts +19 -0
  9. package/dist/index.d.ts +2 -779
  10. package/dist/leanbase-logger.d.ts +6 -0
  11. package/dist/leanbase-persistence.d.ts +64 -0
  12. package/dist/leanbase.d.ts +49 -0
  13. package/dist/leanbase.iife.js +1 -4745
  14. package/dist/leanbase.iife.js.map +1 -1
  15. package/dist/main.js +2 -0
  16. package/dist/main.js.map +1 -0
  17. package/dist/module.d.ts +780 -0
  18. package/dist/module.js +2 -0
  19. package/dist/module.js.map +1 -0
  20. package/dist/page-view.d.ts +29 -0
  21. package/dist/scroll-manager.d.ts +21 -0
  22. package/dist/session-props.d.ts +32 -0
  23. package/dist/sessionid.d.ts +50 -0
  24. package/dist/storage.d.ts +24 -0
  25. package/{src/types.ts → dist/types.d.ts} +145 -235
  26. package/dist/utils/blocked-uas.d.ts +17 -0
  27. package/dist/utils/element-utils.d.ts +5 -0
  28. package/dist/utils/event-utils.d.ts +22 -0
  29. package/dist/utils/index.d.ts +44 -0
  30. package/dist/utils/request-utils.d.ts +12 -0
  31. package/dist/utils/simple-event-emitter.d.ts +6 -0
  32. package/dist/utils/user-agent-utils.d.ts +18 -0
  33. package/dist/uuidv7.d.ts +43 -0
  34. package/dist/version.d.ts +1 -0
  35. package/lib/autocapture-utils.d.ts +17 -0
  36. package/{src/autocapture-utils.ts → lib/autocapture-utils.js} +196 -280
  37. package/lib/autocapture-utils.js.map +1 -0
  38. package/lib/autocapture.d.ts +35 -0
  39. package/lib/autocapture.js +311 -0
  40. package/lib/autocapture.js.map +1 -0
  41. package/lib/config.d.ts +5 -0
  42. package/lib/config.js +7 -0
  43. package/lib/config.js.map +1 -0
  44. package/lib/constants.d.ts +54 -0
  45. package/{src/constants.ts → lib/constants.js} +58 -55
  46. package/lib/constants.js.map +1 -0
  47. package/lib/entrypoints/main.cjs.d.ts +4 -0
  48. package/lib/entrypoints/main.cjs.js +3 -0
  49. package/lib/entrypoints/main.cjs.js.map +1 -0
  50. package/lib/entrypoints/module.es.d.ts +4 -0
  51. package/lib/entrypoints/module.es.js +3 -0
  52. package/lib/entrypoints/module.es.js.map +1 -0
  53. package/lib/extensions/rageclick.d.ts +9 -0
  54. package/lib/extensions/rageclick.js +27 -0
  55. package/lib/extensions/rageclick.js.map +1 -0
  56. package/lib/iife.d.ts +19 -0
  57. package/lib/iife.js +67 -0
  58. package/lib/iife.js.map +1 -0
  59. package/{src/index.ts → lib/index.d.ts} +2 -2
  60. package/lib/index.js +2 -0
  61. package/lib/index.js.map +1 -0
  62. package/lib/leanbase-logger.d.ts +6 -0
  63. package/lib/leanbase-logger.js +25 -0
  64. package/lib/leanbase-logger.js.map +1 -0
  65. package/lib/leanbase-persistence.d.ts +64 -0
  66. package/lib/leanbase-persistence.js +287 -0
  67. package/lib/leanbase-persistence.js.map +1 -0
  68. package/lib/leanbase.d.ts +49 -0
  69. package/lib/leanbase.js +294 -0
  70. package/lib/leanbase.js.map +1 -0
  71. package/lib/page-view.d.ts +29 -0
  72. package/lib/page-view.js +81 -0
  73. package/lib/page-view.js.map +1 -0
  74. package/lib/scroll-manager.d.ts +21 -0
  75. package/lib/scroll-manager.js +79 -0
  76. package/lib/scroll-manager.js.map +1 -0
  77. package/lib/session-props.d.ts +32 -0
  78. package/lib/session-props.js +73 -0
  79. package/lib/session-props.js.map +1 -0
  80. package/lib/sessionid.d.ts +50 -0
  81. package/{src/sessionid.ts → lib/sessionid.js} +128 -204
  82. package/lib/sessionid.js.map +1 -0
  83. package/lib/storage.d.ts +24 -0
  84. package/{src/storage.ts → lib/storage.js} +182 -225
  85. package/lib/storage.js.map +1 -0
  86. package/lib/types.d.ts +544 -0
  87. package/lib/types.js +7 -0
  88. package/lib/types.js.map +1 -0
  89. package/lib/utils/blocked-uas.d.ts +17 -0
  90. package/{src/utils/blocked-uas.ts → lib/utils/blocked-uas.js} +19 -48
  91. package/lib/utils/blocked-uas.js.map +1 -0
  92. package/lib/utils/element-utils.d.ts +5 -0
  93. package/{src/utils/element-utils.ts → lib/utils/element-utils.js} +13 -17
  94. package/lib/utils/element-utils.js.map +1 -0
  95. package/lib/utils/event-utils.d.ts +22 -0
  96. package/lib/utils/event-utils.js +258 -0
  97. package/lib/utils/event-utils.js.map +1 -0
  98. package/lib/utils/index.d.ts +44 -0
  99. package/lib/utils/index.js +183 -0
  100. package/lib/utils/index.js.map +1 -0
  101. package/lib/utils/request-utils.d.ts +12 -0
  102. package/lib/utils/request-utils.js +107 -0
  103. package/lib/utils/request-utils.js.map +1 -0
  104. package/lib/utils/simple-event-emitter.d.ts +6 -0
  105. package/lib/utils/simple-event-emitter.js +24 -0
  106. package/lib/utils/simple-event-emitter.js.map +1 -0
  107. package/lib/utils/user-agent-utils.d.ts +18 -0
  108. package/lib/utils/user-agent-utils.js +369 -0
  109. package/lib/utils/user-agent-utils.js.map +1 -0
  110. package/lib/uuidv7.d.ts +43 -0
  111. package/{src/uuidv7.ts → lib/uuidv7.js} +103 -131
  112. package/lib/uuidv7.js.map +1 -0
  113. package/lib/version.d.ts +1 -0
  114. package/lib/version.js +2 -0
  115. package/lib/version.js.map +1 -0
  116. package/package.json +23 -11
  117. package/dist/index.cjs +0 -3032
  118. package/dist/index.cjs.map +0 -1
  119. package/dist/index.mjs +0 -3030
  120. package/dist/index.mjs.map +0 -1
  121. package/src/autocapture.ts +0 -415
  122. package/src/config.ts +0 -8
  123. package/src/extensions/rageclick.ts +0 -34
  124. package/src/iife.ts +0 -87
  125. package/src/leanbase-logger.ts +0 -26
  126. package/src/leanbase-persistence.ts +0 -374
  127. package/src/leanbase.ts +0 -424
  128. package/src/page-view.ts +0 -124
  129. package/src/scroll-manager.ts +0 -103
  130. package/src/session-props.ts +0 -114
  131. package/src/utils/event-utils.ts +0 -304
  132. package/src/utils/index.ts +0 -222
  133. package/src/utils/request-utils.ts +0 -128
  134. package/src/utils/simple-event-emitter.ts +0 -27
  135. package/src/utils/user-agent-utils.ts +0 -357
  136. package/src/version.ts +0 -1
@@ -1,374 +0,0 @@
1
- /* eslint camelcase: "off" */
2
-
3
- import { each, extend, include, stripEmptyProperties } from './utils'
4
- import { cookieStore, localPlusCookieStore, localStore, memoryStore, sessionStore } from './storage'
5
- import { PersistentStore, LeanbaseConfig, Properties } from './types'
6
- import {
7
- ENABLED_FEATURE_FLAGS,
8
- EVENT_TIMERS_KEY,
9
- INITIAL_CAMPAIGN_PARAMS,
10
- INITIAL_PERSON_INFO,
11
- INITIAL_REFERRER_INFO,
12
- PERSISTENCE_RESERVED_PROPERTIES,
13
- } from './constants'
14
-
15
- import { isUndefined } from '@posthog/core'
16
- import {
17
- getCampaignParams,
18
- getInitialPersonPropsFromInfo,
19
- getPersonInfo,
20
- getReferrerInfo,
21
- getSearchInfo,
22
- } from './utils/event-utils'
23
- import { stripLeadingDollar, isEmptyObject, isObject } from '@posthog/core'
24
- import { logger } from './leanbase-logger'
25
-
26
- const CASE_INSENSITIVE_PERSISTENCE_TYPES: readonly Lowercase<LeanbaseConfig['persistence']>[] = [
27
- 'cookie',
28
- 'localstorage',
29
- 'localstorage+cookie',
30
- 'sessionstorage',
31
- 'memory',
32
- ]
33
-
34
- const parseName = (config: LeanbaseConfig): string => {
35
- let token = ''
36
- if (config['token']) {
37
- token = config['token'].replace(/\+/g, 'PL').replace(/\//g, 'SL').replace(/=/g, 'EQ')
38
- }
39
-
40
- if (config['persistence_name']) {
41
- return config['persistence_name']
42
- }
43
-
44
- return 'leanbase_' + token
45
- }
46
-
47
- /**
48
- * Leanbase Persistence Object
49
- * @constructor
50
- */
51
- export class LeanbasePersistence {
52
- private _config: LeanbaseConfig
53
- props: Properties
54
- private _storage: PersistentStore
55
- private _campaign_params_saved: boolean
56
- private readonly _name: string
57
- _disabled: boolean | undefined
58
- private _secure: boolean | undefined
59
- private _expire_days: number | undefined
60
- private _default_expiry: number | undefined
61
- private _cross_subdomain: boolean | undefined
62
-
63
- /**
64
- * @param {LeanbaseConfig} config initial PostHog configuration
65
- * @param {boolean=} isDisabled should persistence be disabled (e.g. because of consent management)
66
- */
67
- constructor(config: LeanbaseConfig, isDisabled?: boolean) {
68
- this._config = config
69
- this.props = {}
70
- this._campaign_params_saved = false
71
- this._name = parseName(config)
72
- this._storage = this._buildStorage(config)
73
- this.load()
74
- if (config.debug) {
75
- logger.info('Persistence loaded', config['persistence'], { ...this.props })
76
- }
77
- this.update_config(config, config, isDisabled)
78
- this.save()
79
- }
80
-
81
- /**
82
- * Returns whether persistence is disabled. Only available in SDKs > 1.257.1. Do not use on extensions, otherwise
83
- * it'll break backwards compatibility for any version before 1.257.1.
84
- */
85
- public isDisabled?(): boolean {
86
- return !!this._disabled
87
- }
88
-
89
- private _buildStorage(config: LeanbaseConfig) {
90
- if (
91
- CASE_INSENSITIVE_PERSISTENCE_TYPES.indexOf(
92
- config['persistence'].toLowerCase() as Lowercase<LeanbaseConfig['persistence']>
93
- ) === -1
94
- ) {
95
- logger.info('Unknown persistence type ' + config['persistence'] + '; falling back to localStorage+cookie')
96
- config['persistence'] = 'localStorage+cookie'
97
- }
98
-
99
- let store: PersistentStore
100
- const storage_type = config['persistence'].toLowerCase() as Lowercase<LeanbaseConfig['persistence']>
101
- if (storage_type === 'localstorage' && localStore._is_supported()) {
102
- store = localStore
103
- } else if (storage_type === 'localstorage+cookie' && localPlusCookieStore._is_supported()) {
104
- store = localPlusCookieStore
105
- } else if (storage_type === 'sessionstorage' && sessionStore._is_supported()) {
106
- store = sessionStore
107
- } else if (storage_type === 'memory') {
108
- store = memoryStore
109
- } else if (storage_type === 'cookie') {
110
- store = cookieStore
111
- } else if (localPlusCookieStore._is_supported()) {
112
- store = localPlusCookieStore
113
- } else {
114
- store = cookieStore
115
- }
116
-
117
- return store
118
- }
119
-
120
- properties(): Properties {
121
- const p: Properties = {}
122
- // Filter out reserved properties
123
- each(this.props, function (v, k) {
124
- if (k === ENABLED_FEATURE_FLAGS && isObject(v)) {
125
- const keys = Object.keys(v)
126
- for (let i = 0; i < keys.length; i++) {
127
- p[`$feature/${keys[i]}`] = v[keys[i]]
128
- }
129
- } else if (!include(PERSISTENCE_RESERVED_PROPERTIES, k)) {
130
- p[k] = v
131
- }
132
- })
133
- return p
134
- }
135
-
136
- load(): void {
137
- if (this._disabled) {
138
- return
139
- }
140
-
141
- const entry = this._storage._parse(this._name)
142
-
143
- if (entry) {
144
- this.props = extend({}, entry)
145
- }
146
- }
147
-
148
- /**
149
- * NOTE: Saving frequently causes issues with Recordings and Consent Management Platform (CMP) tools which
150
- * observe cookie changes, and modify their UI, often causing infinite loops.
151
- * As such callers of this should ideally check that the data has changed beforehand
152
- */
153
- save(): void {
154
- if (this._disabled) {
155
- return
156
- }
157
- this._storage._set(
158
- this._name,
159
- this.props,
160
- this._expire_days,
161
- this._cross_subdomain,
162
- this._secure,
163
- this._config.debug
164
- )
165
- }
166
-
167
- remove(): void {
168
- this._storage._remove(this._name, false)
169
- this._storage._remove(this._name, true)
170
- }
171
-
172
- clear(): void {
173
- this.remove()
174
- this.props = {}
175
- }
176
-
177
- /**
178
- * @param {Object} props
179
- * @param {*=} default_value
180
- * @param {number=} days
181
- */
182
-
183
- register_once(props: Properties, default_value: any, days?: number): boolean {
184
- if (isObject(props)) {
185
- if (isUndefined(default_value)) {
186
- default_value = 'None'
187
- }
188
- this._expire_days = isUndefined(days) ? this._default_expiry : days
189
-
190
- let hasChanges = false
191
-
192
- each(props, (val, prop) => {
193
- if (!this.props.hasOwnProperty(prop) || this.props[prop] === default_value) {
194
- this.props[prop] = val
195
- hasChanges = true
196
- }
197
- })
198
-
199
- if (hasChanges) {
200
- this.save()
201
- return true
202
- }
203
- }
204
- return false
205
- }
206
-
207
- /**
208
- * @param {Object} props
209
- * @param {number=} days
210
- */
211
- register(props: Properties, days?: number): boolean {
212
- if (isObject(props)) {
213
- this._expire_days = isUndefined(days) ? this._default_expiry : days
214
-
215
- let hasChanges = false
216
-
217
- each(props, (val, prop) => {
218
- if (props.hasOwnProperty(prop) && this.props[prop] !== val) {
219
- this.props[prop] = val
220
- hasChanges = true
221
- }
222
- })
223
-
224
- if (hasChanges) {
225
- this.save()
226
- return true
227
- }
228
- }
229
- return false
230
- }
231
-
232
- unregister(prop: string): void {
233
- if (prop in this.props) {
234
- delete this.props[prop]
235
- this.save()
236
- }
237
- }
238
-
239
- update_campaign_params(): void {
240
- if (!this._campaign_params_saved) {
241
- const campaignParams = getCampaignParams(
242
- this._config.custom_campaign_params,
243
- this._config.mask_personal_data_properties,
244
- this._config.custom_personal_data_properties
245
- )
246
- if (!isEmptyObject(stripEmptyProperties(campaignParams))) {
247
- this.register(campaignParams)
248
- }
249
-
250
- this._campaign_params_saved = true
251
- }
252
- }
253
- update_search_keyword(): void {
254
- this.register(getSearchInfo())
255
- }
256
-
257
- update_referrer_info(): void {
258
- this.register_once(getReferrerInfo(), undefined)
259
- }
260
-
261
- set_initial_person_info(): void {
262
- if (this.props[INITIAL_CAMPAIGN_PARAMS] || this.props[INITIAL_REFERRER_INFO]) {
263
- return
264
- }
265
-
266
- this.register_once(
267
- {
268
- [INITIAL_PERSON_INFO]: getPersonInfo(
269
- this._config.mask_personal_data_properties,
270
- this._config.custom_personal_data_properties
271
- ),
272
- },
273
- undefined
274
- )
275
- }
276
-
277
- get_initial_props(): Properties {
278
- const p: Properties = {}
279
- each([INITIAL_REFERRER_INFO, INITIAL_CAMPAIGN_PARAMS], (key) => {
280
- const initialReferrerInfo = this.props[key]
281
- if (initialReferrerInfo) {
282
- each(initialReferrerInfo, function (v, k) {
283
- p['$initial_' + stripLeadingDollar(k)] = v
284
- })
285
- }
286
- })
287
- const initialPersonInfo = this.props[INITIAL_PERSON_INFO]
288
- if (initialPersonInfo) {
289
- const initialPersonProps = getInitialPersonPropsFromInfo(initialPersonInfo)
290
- extend(p, initialPersonProps)
291
- }
292
-
293
- return p
294
- }
295
-
296
- safe_merge(props: Properties): Properties {
297
- each(this.props, function (val, prop) {
298
- if (!(prop in props)) {
299
- props[prop] = val
300
- }
301
- })
302
-
303
- return props
304
- }
305
-
306
- update_config(config: LeanbaseConfig, oldConfig: LeanbaseConfig, isDisabled?: boolean): void {
307
- this._default_expiry = this._expire_days = config['cookie_expiration']
308
- this.set_disabled(config['disable_persistence'] || !!isDisabled)
309
- this.set_cross_subdomain(config['cross_subdomain_cookie'])
310
- this.set_secure(config['secure_cookie'])
311
-
312
- if (config.persistence !== oldConfig.persistence) {
313
- const newStore = this._buildStorage(config)
314
- const props = this.props
315
-
316
- this.clear()
317
- this._storage = newStore
318
- this.props = props
319
-
320
- this.save()
321
- }
322
- }
323
-
324
- set_disabled(disabled: boolean): void {
325
- this._disabled = disabled
326
- if (this._disabled) {
327
- return this.remove()
328
- }
329
-
330
- this.save()
331
- }
332
-
333
- set_cross_subdomain(cross_subdomain: boolean): void {
334
- if (cross_subdomain !== this._cross_subdomain) {
335
- this._cross_subdomain = cross_subdomain
336
- this.remove()
337
- this.save()
338
- }
339
- }
340
-
341
- set_secure(secure: boolean): void {
342
- if (secure !== this._secure) {
343
- this._secure = secure
344
- this.remove()
345
- this.save()
346
- }
347
- }
348
-
349
- set_event_timer(event_name: string, timestamp: number): void {
350
- const timers = this.props[EVENT_TIMERS_KEY] || {}
351
- timers[event_name] = timestamp
352
- this.props[EVENT_TIMERS_KEY] = timers
353
- this.save()
354
- }
355
-
356
- remove_event_timer(event_name: string): number {
357
- const timers = this.props[EVENT_TIMERS_KEY] || {}
358
- const timestamp = timers[event_name]
359
- if (!isUndefined(timestamp)) {
360
- delete this.props[EVENT_TIMERS_KEY][event_name]
361
- this.save()
362
- }
363
- return timestamp
364
- }
365
-
366
- get_property(prop: string): any {
367
- return this.props[prop]
368
- }
369
-
370
- set_property(prop: string, to: any): void {
371
- this.props[prop] = to
372
- this.save()
373
- }
374
- }