diff --git a/flipt-java/src/main/java/example/Main.java b/flipt-java/src/main/java/example/Main.java index 1444a29..b94bb97 100644 --- a/flipt-java/src/main/java/example/Main.java +++ b/flipt-java/src/main/java/example/Main.java @@ -12,11 +12,11 @@ public static void main(String[] args) { context.put("fizz", "buzz"); EvaluationRequest variantEvaluationRequest = - new EvaluationRequest("default", "flag1", "entity", context); + new EvaluationRequest("default", "flag1", "entity", context, Optional.empty()); EvaluationRequest booleanEvaluationRequest = - new EvaluationRequest("default", "flag_boolean", "entity", context); + new EvaluationRequest("default", "flag_boolean", "entity", context, Optional.empty()); EvaluationRequest errorEvaluationRequest = - new EvaluationRequest("default", "flag1234", "entity", new HashMap<>()); + new EvaluationRequest("default", "flag1234", "entity", new HashMap<>(), Optional.empty()); List evaluationRequests = new ArrayList<>(); evaluationRequests.add(variantEvaluationRequest); @@ -31,6 +31,7 @@ public static void main(String[] args) { BatchEvaluationResponse batchEvaluationResponse = fliptClient .evaluation() - .batch(new BatchEvaluationRequest(Optional.of(""), evaluationRequests)); + .batch( + new BatchEvaluationRequest(Optional.of(""), evaluationRequests, Optional.empty())); } } diff --git a/flipt-java/src/main/java/io/flipt/api/evaluation/models/BatchEvaluationRequest.java b/flipt-java/src/main/java/io/flipt/api/evaluation/models/BatchEvaluationRequest.java index 7e76265..8c0418d 100644 --- a/flipt-java/src/main/java/io/flipt/api/evaluation/models/BatchEvaluationRequest.java +++ b/flipt-java/src/main/java/io/flipt/api/evaluation/models/BatchEvaluationRequest.java @@ -9,10 +9,13 @@ public class BatchEvaluationRequest { private final Optional requestId; private final List requests; + private Optional reference; - public BatchEvaluationRequest(Optional requestId, List requests) { + public BatchEvaluationRequest( + Optional requestId, List requests, Optional reference) { this.requestId = requestId; this.requests = requests; + this.reference = reference; } @JsonProperty("requests") @@ -24,4 +27,9 @@ public List getRequests() { public Optional getRequestId() { return requestId; } + + @JsonProperty("reference") + public Optional getReference() { + return reference; + } } diff --git a/flipt-java/src/main/java/io/flipt/api/evaluation/models/EvaluationRequest.java b/flipt-java/src/main/java/io/flipt/api/evaluation/models/EvaluationRequest.java index b572106..6b14bf9 100644 --- a/flipt-java/src/main/java/io/flipt/api/evaluation/models/EvaluationRequest.java +++ b/flipt-java/src/main/java/io/flipt/api/evaluation/models/EvaluationRequest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; +import java.util.Optional; @JsonInclude(JsonInclude.Include.NON_EMPTY) public class EvaluationRequest { @@ -10,13 +11,19 @@ public class EvaluationRequest { private final String flagKey; private final String entityId; private final Map context; + private final Optional reference; public EvaluationRequest( - String namespaceKey, String flagKey, String entityId, Map context) { + String namespaceKey, + String flagKey, + String entityId, + Map context, + Optional reference) { this.namespaceKey = namespaceKey; this.flagKey = flagKey; this.entityId = entityId; this.context = context; + this.reference = reference; } @JsonProperty("namespaceKey") @@ -38,4 +45,9 @@ public String getEntityId() { public Map getContext() { return context; } + + @JsonProperty("reference") + public Optional getReference() { + return reference; + } } diff --git a/flipt-java/src/test/java/TestFliptClient.java b/flipt-java/src/test/java/TestFliptClient.java index f7f0c3d..0c459ea 100644 --- a/flipt-java/src/test/java/TestFliptClient.java +++ b/flipt-java/src/test/java/TestFliptClient.java @@ -12,8 +12,8 @@ void testVariant() { String fliptURL = System.getenv().get("FLIPT_URL"); String authToken = System.getenv().get("FLIPT_AUTH_TOKEN"); - assert !fliptURL.isEmpty(); - assert !authToken.isEmpty(); + assert fliptURL != null && !fliptURL.isEmpty(); + assert authToken != null && !authToken.isEmpty(); AuthenticationStrategy authenticationStrategy = new ClientTokenAuthenticationStrategy(authToken); @@ -24,7 +24,9 @@ void testVariant() { Map context = new HashMap<>(); context.put("fizz", "buzz"); VariantEvaluationResponse variant = - fc.evaluation().variant(new EvaluationRequest("default", "flag1", "entity", context)); + fc.evaluation() + .variant( + new EvaluationRequest("default", "flag1", "entity", context, Optional.empty())); Assertions.assertTrue(variant.isMatch()); Assertions.assertEquals("flag1", variant.getFlagKey()); @@ -38,8 +40,8 @@ void testBoolean() { String fliptURL = System.getenv().get("FLIPT_URL"); String authToken = System.getenv().get("FLIPT_AUTH_TOKEN"); - assert !fliptURL.isEmpty(); - assert !authToken.isEmpty(); + assert fliptURL != null && !fliptURL.isEmpty(); + assert authToken != null && !authToken.isEmpty(); AuthenticationStrategy authenticationStrategy = new ClientTokenAuthenticationStrategy(authToken); @@ -52,7 +54,9 @@ void testBoolean() { BooleanEvaluationResponse booleanEvaluation = fc.evaluation() - .booleanEvaluation(new EvaluationRequest("default", "flag_boolean", "entity", context)); + .booleanEvaluation( + new EvaluationRequest( + "default", "flag_boolean", "entity", context, Optional.empty())); Assertions.assertTrue(booleanEvaluation.isEnabled()); Assertions.assertEquals("flag_boolean", booleanEvaluation.getFlagKey()); @@ -64,8 +68,8 @@ void testBatch() { String fliptURL = System.getenv().get("FLIPT_URL"); String authToken = System.getenv().get("FLIPT_AUTH_TOKEN"); - assert !fliptURL.isEmpty(); - assert !authToken.isEmpty(); + assert fliptURL != null && !fliptURL.isEmpty(); + assert authToken != null && !authToken.isEmpty(); AuthenticationStrategy authenticationStrategy = new ClientTokenAuthenticationStrategy(authToken); @@ -77,11 +81,11 @@ void testBatch() { context.put("fizz", "buzz"); EvaluationRequest variantEvaluationRequest = - new EvaluationRequest("default", "flag1", "entity", context); + new EvaluationRequest("default", "flag1", "entity", context, Optional.empty()); EvaluationRequest booleanEvaluationRequest = - new EvaluationRequest("default", "flag_boolean", "entity", context); + new EvaluationRequest("default", "flag_boolean", "entity", context, Optional.empty()); EvaluationRequest errorEvaluationRequest = - new EvaluationRequest("default", "flag1234", "entity", new HashMap<>()); + new EvaluationRequest("default", "flag1234", "entity", new HashMap<>(), Optional.empty()); List evaluationRequests = new ArrayList<>(); evaluationRequests.add(variantEvaluationRequest); @@ -89,7 +93,9 @@ void testBatch() { evaluationRequests.add(errorEvaluationRequest); BatchEvaluationResponse batch = - fc.evaluation().batch(new BatchEvaluationRequest(Optional.of(""), evaluationRequests)); + fc.evaluation() + .batch( + new BatchEvaluationRequest(Optional.of(""), evaluationRequests, Optional.empty())); // Variant EvaluationResponse first = batch.getResponses().get(0); diff --git a/flipt-node/src/evaluation/models.ts b/flipt-node/src/evaluation/models.ts index 849b274..553f3f4 100644 --- a/flipt-node/src/evaluation/models.ts +++ b/flipt-node/src/evaluation/models.ts @@ -3,6 +3,7 @@ export interface EvaluationRequest { flagKey: string; entityId: string; context: object; + reference?: string; } export interface VariantEvaluationResponse { @@ -27,6 +28,7 @@ export interface BooleanEvaluationResponse { export interface BatchEvaluationRequest { request_id?: string; requests: EvaluationRequest[]; + reference?: string; } interface ErrorEvaluationResponse { diff --git a/flipt-php/src/Flipt/Client/FliptClient.php b/flipt-php/src/Flipt/Client/FliptClient.php index 5cd9c06..140f870 100644 --- a/flipt-php/src/Flipt/Client/FliptClient.php +++ b/flipt-php/src/Flipt/Client/FliptClient.php @@ -31,9 +31,9 @@ public function __construct(string|Client $host, string $namespace = "default", /** * Returns the boolean evaluation result */ - public function boolean(string $name, $context = [], $entityId = NULL): BooleanEvaluationResult + public function boolean(string $name, $context = [], $entityId = NULL, $reference = ""): BooleanEvaluationResult { - $response = $this->apiRequest('/evaluate/v1/boolean', $this->mergeRequestParams($name, $context, $entityId)); + $response = $this->apiRequest('/evaluate/v1/boolean', $this->mergeRequestParams($name, $context, $entityId, $reference)); return new DefaultBooleanEvaluationResult($response['flagKey'], $response['enabled'], $response['reason'], $response['requestDurationMillis'], $response['requestId'], $response['timestamp']); } @@ -42,9 +42,9 @@ public function boolean(string $name, $context = [], $entityId = NULL): BooleanE /** * Returns the variant evaluation result */ - public function variant(string $name, $context = [], $entityId = NULL): VariantEvaluationResult + public function variant(string $name, $context = [], $entityId = NULL, $reference = ""): VariantEvaluationResult { - $response = $this->apiRequest('/evaluate/v1/variant', $this->mergeRequestParams($name, $context, $entityId)); + $response = $this->apiRequest('/evaluate/v1/variant', $this->mergeRequestParams($name, $context, $entityId, $reference)); return new DefaultVariantEvaluationResult($response['flagKey'], $response['match'], $response['reason'], $response['requestDurationMillis'], $response['requestId'], $response['timestamp'], $response['segmentKeys'], $response['variantKey'], $response['variantAttachment']); } @@ -52,13 +52,14 @@ public function variant(string $name, $context = [], $entityId = NULL): VariantE /** * Batch return evaluation requests */ - public function batch(array $names, $context = [], $entityId = NULL): array + public function batch(array $names, $context = [], $entityId = NULL, $reference = ""): array { $response = $this->apiRequest('/evaluate/v1/batch', [ 'requests' => array_map(function ($name) use ($context, $entityId) { return $this->mergeRequestParams($name, $context, $entityId); - }, $names) + }, $names), + 'reference' => $reference ]); @@ -82,13 +83,14 @@ public function batch(array $names, $context = [], $entityId = NULL): array } - protected function mergeRequestParams(string $name, $context = [], $entityId = NULL) + protected function mergeRequestParams(string $name, $context = [], $entityId = NULL, $reference = "") { return [ 'context' => array_merge($this->context, $context), 'entityId' => isset($entityId) ? $entityId : $this->entityId, 'flagKey' => $name, 'namespaceKey' => $this->namespace, + 'reference' => $this->reference, ]; } diff --git a/flipt-python/flipt/evaluation/models.py b/flipt-python/flipt/evaluation/models.py index e083fd7..79514ae 100644 --- a/flipt-python/flipt/evaluation/models.py +++ b/flipt-python/flipt/evaluation/models.py @@ -26,11 +26,13 @@ class EvaluationRequest(BaseModel): flag_key: str entity_id: str context: dict + reference: Optional[str] = None class BatchEvaluationRequest(BaseModel): request_id: Optional[str] = None requests: List[EvaluationRequest] + reference: Optional[str] = None class VariantEvaluationResponse(BaseModel): @@ -52,7 +54,7 @@ class BooleanEvaluationResponse(BaseModel): timestamp: str -class ErrorEvaluationReponse(BaseModel): +class ErrorEvaluationResponse(BaseModel): flag_key: str = Field(..., alias="flagKey") namespace_key: str = Field(..., alias="namespaceKey") reason: ErrorEvaluationReason @@ -66,7 +68,7 @@ class EvaluationResponse(BaseModel): variant_response: Optional[VariantEvaluationResponse] = Field( default=None, alias="variantResponse" ) - error_response: Optional[ErrorEvaluationReponse] = Field( + error_response: Optional[ErrorEvaluationResponse] = Field( default=None, alias="errorResponse" ) diff --git a/flipt-rust/src/evaluation/models.rs b/flipt-rust/src/evaluation/models.rs index cd82c7f..de9d536 100644 --- a/flipt-rust/src/evaluation/models.rs +++ b/flipt-rust/src/evaluation/models.rs @@ -5,6 +5,7 @@ use std::collections::HashMap; #[derive(Default, Serialize)] pub struct BatchEvaluationRequest { pub requests: Vec, + pub reference: Option, } #[derive(Serialize)] @@ -14,6 +15,7 @@ pub struct EvaluationRequest { pub flag_key: String, pub entity_id: String, pub context: HashMap, + pub reference: Option, } #[derive(Debug, Clone, PartialEq, Deserialize)] diff --git a/flipt-rust/tests/integration.rs b/flipt-rust/tests/integration.rs index b764601..2be4c02 100644 --- a/flipt-rust/tests/integration.rs +++ b/flipt-rust/tests/integration.rs @@ -27,12 +27,14 @@ async fn tests() { flag_key: "flag1".into(), entity_id: "entity".into(), context: context.clone(), + reference: None, }; let boolean_request = EvaluationRequest { namespace_key: "default".into(), flag_key: "flag_boolean".into(), entity_id: "entity".into(), context: context.clone(), + reference: None, }; let variant = flipt_client @@ -63,9 +65,13 @@ async fn tests() { flag_key: "notfound".into(), entity_id: "entity".into(), context: context.clone(), + reference: None, }); - let batch_request = BatchEvaluationRequest { requests }; + let batch_request = BatchEvaluationRequest { + requests, + reference: None, + }; let batch = flipt_client.evaluation.batch(&batch_request).await.unwrap(); // Variant