@statsig/js-user-persisted-storage 3.17.2 → 3.18.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@statsig/js-user-persisted-storage",
3
- "version": "3.17.2",
3
+ "version": "3.18.1",
4
4
  "license": "ISC",
5
5
  "homepage": "https://github.com/statsig-io/js-client-monorepo",
6
6
  "repository": {
@@ -9,7 +9,7 @@
9
9
  "directory": "packages/js-user-persisted-storage"
10
10
  },
11
11
  "dependencies": {
12
- "@statsig/client-core": "3.17.2"
12
+ "@statsig/client-core": "3.18.1"
13
13
  },
14
14
  "type": "commonjs",
15
15
  "main": "./src/index.js",
@@ -6,6 +6,9 @@ export type StickyValues = {
6
6
  secondary_exposures: SecondaryExposure[];
7
7
  group_name: string | null;
8
8
  time: number;
9
+ undelegated_secondary_exposures?: SecondaryExposure[];
10
+ config_delegate?: string | null;
11
+ explicit_parameters?: string[];
9
12
  };
10
13
  export type UserPersistedValues = Record<string, StickyValues>;
11
14
  export type UserPersistentStorage = {
@@ -1,4 +1,4 @@
1
- import { Experiment, ExperimentEvaluationOptions, OverrideAdapter, StatsigUser } from '@statsig/client-core';
1
+ import { Experiment, ExperimentEvaluationOptions, Layer, LayerEvaluationOptions, OverrideAdapter, StatsigUser } from '@statsig/client-core';
2
2
  import { UserPersistedValues, UserPersistentStorage } from './UserPersistedStorage';
3
3
  export declare class UserPersistentOverrideAdapter implements OverrideAdapter {
4
4
  readonly storage: UserPersistentStorage;
@@ -6,7 +6,10 @@ export declare class UserPersistentOverrideAdapter implements OverrideAdapter {
6
6
  loadUserPersistedValues(user: StatsigUser, idType: string): UserPersistedValues;
7
7
  loadUserPersistedValuesAsync(user: StatsigUser, idType: string): Promise<UserPersistedValues>;
8
8
  getExperimentOverride(current: Experiment, user: StatsigUser, options?: ExperimentEvaluationOptions): Experiment | null;
9
+ getLayerOverride(current: Layer, user: StatsigUser, options?: LayerEvaluationOptions): Layer | null;
9
10
  private _makeStickyExperiment;
11
+ private _makeStickyLayer;
12
+ private _handleSaveLayer;
10
13
  private _handleDelete;
11
14
  private _handleSave;
12
15
  private _getStorageKey;
@@ -21,8 +21,8 @@ class UserPersistentOverrideAdapter {
21
21
  return (_a = this.storage.load(key)) !== null && _a !== void 0 ? _a : {};
22
22
  }
23
23
  loadUserPersistedValuesAsync(user, idType) {
24
- var _a;
25
24
  return __awaiter(this, void 0, void 0, function* () {
25
+ var _a;
26
26
  const key = this._getStorageKey(user, idType);
27
27
  return (_a = (yield this.storage.loadAsync(key))) !== null && _a !== void 0 ? _a : {};
28
28
  });
@@ -48,6 +48,27 @@ class UserPersistentOverrideAdapter {
48
48
  }
49
49
  return null;
50
50
  }
51
+ getLayerOverride(current, user, options) {
52
+ const evaluation = current.__evaluation;
53
+ if (evaluation == null) {
54
+ return null;
55
+ }
56
+ const values = options === null || options === void 0 ? void 0 : options.userPersistedValues;
57
+ if (evaluation.is_experiment_active !== true ||
58
+ values == null ||
59
+ typeof values !== 'object') {
60
+ this._handleDelete(user, current.name, 'userID');
61
+ return null;
62
+ }
63
+ const sticky = values[current.name];
64
+ if (sticky != null) {
65
+ return this._makeStickyLayer(evaluation, sticky);
66
+ }
67
+ if (evaluation.is_user_in_experiment) {
68
+ this._handleSaveLayer(user, current, evaluation);
69
+ }
70
+ return null;
71
+ }
51
72
  _makeStickyExperiment(evaluation, sticky) {
52
73
  const { id_type, name } = evaluation;
53
74
  const { json_value: value, secondary_exposures, group_name, rule_id, time, } = sticky;
@@ -68,6 +89,42 @@ class UserPersistentOverrideAdapter {
68
89
  is_device_based: evaluation.is_device_based,
69
90
  });
70
91
  }
92
+ _makeStickyLayer(evaluation, sticky) {
93
+ const { name, allocated_experiment_name } = evaluation;
94
+ const { json_value: value, secondary_exposures, group_name, rule_id, time, } = sticky;
95
+ const details = {
96
+ reason: 'Persisted',
97
+ lcut: time,
98
+ };
99
+ return (0, client_core_1._makeLayer)(name, details, {
100
+ value,
101
+ secondary_exposures,
102
+ group_name: group_name !== null && group_name !== void 0 ? group_name : undefined,
103
+ group: group_name !== null && group_name !== void 0 ? group_name : '',
104
+ rule_id,
105
+ allocated_experiment_name,
106
+ explicit_parameters: evaluation.explicit_parameters,
107
+ undelegated_secondary_exposures: evaluation.undelegated_secondary_exposures,
108
+ name,
109
+ is_device_based: evaluation.is_device_based,
110
+ });
111
+ }
112
+ _handleSaveLayer(user, layer, evaluation) {
113
+ var _a, _b;
114
+ const key = this._getStorageKey(user, 'userID');
115
+ const values = {
116
+ value: true,
117
+ rule_id: evaluation.rule_id,
118
+ json_value: evaluation.value,
119
+ secondary_exposures: evaluation.secondary_exposures,
120
+ group_name: evaluation.group,
121
+ time: (_a = layer.details.lcut) !== null && _a !== void 0 ? _a : 0,
122
+ undelegated_secondary_exposures: evaluation.undelegated_secondary_exposures,
123
+ config_delegate: evaluation.allocated_experiment_name,
124
+ explicit_parameters: (_b = evaluation.explicit_parameters) !== null && _b !== void 0 ? _b : [],
125
+ };
126
+ this.storage.save(key, layer.name, JSON.stringify(values));
127
+ }
71
128
  _handleDelete(user, name, idType) {
72
129
  const key = this._getStorageKey(user, idType);
73
130
  const current = this.storage.load(key);
@@ -87,6 +144,8 @@ class UserPersistentOverrideAdapter {
87
144
  secondary_exposures: evaluation.secondary_exposures,
88
145
  group_name: evaluation.group,
89
146
  time: (_a = experiment.details.lcut) !== null && _a !== void 0 ? _a : 0,
147
+ config_delegate: null,
148
+ undelegated_secondary_exposures: evaluation.secondary_exposures,
90
149
  };
91
150
  this.storage.save(key, experiment.name, JSON.stringify(values));
92
151
  }