@posthog/core 1.18.0 → 1.19.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.
- package/dist/posthog-core.d.ts +43 -2
- package/dist/posthog-core.d.ts.map +1 -1
- package/dist/posthog-core.js +19 -1
- package/dist/posthog-core.mjs +20 -2
- package/package.json +1 -1
- package/src/posthog-core.ts +68 -3
package/dist/posthog-core.d.ts
CHANGED
|
@@ -73,8 +73,8 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
73
73
|
* PROPERTIES
|
|
74
74
|
***/
|
|
75
75
|
setPersonPropertiesForFlags(properties: {
|
|
76
|
-
[type: string]:
|
|
77
|
-
}): void;
|
|
76
|
+
[type: string]: JsonType;
|
|
77
|
+
}, reloadFeatureFlags?: boolean): void;
|
|
78
78
|
resetPersonPropertiesForFlags(): void;
|
|
79
79
|
setGroupPropertiesForFlags(properties: {
|
|
80
80
|
[type: string]: Record<string, string>;
|
|
@@ -223,6 +223,47 @@ export declare abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
223
223
|
* @public
|
|
224
224
|
*/
|
|
225
225
|
createPersonProfile(): void;
|
|
226
|
+
/**
|
|
227
|
+
* Sets properties on the person profile associated with the current `distinct_id`.
|
|
228
|
+
* Learn more about [identifying users](https://posthog.com/docs/product-analytics/identify)
|
|
229
|
+
*
|
|
230
|
+
* {@label Identification}
|
|
231
|
+
*
|
|
232
|
+
* @remarks
|
|
233
|
+
* Updates user properties that are stored with the person profile in PostHog.
|
|
234
|
+
* If `personProfiles` is set to `identified_only` and no profile exists, this will create one.
|
|
235
|
+
*
|
|
236
|
+
* @example
|
|
237
|
+
* ```js
|
|
238
|
+
* // set user properties
|
|
239
|
+
* posthog.setPersonProperties({
|
|
240
|
+
* email: 'user@example.com',
|
|
241
|
+
* plan: 'premium'
|
|
242
|
+
* })
|
|
243
|
+
* ```
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```js
|
|
247
|
+
* // set properties with $set_once
|
|
248
|
+
* posthog.setPersonProperties(
|
|
249
|
+
* { name: 'Max Hedgehog' }, // $set properties
|
|
250
|
+
* { initial_url: '/blog' } // $set_once properties
|
|
251
|
+
* )
|
|
252
|
+
* ```
|
|
253
|
+
*
|
|
254
|
+
* @public
|
|
255
|
+
*
|
|
256
|
+
* @param userPropertiesToSet - Optional: An object of properties to store about the user.
|
|
257
|
+
* These properties will overwrite any existing values for the same keys.
|
|
258
|
+
* @param userPropertiesToSetOnce - Optional: An object of properties to store about the user.
|
|
259
|
+
* If a property is previously set, this does not override that value.
|
|
260
|
+
* @param reloadFeatureFlags - Whether to reload feature flags after setting the properties. Defaults to true.
|
|
261
|
+
*/
|
|
262
|
+
setPersonProperties(userPropertiesToSet?: {
|
|
263
|
+
[key: string]: JsonType;
|
|
264
|
+
}, userPropertiesToSetOnce?: {
|
|
265
|
+
[key: string]: JsonType;
|
|
266
|
+
}, reloadFeatureFlags?: boolean): void;
|
|
226
267
|
/**
|
|
227
268
|
* Override processBeforeEnqueue to run before_send hooks.
|
|
228
269
|
* This runs after prepareMessage, giving users full control over the final event.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAGhB,yBAAyB,EAKzB,sBAAsB,EAGvB,MAAM,SAAS,CAAA;AAShB,OAAO,EAAiC,wBAAwB,EAAE,MAAM,SAAS,CAAA;AACjF,OAAO,EAAY,oBAAoB,EAAuB,MAAM,0BAA0B,CAAA;AAI9F,8BAAsB,WAAY,SAAQ,oBAAoB;IAE5D,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,WAAW,CAAC,CAA+B;IAGnD,SAAS,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC,CAAA;IAClF,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAA;IAC/C,OAAO,CAAC,wBAAwB,CAAuB;IACvD,SAAS,CAAC,YAAY,EAAE,sBAAsB,CAAK;IAGnD,SAAS,CAAC,eAAe,EAAE,QAAQ,GAAG,iBAAiB,GAAG,OAAO,CAAA;gBAErD,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAexD,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAmDrE,OAAO,CAAC,UAAU;IAMlB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAI3D,KAAK,CAAC,gBAAgB,CAAC,EAAE,wBAAwB,EAAE,GAAG,IAAI;IAiB1D,SAAS,CAAC,wBAAwB,IAAI,sBAAsB;IAgB5D,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;;OAUG;IACH,YAAY,IAAI,MAAM;IAyBtB,cAAc,IAAI,IAAI;IAQtB;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc,IAAI,MAAM;IAaxB;;OAEG;IACH,aAAa,IAAI,MAAM;IAQvB,kBAAkB,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IAO5D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI5C;;SAEK;IAEL,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAuCzG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAwBlG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAa1B,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,yBAAyB,EAAE,EACrC,UAAU,GAAE,sBAA2B,EACvC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI;IAiBP;;SAEK;IAEL,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAsB5C,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,eAAe,CAAC,EAAE,sBAAsB,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI;IAYP,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,eAAe,CAAC,EAAE,sBAAsB,EACxC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI;IAYP;;SAEK;IACL,2BAA2B,CAAC,UAAU,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"posthog-core.d.ts","sourceRoot":"","sources":["../src/posthog-core.ts"],"names":[],"mappings":"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"}
|
package/dist/posthog-core.js
CHANGED
|
@@ -249,13 +249,14 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
249
249
|
super.groupIdentifyStateless(groupType, groupKey, groupProperties, options, distinctId, eventProperties);
|
|
250
250
|
});
|
|
251
251
|
}
|
|
252
|
-
setPersonPropertiesForFlags(properties) {
|
|
252
|
+
setPersonPropertiesForFlags(properties, reloadFeatureFlags = true) {
|
|
253
253
|
this.wrap(()=>{
|
|
254
254
|
const existingProperties = this.getPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.PersonProperties) || {};
|
|
255
255
|
this.setPersistedProperty(external_types_js_namespaceObject.PostHogPersistedProperty.PersonProperties, {
|
|
256
256
|
...existingProperties,
|
|
257
257
|
...properties
|
|
258
258
|
});
|
|
259
|
+
if (reloadFeatureFlags) this.reloadFeatureFlags();
|
|
259
260
|
});
|
|
260
261
|
}
|
|
261
262
|
resetPersonPropertiesForFlags() {
|
|
@@ -628,6 +629,23 @@ class PostHogCore extends external_posthog_core_stateless_js_namespaceObject.Pos
|
|
|
628
629
|
$set_once: {}
|
|
629
630
|
});
|
|
630
631
|
}
|
|
632
|
+
setPersonProperties(userPropertiesToSet, userPropertiesToSetOnce, reloadFeatureFlags = true) {
|
|
633
|
+
this.wrap(()=>{
|
|
634
|
+
const isSetEmpty = (0, index_js_namespaceObject.isNullish)(userPropertiesToSet) || (0, index_js_namespaceObject.isEmptyObject)(userPropertiesToSet);
|
|
635
|
+
const isSetOnceEmpty = (0, index_js_namespaceObject.isNullish)(userPropertiesToSetOnce) || (0, index_js_namespaceObject.isEmptyObject)(userPropertiesToSetOnce);
|
|
636
|
+
if (isSetEmpty && isSetOnceEmpty) return;
|
|
637
|
+
if (!this._requirePersonProcessing('posthog.setPersonProperties')) return;
|
|
638
|
+
const mergedProperties = {
|
|
639
|
+
...userPropertiesToSetOnce || {},
|
|
640
|
+
...userPropertiesToSet || {}
|
|
641
|
+
};
|
|
642
|
+
this.setPersonPropertiesForFlags(mergedProperties, reloadFeatureFlags);
|
|
643
|
+
this.capture('$set', {
|
|
644
|
+
$set: userPropertiesToSet || {},
|
|
645
|
+
$set_once: userPropertiesToSetOnce || {}
|
|
646
|
+
});
|
|
647
|
+
});
|
|
648
|
+
}
|
|
631
649
|
processBeforeEnqueue(message) {
|
|
632
650
|
if (!this._beforeSend) return message;
|
|
633
651
|
const timestamp = message.timestamp;
|
package/dist/posthog-core.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { createFlagsResponseFromFlagsAndPayloads, getFeatureFlagValue, getFlagVa
|
|
|
2
2
|
import { Compression, FeatureFlagError, PostHogPersistedProperty } from "./types.mjs";
|
|
3
3
|
import { PostHogCoreStateless, QuotaLimitedFeature, maybeAdd } from "./posthog-core-stateless.mjs";
|
|
4
4
|
import { uuidv7 } from "./vendor/uuidv7.mjs";
|
|
5
|
-
import { isPlainError } from "./utils/index.mjs";
|
|
5
|
+
import { isEmptyObject, isNullish, isPlainError } from "./utils/index.mjs";
|
|
6
6
|
class PostHogCore extends PostHogCoreStateless {
|
|
7
7
|
constructor(apiKey, options){
|
|
8
8
|
const disableGeoipOption = options?.disableGeoip ?? false;
|
|
@@ -221,13 +221,14 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
221
221
|
super.groupIdentifyStateless(groupType, groupKey, groupProperties, options, distinctId, eventProperties);
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
|
-
setPersonPropertiesForFlags(properties) {
|
|
224
|
+
setPersonPropertiesForFlags(properties, reloadFeatureFlags = true) {
|
|
225
225
|
this.wrap(()=>{
|
|
226
226
|
const existingProperties = this.getPersistedProperty(PostHogPersistedProperty.PersonProperties) || {};
|
|
227
227
|
this.setPersistedProperty(PostHogPersistedProperty.PersonProperties, {
|
|
228
228
|
...existingProperties,
|
|
229
229
|
...properties
|
|
230
230
|
});
|
|
231
|
+
if (reloadFeatureFlags) this.reloadFeatureFlags();
|
|
231
232
|
});
|
|
232
233
|
}
|
|
233
234
|
resetPersonPropertiesForFlags() {
|
|
@@ -600,6 +601,23 @@ class PostHogCore extends PostHogCoreStateless {
|
|
|
600
601
|
$set_once: {}
|
|
601
602
|
});
|
|
602
603
|
}
|
|
604
|
+
setPersonProperties(userPropertiesToSet, userPropertiesToSetOnce, reloadFeatureFlags = true) {
|
|
605
|
+
this.wrap(()=>{
|
|
606
|
+
const isSetEmpty = isNullish(userPropertiesToSet) || isEmptyObject(userPropertiesToSet);
|
|
607
|
+
const isSetOnceEmpty = isNullish(userPropertiesToSetOnce) || isEmptyObject(userPropertiesToSetOnce);
|
|
608
|
+
if (isSetEmpty && isSetOnceEmpty) return;
|
|
609
|
+
if (!this._requirePersonProcessing('posthog.setPersonProperties')) return;
|
|
610
|
+
const mergedProperties = {
|
|
611
|
+
...userPropertiesToSetOnce || {},
|
|
612
|
+
...userPropertiesToSet || {}
|
|
613
|
+
};
|
|
614
|
+
this.setPersonPropertiesForFlags(mergedProperties, reloadFeatureFlags);
|
|
615
|
+
this.capture('$set', {
|
|
616
|
+
$set: userPropertiesToSet || {},
|
|
617
|
+
$set_once: userPropertiesToSetOnce || {}
|
|
618
|
+
});
|
|
619
|
+
});
|
|
620
|
+
}
|
|
603
621
|
processBeforeEnqueue(message) {
|
|
604
622
|
if (!this._beforeSend) return message;
|
|
605
623
|
const timestamp = message.timestamp;
|
package/package.json
CHANGED
package/src/posthog-core.ts
CHANGED
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
import { Compression, FeatureFlagError, PostHogPersistedProperty } from './types'
|
|
31
31
|
import { maybeAdd, PostHogCoreStateless, QuotaLimitedFeature } from './posthog-core-stateless'
|
|
32
32
|
import { uuidv7 } from './vendor/uuidv7'
|
|
33
|
-
import { isPlainError } from './utils'
|
|
33
|
+
import { isEmptyObject, isNullish, isPlainError } from './utils'
|
|
34
34
|
|
|
35
35
|
export abstract class PostHogCore extends PostHogCoreStateless {
|
|
36
36
|
// options
|
|
@@ -429,16 +429,20 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
429
429
|
/***
|
|
430
430
|
* PROPERTIES
|
|
431
431
|
***/
|
|
432
|
-
setPersonPropertiesForFlags(properties: { [type: string]:
|
|
432
|
+
setPersonPropertiesForFlags(properties: { [type: string]: JsonType }, reloadFeatureFlags = true): void {
|
|
433
433
|
this.wrap(() => {
|
|
434
434
|
// Get persisted person properties
|
|
435
435
|
const existingProperties =
|
|
436
|
-
this.getPersistedProperty<Record<string,
|
|
436
|
+
this.getPersistedProperty<Record<string, JsonType>>(PostHogPersistedProperty.PersonProperties) || {}
|
|
437
437
|
|
|
438
438
|
this.setPersistedProperty<PostHogEventProperties>(PostHogPersistedProperty.PersonProperties, {
|
|
439
439
|
...existingProperties,
|
|
440
440
|
...properties,
|
|
441
441
|
})
|
|
442
|
+
|
|
443
|
+
if (reloadFeatureFlags) {
|
|
444
|
+
this.reloadFeatureFlags()
|
|
445
|
+
}
|
|
442
446
|
})
|
|
443
447
|
}
|
|
444
448
|
|
|
@@ -1162,6 +1166,67 @@ export abstract class PostHogCore extends PostHogCoreStateless {
|
|
|
1162
1166
|
this.capture('$set', { $set: {}, $set_once: {} })
|
|
1163
1167
|
}
|
|
1164
1168
|
|
|
1169
|
+
/**
|
|
1170
|
+
* Sets properties on the person profile associated with the current `distinct_id`.
|
|
1171
|
+
* Learn more about [identifying users](https://posthog.com/docs/product-analytics/identify)
|
|
1172
|
+
*
|
|
1173
|
+
* {@label Identification}
|
|
1174
|
+
*
|
|
1175
|
+
* @remarks
|
|
1176
|
+
* Updates user properties that are stored with the person profile in PostHog.
|
|
1177
|
+
* If `personProfiles` is set to `identified_only` and no profile exists, this will create one.
|
|
1178
|
+
*
|
|
1179
|
+
* @example
|
|
1180
|
+
* ```js
|
|
1181
|
+
* // set user properties
|
|
1182
|
+
* posthog.setPersonProperties({
|
|
1183
|
+
* email: 'user@example.com',
|
|
1184
|
+
* plan: 'premium'
|
|
1185
|
+
* })
|
|
1186
|
+
* ```
|
|
1187
|
+
*
|
|
1188
|
+
* @example
|
|
1189
|
+
* ```js
|
|
1190
|
+
* // set properties with $set_once
|
|
1191
|
+
* posthog.setPersonProperties(
|
|
1192
|
+
* { name: 'Max Hedgehog' }, // $set properties
|
|
1193
|
+
* { initial_url: '/blog' } // $set_once properties
|
|
1194
|
+
* )
|
|
1195
|
+
* ```
|
|
1196
|
+
*
|
|
1197
|
+
* @public
|
|
1198
|
+
*
|
|
1199
|
+
* @param userPropertiesToSet - Optional: An object of properties to store about the user.
|
|
1200
|
+
* These properties will overwrite any existing values for the same keys.
|
|
1201
|
+
* @param userPropertiesToSetOnce - Optional: An object of properties to store about the user.
|
|
1202
|
+
* If a property is previously set, this does not override that value.
|
|
1203
|
+
* @param reloadFeatureFlags - Whether to reload feature flags after setting the properties. Defaults to true.
|
|
1204
|
+
*/
|
|
1205
|
+
setPersonProperties(
|
|
1206
|
+
userPropertiesToSet?: { [key: string]: JsonType },
|
|
1207
|
+
userPropertiesToSetOnce?: { [key: string]: JsonType },
|
|
1208
|
+
reloadFeatureFlags = true
|
|
1209
|
+
): void {
|
|
1210
|
+
this.wrap(() => {
|
|
1211
|
+
const isSetEmpty = isNullish(userPropertiesToSet) || isEmptyObject(userPropertiesToSet)
|
|
1212
|
+
const isSetOnceEmpty = isNullish(userPropertiesToSetOnce) || isEmptyObject(userPropertiesToSetOnce)
|
|
1213
|
+
if (isSetEmpty && isSetOnceEmpty) {
|
|
1214
|
+
return
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
if (!this._requirePersonProcessing('posthog.setPersonProperties')) {
|
|
1218
|
+
return
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
// Update person properties for feature flags evaluation
|
|
1222
|
+
// Merge setOnce first, then set to allow overwriting
|
|
1223
|
+
const mergedProperties = { ...(userPropertiesToSetOnce || {}), ...(userPropertiesToSet || {}) }
|
|
1224
|
+
this.setPersonPropertiesForFlags(mergedProperties, reloadFeatureFlags)
|
|
1225
|
+
|
|
1226
|
+
this.capture('$set', { $set: userPropertiesToSet || {}, $set_once: userPropertiesToSetOnce || {} })
|
|
1227
|
+
})
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1165
1230
|
/**
|
|
1166
1231
|
* Override processBeforeEnqueue to run before_send hooks.
|
|
1167
1232
|
* This runs after prepareMessage, giving users full control over the final event.
|