Skip to content

Commit d40388a

Browse files
committed
fix: groupProperties and userProperties typed correctly
1 parent 4618396 commit d40388a

File tree

4 files changed

+157
-56
lines changed

4 files changed

+157
-56
lines changed

posthog-server/api/posthog-server.api

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
public final class com/posthog/server/PostHog : com/posthog/server/PostHogInterface {
1+
public final class com/posthog/server/PostHog : com/posthog/PostHogStateless, com/posthog/server/PostHogInterface {
22
public static final field Companion Lcom/posthog/server/PostHog$Companion;
33
public fun <init> ()V
44
public fun alias (Ljava/lang/String;Ljava/lang/String;)V
55
public fun capture (Ljava/lang/String;Ljava/lang/String;)V
66
public fun capture (Ljava/lang/String;Ljava/lang/String;Lcom/posthog/server/PostHogCaptureOptions;)V
7-
public fun capture (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;)V
7+
public fun capture (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;Lcom/posthog/server/PostHogSendFeatureFlagOptions;)V
88
public fun close ()V
99
public fun debug (Z)V
1010
public fun flush ()V
@@ -35,10 +35,11 @@ public final class com/posthog/server/PostHog$Companion {
3535

3636
public final class com/posthog/server/PostHogCaptureOptions {
3737
public static final field Companion Lcom/posthog/server/PostHogCaptureOptions$Companion;
38-
public synthetic fun <init> (Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
38+
public synthetic fun <init> (Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;Lcom/posthog/server/PostHogSendFeatureFlagOptions;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
3939
public static final fun builder ()Lcom/posthog/server/PostHogCaptureOptions$Builder;
4040
public final fun getGroups ()Ljava/util/Map;
4141
public final fun getProperties ()Ljava/util/Map;
42+
public final fun getSendFeatureFlags ()Lcom/posthog/server/PostHogSendFeatureFlagOptions;
4243
public final fun getTimestamp ()Ljava/util/Date;
4344
public final fun getUserProperties ()Ljava/util/Map;
4445
public final fun getUserPropertiesSetOnce ()Ljava/util/Map;
@@ -49,15 +50,19 @@ public final class com/posthog/server/PostHogCaptureOptions$Builder {
4950
public final fun build ()Lcom/posthog/server/PostHogCaptureOptions;
5051
public final fun getGroups ()Ljava/util/Map;
5152
public final fun getProperties ()Ljava/util/Map;
53+
public final fun getSendFeatureFlags ()Lcom/posthog/server/PostHogSendFeatureFlagOptions;
5254
public final fun getTimestamp ()Ljava/util/Date;
5355
public final fun getUserProperties ()Ljava/util/Map;
5456
public final fun getUserPropertiesSetOnce ()Ljava/util/Map;
5557
public final fun group (Ljava/lang/String;Ljava/lang/String;)Lcom/posthog/server/PostHogCaptureOptions$Builder;
5658
public final fun groups (Ljava/util/Map;)Lcom/posthog/server/PostHogCaptureOptions$Builder;
5759
public final fun properties (Ljava/util/Map;)Lcom/posthog/server/PostHogCaptureOptions$Builder;
5860
public final fun property (Ljava/lang/String;Ljava/lang/Object;)Lcom/posthog/server/PostHogCaptureOptions$Builder;
61+
public final fun sendFeatureFlags (Lcom/posthog/server/PostHogSendFeatureFlagOptions;)Lcom/posthog/server/PostHogCaptureOptions$Builder;
62+
public final fun sendFeatureFlags (Ljava/lang/Boolean;)Lcom/posthog/server/PostHogCaptureOptions$Builder;
5963
public final fun setGroups (Ljava/util/Map;)V
6064
public final fun setProperties (Ljava/util/Map;)V
65+
public final fun setSendFeatureFlags (Lcom/posthog/server/PostHogSendFeatureFlagOptions;)V
6166
public final fun setTimestamp (Ljava/util/Date;)V
6267
public final fun setUserProperties (Ljava/util/Map;)V
6368
public final fun setUserPropertiesSetOnce (Ljava/util/Map;)V
@@ -162,12 +167,14 @@ public final class com/posthog/server/PostHogConfig$Companion {
162167

163168
public final class com/posthog/server/PostHogFeatureFlagOptions {
164169
public static final field Companion Lcom/posthog/server/PostHogFeatureFlagOptions$Companion;
165-
public synthetic fun <init> (Ljava/lang/Object;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
170+
public synthetic fun <init> (Ljava/lang/Object;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
166171
public static final fun builder ()Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
167172
public final fun getDefaultValue ()Ljava/lang/Object;
168173
public final fun getGroupProperties ()Ljava/util/Map;
169174
public final fun getGroups ()Ljava/util/Map;
175+
public final fun getOnlyEvaluateLocally ()Z
170176
public final fun getPersonProperties ()Ljava/util/Map;
177+
public final fun getSendFeatureFlagsEvent ()Z
171178
}
172179

173180
public final class com/posthog/server/PostHogFeatureFlagOptions$Builder {
@@ -177,17 +184,23 @@ public final class com/posthog/server/PostHogFeatureFlagOptions$Builder {
177184
public final fun getDefaultValue ()Ljava/lang/Object;
178185
public final fun getGroupProperties ()Ljava/util/Map;
179186
public final fun getGroups ()Ljava/util/Map;
187+
public final fun getOnlyEvaluateLocally ()Z
180188
public final fun getPersonProperties ()Ljava/util/Map;
189+
public final fun getSendFeatureFlagsEvent ()Z
181190
public final fun group (Ljava/lang/String;Ljava/lang/String;)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
182191
public final fun groupProperties (Ljava/util/Map;)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
183192
public final fun groupProperty (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
184193
public final fun groups (Ljava/util/Map;)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
194+
public final fun onlyEvaluateLocally (Z)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
185195
public final fun personProperties (Ljava/util/Map;)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
186196
public final fun personProperty (Ljava/lang/String;Ljava/lang/Object;)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
197+
public final fun sendFeatureFlagsEvent (Z)Lcom/posthog/server/PostHogFeatureFlagOptions$Builder;
187198
public final fun setDefaultValue (Ljava/lang/Object;)V
188199
public final fun setGroupProperties (Ljava/util/Map;)V
189200
public final fun setGroups (Ljava/util/Map;)V
201+
public final fun setOnlyEvaluateLocally (Z)V
190202
public final fun setPersonProperties (Ljava/util/Map;)V
203+
public final fun setSendFeatureFlagsEvent (Z)V
191204
}
192205

193206
public final class com/posthog/server/PostHogFeatureFlagOptions$Companion {
@@ -198,7 +211,7 @@ public abstract interface class com/posthog/server/PostHogInterface {
198211
public abstract fun alias (Ljava/lang/String;Ljava/lang/String;)V
199212
public abstract fun capture (Ljava/lang/String;Ljava/lang/String;)V
200213
public abstract fun capture (Ljava/lang/String;Ljava/lang/String;Lcom/posthog/server/PostHogCaptureOptions;)V
201-
public abstract synthetic fun capture (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;)V
214+
public abstract synthetic fun capture (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;Lcom/posthog/server/PostHogSendFeatureFlagOptions;)V
202215
public abstract fun close ()V
203216
public abstract fun debug (Z)V
204217
public abstract fun flush ()V
@@ -225,7 +238,7 @@ public abstract interface class com/posthog/server/PostHogInterface {
225238
public final class com/posthog/server/PostHogInterface$DefaultImpls {
226239
public static fun capture (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;)V
227240
public static fun capture (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;Lcom/posthog/server/PostHogCaptureOptions;)V
228-
public static synthetic fun capture$default (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;ILjava/lang/Object;)V
241+
public static synthetic fun capture$default (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Date;Lcom/posthog/server/PostHogSendFeatureFlagOptions;ILjava/lang/Object;)V
229242
public static synthetic fun debug$default (Lcom/posthog/server/PostHogInterface;ZILjava/lang/Object;)V
230243
public static fun getFeatureFlag (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
231244
public static fun getFeatureFlag (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;Lcom/posthog/server/PostHogFeatureFlagOptions;)Ljava/lang/Object;
@@ -247,3 +260,32 @@ public final class com/posthog/server/PostHogInterface$DefaultImpls {
247260
public static synthetic fun isFeatureEnabled$default (Lcom/posthog/server/PostHogInterface;Ljava/lang/String;Ljava/lang/String;ZLjava/util/Map;Ljava/util/Map;Ljava/util/Map;ILjava/lang/Object;)Z
248261
}
249262

263+
public final class com/posthog/server/PostHogSendFeatureFlagOptions {
264+
public static final field Companion Lcom/posthog/server/PostHogSendFeatureFlagOptions$Companion;
265+
public synthetic fun <init> (ZLjava/util/Map;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
266+
public static final fun builder ()Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
267+
public final fun getGroupProperties ()Ljava/util/Map;
268+
public final fun getOnlyEvaluateLocally ()Z
269+
public final fun getPersonProperties ()Ljava/util/Map;
270+
}
271+
272+
public final class com/posthog/server/PostHogSendFeatureFlagOptions$Builder {
273+
public fun <init> ()V
274+
public final fun build ()Lcom/posthog/server/PostHogSendFeatureFlagOptions;
275+
public final fun getGroupProperties ()Ljava/util/Map;
276+
public final fun getOnlyEvaluateLocally ()Z
277+
public final fun getPersonProperties ()Ljava/util/Map;
278+
public final fun groupProperties (Ljava/util/Map;)Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
279+
public final fun groupProperty (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
280+
public final fun onlyEvaluateLocally (Z)Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
281+
public final fun personProperties (Ljava/util/Map;)Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
282+
public final fun personProperty (Ljava/lang/String;Ljava/lang/Object;)Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
283+
public final fun setGroupProperties (Ljava/util/Map;)V
284+
public final fun setOnlyEvaluateLocally (Z)V
285+
public final fun setPersonProperties (Ljava/util/Map;)V
286+
}
287+
288+
public final class com/posthog/server/PostHogSendFeatureFlagOptions$Companion {
289+
public final fun builder ()Lcom/posthog/server/PostHogSendFeatureFlagOptions$Builder;
290+
}
291+

posthog-server/src/main/java/com/posthog/server/PostHog.kt

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -249,36 +249,18 @@ public class PostHog : PostHogInterface, PostHogStateless() {
249249
}
250250
}
251251

252-
private fun appendFlagCaptureProperties(
252+
internal fun appendFlagCaptureProperties(
253253
distinctId: String,
254254
properties: MutableMap<String, Any>?,
255255
groups: Map<String, String>?,
256256
options: PostHogSendFeatureFlagOptions?,
257257
) {
258-
if (options == null || properties == null) {
259-
return
260-
}
261-
262-
val response =
263-
(featureFlags as? PostHogFeatureFlags)?.resolveFeatureFlags(
264-
distinctId,
265-
groups,
266-
options.personProperties,
267-
options.groupProperties,
268-
options.onlyEvaluateLocally,
269-
)
270-
271-
response?.results?.values?.let {
272-
val activeFeatureFlags = mutableListOf<String>()
273-
it.forEach { flag ->
274-
val flagValue = flag.variant ?: flag.enabled
275-
properties["\$feature/${flag.key}"] = flagValue
276-
if (flagValue != false) {
277-
activeFeatureFlags.add(flag.key)
278-
}
279-
}
280-
properties["\$active_feature_flags"] = activeFeatureFlags.toList()
281-
}
258+
(featureFlags as? PostHogFeatureFlags)?.appendFlagEventProperties(
259+
distinctId,
260+
properties,
261+
groups,
262+
options,
263+
)
282264
}
283265

284266
public companion object {

posthog-server/src/main/java/com/posthog/server/PostHogSendFeatureFlagOptions.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ package com.posthog.server
77
*/
88
public class PostHogSendFeatureFlagOptions private constructor(
99
public val onlyEvaluateLocally: Boolean = false,
10-
public val personProperties: Map<String, String>?,
11-
public val groupProperties: Map<String, String>?,
10+
public val personProperties: Map<String, Any?>?,
11+
public val groupProperties: Map<String, Map<String, Any?>>?,
1212
) {
1313
public class Builder {
1414
public var onlyEvaluateLocally: Boolean = false
15-
public var personProperties: MutableMap<String, String>? = null
16-
public var groupProperties: MutableMap<String, String>? = null
15+
public var personProperties: MutableMap<String, Any?>? = null
16+
public var groupProperties: MutableMap<String, MutableMap<String, Any?>>? = null
1717

1818
/**
1919
* Sets whether to only evaluate the feature flags locally.
@@ -29,11 +29,11 @@ public class PostHogSendFeatureFlagOptions private constructor(
2929
*/
3030
public fun personProperty(
3131
key: String,
32-
value: String,
32+
propValue: Any?,
3333
): Builder {
3434
personProperties =
3535
(personProperties ?: mutableMapOf()).apply {
36-
put(key, value)
36+
put(key, propValue)
3737
}
3838
return this
3939
}
@@ -42,7 +42,7 @@ public class PostHogSendFeatureFlagOptions private constructor(
4242
* Appends multiple user properties to the capture options.
4343
* @see <a href="https://posthog.com/docs/product-analytics/user-properties">Documentation: User Properties</a>
4444
*/
45-
public fun personProperties(userProperties: Map<String, String>): Builder {
45+
public fun personProperties(userProperties: Map<String, Any?>): Builder {
4646
this.personProperties =
4747
(this.personProperties ?: mutableMapOf()).apply {
4848
putAll(userProperties)
@@ -55,12 +55,13 @@ public class PostHogSendFeatureFlagOptions private constructor(
5555
* @see <a href="https://posthog.com/docs/product-analytics/user-properties">Documentation: User Properties</a>
5656
*/
5757
public fun groupProperty(
58+
group: String,
5859
key: String,
59-
value: String,
60+
propValue: Any?,
6061
): Builder {
6162
groupProperties =
6263
(groupProperties ?: mutableMapOf()).apply {
63-
put(key, value)
64+
getOrPut(group) { mutableMapOf() }[key] = propValue
6465
}
6566
return this
6667
}
@@ -69,10 +70,12 @@ public class PostHogSendFeatureFlagOptions private constructor(
6970
* Appends multiple user properties (set once) to the capture options.
7071
* @see <a href="https://posthog.com/docs/product-analytics/user-properties">Documentation: User Properties</a>
7172
*/
72-
public fun groupProperties(groupProperties: Map<String, String>): Builder {
73+
public fun groupProperties(groupProperties: Map<String, Map<String, Any?>>): Builder {
7374
this.groupProperties =
7475
(this.groupProperties ?: mutableMapOf()).apply {
75-
putAll(groupProperties)
76+
groupProperties.forEach { (group, properties) ->
77+
getOrPut(group) { mutableMapOf() }.putAll(properties)
78+
}
7679
}
7780
return this
7881
}

0 commit comments

Comments
 (0)