@autofleet/settings 1.0.4 → 1.0.5-beta-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/dist/index.d.ts CHANGED
@@ -26,6 +26,10 @@ declare class SettingsManager {
26
26
  static readNetworkValue(networkValue: SettingValue, defaultValue: SettingValue): string | number | boolean;
27
27
  constructor({ serviceUrl, ttl }?: SettingsClassOptions);
28
28
  get(key: SettingValue, defaultValue?: SettingValue, labels?: LabelsArray, { timeout, rejectOnFail }?: GetSettingOption): Promise<unknown>;
29
+ getMultiple(settingsToGet: {
30
+ key: SettingValue;
31
+ defaultValue: SettingValue;
32
+ }[], labels: LabelsArray, { timeout, rejectOnFail }?: GetSettingOption): Promise<any>;
29
33
  setLocal(key: string, labels: LabelsArray, value: SettingValue): void;
30
34
  flush(): void;
31
35
  }
package/dist/index.js CHANGED
@@ -12,6 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ /* eslint-disable consistent-return */
16
+ /* eslint-disable array-callback-return */
15
17
  // eslint-disable-next-line max-classes-per-file
16
18
  const dotenv_1 = __importDefault(require("dotenv"));
17
19
  const network_1 = __importDefault(require("@autofleet/network"));
@@ -101,6 +103,69 @@ class SettingsManager {
101
103
  return returnValue;
102
104
  });
103
105
  }
106
+ getMultiple(settingsToGet, labels, { timeout = 5000, rejectOnFail = false } = {}) {
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
+ });
113
+ if (process.env.NODE_ENV === 'test') {
114
+ return settingsToGet.map((obj) => obj.defaultValue);
115
+ }
116
+ settingsToGet.map((obj) => __awaiter(this, void 0, void 0, function* () {
117
+ const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
118
+ 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
+ }
128
+ }
129
+ }));
130
+ settingsToGet.map((obj) => {
131
+ const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
132
+ this.settingsCache.set(cacheKey, waitingToNetwork, this.ttl);
133
+ });
134
+ let settings;
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
+ settings = data;
144
+ }
145
+ catch (err) {
146
+ logger.error('Cant get setting from network');
147
+ if (rejectOnFail) {
148
+ throw new ConnotGetNetworkValueError();
149
+ }
150
+ }
151
+ // eslint-disable-next-line array-callback-return
152
+ settings.map((setting, index) => {
153
+ const cacheKey = `${settingsToGet[index].key}_${JSON.stringify(labels)}`;
154
+ this.networkEvents.emit(cacheKey, setting);
155
+ let returnValue;
156
+ try {
157
+ returnValue = SettingsManager.readNetworkValue(setting, settingsToGet[index].defaultValue);
158
+ }
159
+ catch (err) {
160
+ this.settingsCache.del(cacheKey);
161
+ throw err;
162
+ }
163
+ this.settingsCache.set(cacheKey, returnValue, this.ttl);
164
+ return returnValue;
165
+ });
166
+ return settings;
167
+ });
168
+ }
104
169
  setLocal(key, labels, value) {
105
170
  const cacheKey = `${key}_${JSON.stringify(labels)}`;
106
171
  this.settingsCache.set(cacheKey, value, this.ttl);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/settings",
3
- "version": "1.0.4",
3
+ "version": "1.0.5-beta-1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/index.ts CHANGED
@@ -1,3 +1,5 @@
1
+ /* eslint-disable consistent-return */
2
+ /* eslint-disable array-callback-return */
1
3
  // eslint-disable-next-line max-classes-per-file
2
4
  import dotenv from 'dotenv';
3
5
  import Network from '@autofleet/network';
@@ -135,6 +137,79 @@ class SettingsManager {
135
137
  return returnValue;
136
138
  }
137
139
 
140
+ async getMultiple(
141
+ settingsToGet: {
142
+ key: SettingValue,
143
+ defaultValue: SettingValue,
144
+ }[],
145
+ labels: LabelsArray,
146
+ { timeout = 5000, rejectOnFail = false } : GetSettingOption = {},
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
+
154
+ if (process.env.NODE_ENV === 'test') {
155
+ return settingsToGet.map((obj) => obj.defaultValue);
156
+ }
157
+
158
+ settingsToGet.map(async (obj) => {
159
+ const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
160
+ 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
+ }
170
+ }
171
+ });
172
+
173
+ settingsToGet.map((obj) => {
174
+ const cacheKey = `${obj.key}_${JSON.stringify(labels)}`;
175
+ this.settingsCache.set(cacheKey, waitingToNetwork, this.ttl);
176
+ });
177
+
178
+ let settings;
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
+ settings = data;
188
+ } catch (err) {
189
+ logger.error('Cant get setting from network');
190
+ if (rejectOnFail) {
191
+ throw new ConnotGetNetworkValueError();
192
+ }
193
+ }
194
+
195
+ // eslint-disable-next-line array-callback-return
196
+ settings.map((setting: any, index: number) => {
197
+ const cacheKey = `${settingsToGet[index].key}_${JSON.stringify(labels)}`;
198
+ this.networkEvents.emit(cacheKey, setting);
199
+ let returnValue;
200
+ try {
201
+ returnValue = SettingsManager.readNetworkValue(setting, settingsToGet[index].defaultValue);
202
+ } catch (err) {
203
+ this.settingsCache.del(cacheKey);
204
+ throw err;
205
+ }
206
+ this.settingsCache.set(cacheKey, returnValue, this.ttl);
207
+ return returnValue;
208
+ });
209
+
210
+ return settings;
211
+ }
212
+
138
213
  setLocal(key: string, labels: LabelsArray, value: SettingValue) {
139
214
  const cacheKey = `${key}_${JSON.stringify(labels)}`;
140
215
  this.settingsCache.set(cacheKey, value, this.ttl);