@autofleet/settings 1.0.5 → 1.0.6

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/dist/index.js CHANGED
@@ -29,7 +29,7 @@ const waitingToNetwork = 'waitingToNetwork';
29
29
  const findUrl = (serviceUrl) => serviceUrl
30
30
  || (process.env.SETTING_MS_SERVICE_HOST && process.env.SETTING_MS_SERVICE_HOST.length > 0 ? `http://${process.env.SETTING_MS_SERVICE_HOST}/` : undefined)
31
31
  || (process.env.NODE_ENV !== 'test' ? 'http://setting-ms.autofleet.io/' : 'http://localhost:9999/');
32
- class ConnotGetNetworkValueError extends Error {
32
+ class CannotGetNetworkValueError extends Error {
33
33
  }
34
34
  class SettingsManager {
35
35
  constructor({ serviceUrl, ttl = fiveMinutes } = {}) {
@@ -87,7 +87,7 @@ class SettingsManager {
87
87
  catch (error) {
88
88
  logger.error('Cant get setting from network');
89
89
  if (rejectOnFail) {
90
- throw new ConnotGetNetworkValueError();
90
+ throw new CannotGetNetworkValueError();
91
91
  }
92
92
  }
93
93
  this.networkEvents.emit(cacheKey, networkValue);
@@ -105,55 +105,49 @@ class SettingsManager {
105
105
  }
106
106
  getMultiple(settingsToGet, labels, { timeout = 5000, rejectOnFail = false } = {}) {
107
107
  return __awaiter(this, void 0, void 0, function* () {
108
- settingsToGet.map((obj) => {
109
- if (typeof obj.defaultValue === 'undefined') {
110
- throw new Error(`Missing default value for key ${obj.key}`);
111
- }
112
- });
108
+ const settingsToReturn = new Map();
109
+ const settingsToFetch = [];
113
110
  if (process.env.NODE_ENV === 'test') {
114
111
  return settingsToGet.map((obj) => obj.defaultValue);
115
112
  }
116
- settingsToGet.map((obj) => __awaiter(this, void 0, void 0, function* () {
113
+ settingsToGet.map((obj) => {
117
114
  const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
118
115
  const cacheValue = this.settingsCache.get(cacheKey);
119
- if (cacheValue !== undefined) {
120
- if (waitingToNetwork === cacheValue) {
121
- yield nextTick();
122
- return new Promise((resolve) => {
123
- this.networkEvents.once(cacheKey, (networkValue) => {
124
- resolve(SettingsManager.readNetworkValue(networkValue, obj.defaultValue));
125
- });
126
- });
127
- }
116
+ if (cacheValue) {
117
+ settingsToReturn.set(obj.key, cacheValue);
118
+ }
119
+ else {
120
+ settingsToFetch.push(obj.key);
128
121
  }
129
- }));
130
- settingsToGet.map((obj) => {
131
- const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
132
- this.settingsCache.set(cacheKey, waitingToNetwork, this.ttl);
133
122
  });
134
- let values;
135
- try {
136
- const { data } = yield this.network.get('/api/v1/settings', {
137
- params: {
138
- keys: settingsToGet.map((obj) => obj.key),
139
- labels,
140
- },
141
- timeout,
142
- });
143
- values = data.values;
144
- }
145
- catch (err) {
146
- logger.error('Cant get setting from network', { err });
147
- if (rejectOnFail) {
148
- throw new ConnotGetNetworkValueError();
123
+ if (settingsToFetch.length > 0) {
124
+ let values;
125
+ try {
126
+ const { data } = yield this.network.get('/api/v1/settings', {
127
+ params: {
128
+ keys: settingsToFetch,
129
+ labels,
130
+ skipEntityQueryAddition: true,
131
+ },
132
+ timeout,
133
+ });
134
+ values = data;
135
+ settingsToFetch.map((key, index) => {
136
+ settingsToReturn.set(key, values[index]);
137
+ });
138
+ }
139
+ catch (err) {
140
+ logger.error('Cant get setting from network', { err });
141
+ if (rejectOnFail) {
142
+ throw new CannotGetNetworkValueError();
143
+ }
149
144
  }
150
145
  }
151
- return settingsToGet.map((setting, index) => {
146
+ return settingsToGet.map((setting) => {
152
147
  const cacheKey = `${setting.key}_${JSON.stringify(labels)}`;
153
- this.networkEvents.emit(cacheKey, values[index]);
154
148
  let returnValue;
155
149
  try {
156
- returnValue = SettingsManager.readNetworkValue(values[index], setting.defaultValue);
150
+ returnValue = SettingsManager.readNetworkValue(settingsToReturn.get(setting.key), setting.defaultValue);
157
151
  }
158
152
  catch (err) {
159
153
  this.settingsCache.del(cacheKey);
@@ -28,8 +28,9 @@ const mockMultipleSettings = (keys, values, response = 200) => {
28
28
  .get('/api/v1/settings')
29
29
  .query({
30
30
  keys,
31
+ skipEntityQueryAddition: true,
31
32
  });
32
- return n.reply(response, { values });
33
+ return n.reply(response, values);
33
34
  };
34
35
  describe('Settings', () => {
35
36
  describe('get', () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/settings",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/index.test.ts CHANGED
@@ -20,9 +20,10 @@ const mockMultipleSettings = (keys: string[], values: string[], response = 200)
20
20
  .get('/api/v1/settings')
21
21
  .query({
22
22
  keys,
23
+ skipEntityQueryAddition: true,
23
24
  });
24
25
 
25
- return n.reply(response, { values });
26
+ return n.reply(response, values);
26
27
  };
27
28
 
28
29
  describe('Settings', () => {
package/src/index.ts CHANGED
@@ -40,7 +40,7 @@ interface GetSettingOption {
40
40
  rejectOnFail?: boolean;
41
41
  }
42
42
 
43
- class ConnotGetNetworkValueError extends Error {}
43
+ class CannotGetNetworkValueError extends Error {}
44
44
 
45
45
  class SettingsManager {
46
46
  ttl: number;
@@ -121,7 +121,7 @@ class SettingsManager {
121
121
  } catch (error) {
122
122
  logger.error('Cant get setting from network');
123
123
  if (rejectOnFail) {
124
- throw new ConnotGetNetworkValueError();
124
+ throw new CannotGetNetworkValueError();
125
125
  }
126
126
  }
127
127
 
@@ -145,59 +145,51 @@ class SettingsManager {
145
145
  labels: LabelsArray,
146
146
  { timeout = 5000, rejectOnFail = false } : GetSettingOption = {},
147
147
  ): Promise<any> {
148
- settingsToGet.map((obj) => {
149
- if (typeof obj.defaultValue === 'undefined') {
150
- throw new Error(`Missing default value for key ${obj.key}`);
151
- }
152
- });
153
-
148
+ const settingsToReturn = new Map();
149
+ const settingsToFetch: any[] = [];
154
150
  if (process.env.NODE_ENV === 'test') {
155
151
  return settingsToGet.map((obj) => obj.defaultValue);
156
152
  }
157
153
 
158
- settingsToGet.map(async (obj) => {
154
+ settingsToGet.map((obj) => {
159
155
  const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
160
156
  const cacheValue = this.settingsCache.get(cacheKey);
161
- if (cacheValue !== undefined) {
162
- if (waitingToNetwork === cacheValue) {
163
- await nextTick();
164
- return new Promise((resolve) => {
165
- this.networkEvents.once(cacheKey, (networkValue) => {
166
- resolve(SettingsManager.readNetworkValue(networkValue, obj.defaultValue));
167
- });
168
- });
169
- }
157
+ if (cacheValue) {
158
+ settingsToReturn.set(obj.key, cacheValue);
159
+ } else {
160
+ settingsToFetch.push(obj.key);
170
161
  }
171
162
  });
172
163
 
173
- settingsToGet.map((obj) => {
174
- const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
175
- this.settingsCache.set(cacheKey, waitingToNetwork, this.ttl);
176
- });
164
+ if (settingsToFetch.length > 0) {
165
+ let values: any[];
166
+ try {
167
+ const { data } = await this.network.get('/api/v1/settings', {
168
+ params: {
169
+ keys: settingsToFetch,
170
+ labels,
171
+ skipEntityQueryAddition: true,
172
+ },
173
+ timeout,
174
+ });
175
+ values = data;
177
176
 
178
- let values: any[];
179
- try {
180
- const { data } = await this.network.get('/api/v1/settings', {
181
- params: {
182
- keys: settingsToGet.map((obj) => obj.key),
183
- labels,
184
- },
185
- timeout,
186
- });
187
- values = data.values;
188
- } catch (err) {
189
- logger.error('Cant get setting from network', { err });
190
- if (rejectOnFail) {
191
- throw new ConnotGetNetworkValueError();
177
+ settingsToFetch.map((key, index) => {
178
+ settingsToReturn.set(key, values[index]);
179
+ });
180
+ } catch (err) {
181
+ logger.error('Cant get setting from network', { err });
182
+ if (rejectOnFail) {
183
+ throw new CannotGetNetworkValueError();
184
+ }
192
185
  }
193
186
  }
194
187
 
195
- return settingsToGet.map((setting: any, index: number) => {
188
+ return settingsToGet.map((setting: any) => {
196
189
  const cacheKey = `${setting.key}_${JSON.stringify(labels)}`;
197
- this.networkEvents.emit(cacheKey, values[index]);
198
190
  let returnValue;
199
191
  try {
200
- returnValue = SettingsManager.readNetworkValue(values[index], setting.defaultValue);
192
+ returnValue = SettingsManager.readNetworkValue(settingsToReturn.get(setting.key), setting.defaultValue);
201
193
  } catch (err) {
202
194
  this.settingsCache.del(cacheKey);
203
195
  throw err;