Skip to content

Commit 778cdc4

Browse files
committed
feat: use-flagsmith-id-int-for-feature-id
1 parent fe9db9e commit 778cdc4

4 files changed

Lines changed: 16 additions & 17 deletions

File tree

flagsmith-engine/evaluation/evaluationContext/mappers.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { IdentityModel } from '../../identities/models.js';
1212
import { TraitModel } from '../../identities/traits/models.js';
1313
import { IDENTITY_OVERRIDE_SEGMENT_NAME } from '../../segments/constants.js';
1414
import { createHash } from 'node:crypto';
15-
import { parse as uuidParse } from 'uuid';
1615
import { uuidToBigInt } from '../../features/util.js';
1716

1817
export function getEvaluationContext(
@@ -57,7 +56,10 @@ function mapEnvironmentModelToEvaluationContext(environment: EnvironmentModel):
5756
enabled: fs.enabled,
5857
value: fs.getValue(),
5958
variants,
60-
priority: fs.featureSegment?.priority
59+
priority: fs.featureSegment?.priority,
60+
metadata: {
61+
flagsmithId: fs.feature.id
62+
}
6163
};
6264
}
6365

flagsmith-engine/evaluation/models.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,22 @@ export type SegmentConditionOperator = SegmentCondition['operator'];
5454
export type EvaluationReason = EvaluationContextResultFlagResult['reason'];
5555

5656
export type EvaluationResultSegments = EvaluationContextResult['segments'];
57-
export type EvaluationResultFlags = Record<
57+
import type { FlagResult } from './evaluationResult/evaluationResult.types.js';
58+
59+
export type FlagResultWithMetadata<T extends Metadata = Metadata> = FlagResult & {
60+
metadata?: T;
61+
};
62+
63+
export type EvaluationResultFlags<T extends Metadata = Metadata> = Record<
5864
string,
59-
{
60-
feature_key: FeatureKey;
61-
name: FeatureName;
62-
enabled: FeatureEnabled;
63-
value: FeatureValue;
64-
metadata?: Metadata;
65-
reason: EvaluationReason;
66-
}
65+
FlagResultWithMetadata<T>
6766
>;
6867

6968
export type EvaluationResult = {
7069
flags: EvaluationResultFlags;
7170
segments: EvaluationResultSegments;
7271
};
7372

74-
export { FlagResult } from './evaluationResult/evaluationResult.types.js';
75-
7673
export enum SegmentSource {
7774
API = 'api',
7875
IDENTITY_OVERRIDE = 'identity_override'

flagsmith-engine/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export function evaluateFeatures(
127127
name: finalFeature.name,
128128
enabled: finalFeature.enabled,
129129
value: evaluatedValue,
130-
...(finalFeature.metadata ? { metadata: { ...finalFeature.metadata } } : {}),
130+
...(finalFeature.metadata ? { metadata: finalFeature.metadata } : {}),
131131
reason:
132132
evaluatedReason ??
133133
getTargetingMatchReason({ type: 'SEGMENT', override: segmentOverride })

sdk/models.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { EvaluationResult, FlagResult } from '../flagsmith-engine/evaluation/models.js';
1+
import { EvaluationResult, FlagResultWithMetadata } from '../flagsmith-engine/evaluation/models.js';
22
import { FeatureStateModel } from '../flagsmith-engine/features/models.js';
33
import { AnalyticsProcessor } from './analytics.js';
44

@@ -81,11 +81,11 @@ export class Flag extends BaseFlag {
8181
});
8282
}
8383

84-
static fromFlagResult(flagResult: FlagResult): Flag {
84+
static fromFlagResult(flagResult: FlagResultWithMetadata<{ flagsmithId?: number }>): Flag {
8585
return new Flag({
8686
enabled: flagResult.enabled,
8787
value: flagResult.value ?? null,
88-
featureId: Number(flagResult.feature_key),
88+
featureId: flagResult.metadata?.flagsmithId || Number(flagResult.feature_key),
8989
featureName: flagResult.name,
9090
reason: flagResult.reason
9191
});

0 commit comments

Comments
 (0)