Flagsmith / Flagsmith/flagsmith-nodejs-client

[sdk/local-evaluation] Duplicate identity override entries silently drop feature overrides

Đang mở
#267 5 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
TypeScript
Star
30
Fork
26
Merge trung bình
11 phút
Pull request đã merge (30 ngày)
5

Mô tả

## Problem

When an environment document returned by the Flagsmith API contains more than one entry in `identity_overrides` sharing the same `identifier`, the SDK keeps only the last entry for that identifier during local evaluation. Any `identity_features` defined on the earlier entries are discarded, so the corresponding flags fall back to the environment default instead of the configured override.

For example, given an environment payload like:

```json
{
"identity_overrides": [
{
"identifier": "multi-override-id",
"identity_features": [
{
"feature": { "name": "some_feature" },
"feature_state_value": "override-from-first-entry",
"enabled": false
}
]
},
{
"identifier": "multi-override-id",
"identity_features": [
{
"feature": { "name": "mv_feature" },
"feature_state_value": "override-from-second-entry",
"enabled": true
}
]
}
]
}
```

Calling `getIdentityFlags('multi-override-id')` with local evaluation enabled returns the override for `mv_feature` only. `some_feature` resolves to its environment default, as if the first entry never existed.

## Impact

Any identifier whose overrides arrive split across multiple `identity_overrides` entries gets the wrong flag values during server-side local evaluation. The breakage is silent (no warning, no error) and deterministic for a given payload, so affected identifiers stay broken on every request until the environment payload changes shape.

## Reproduction

1. Use an environment whose `identity_overrides` array contains two entries with the same `identifier`, each carrying a different feature in `identity_features` (e.g. entry A overrides `some_feature`, entry B overrides `mv_feature`).
2. Initialise the SDK with `enableLocalEvaluation: true` and call `getIdentityFlags('')`.
3. Observed: only the features from the last entry are applied. `some_feature` resolves to its environment default instead of `"override-from-first-entry"`.
4. Expected: both `some_feature` and `mv_feature` resolve to their respective override values and enabled states.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.