@applicaster/zapp-react-native-utils 16.0.0-rc.123 → 16.0.0-rc.124

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.
@@ -1,6 +1,6 @@
1
1
  import { isNil } from "@applicaster/zapp-react-native-utils/utils";
2
2
 
3
- import { StorageLevel, StorageType } from "./consts";
3
+ import { StorageLevel } from "./consts";
4
4
  import {
5
5
  getNamespaceAndKey,
6
6
  keyIsValid,
@@ -59,18 +59,14 @@ type Setup = {
59
59
  sessionStorage?: Storage;
60
60
  localStorage?: Storage;
61
61
  secureStorage?: Storage;
62
- referenceStorage?: Storage;
63
62
  };
64
63
 
65
- export const REFERENCE_NAMESPACE = "applicaster.v2.references";
66
-
67
64
  export class ContextKeysManager {
68
65
  private static _instance: ContextKeysManager;
69
66
  private _logger: Logger;
70
67
  private _sessionStorage: Storage;
71
68
  private _localStorage: Storage;
72
69
  private _secureStorage: Storage;
73
- private _referenceStorage: Storage;
74
70
 
75
71
  public static get instance() {
76
72
  if (!this._instance) {
@@ -79,7 +75,6 @@ export class ContextKeysManager {
79
75
  sessionStorage: SessionStorage,
80
76
  localStorage: LocalStorage,
81
77
  secureStorage: SecureStorage,
82
- referenceStorage: SessionStorage,
83
78
  });
84
79
 
85
80
  this._instance = instance;
@@ -94,13 +89,11 @@ export class ContextKeysManager {
94
89
  sessionStorage = SessionStorage,
95
90
  localStorage = LocalStorage,
96
91
  secureStorage = SecureStorage,
97
- referenceStorage = SessionStorage,
98
- }: Setup) {
92
+ }: Setup = {}) {
99
93
  this._logger = logger;
100
94
  this._sessionStorage = sessionStorage;
101
95
  this._localStorage = localStorage;
102
96
  this._secureStorage = secureStorage;
103
- this._referenceStorage = referenceStorage;
104
97
  }
105
98
 
106
99
  private parseKey(key: KeyName): ParsedKeyAndNamespace {
@@ -119,41 +112,6 @@ export class ContextKeysManager {
119
112
  return { isValid: true, ...parsedKey };
120
113
  }
121
114
 
122
- // GET
123
- public async getKeyByReference(
124
- key: string,
125
- namespace: string
126
- ): Promise<ValueOrNothing> {
127
- // 1) look for storage
128
- // 2) if storage found - look value in it
129
- // 3) if storage not found return NOTHING
130
-
131
- return this._referenceStorage
132
- .getItem(buildNamespaceKey(key, namespace), REFERENCE_NAMESPACE)
133
- .then((storage: StorageType | unknown) => {
134
- switch (storage) {
135
- case StorageType.session:
136
- return this._sessionStorage.getItem(key, namespace);
137
- case StorageType.local:
138
- return this._localStorage.getItem(key, namespace);
139
- case StorageType.secure:
140
- return this._secureStorage.getItem(key, namespace);
141
- default:
142
- // unknown storage
143
- return NOTHING;
144
- }
145
- })
146
- .catch((error) => {
147
- // something went wrong
148
- this._logger.warn({
149
- message: error.message,
150
- data: { key, namespace },
151
- });
152
-
153
- return NOTHING;
154
- });
155
- }
156
-
157
115
  public async getKeys(
158
116
  keys: Array<KeyName>,
159
117
  contextObj?: { key: string; required?: boolean }[]
@@ -228,19 +186,7 @@ export class ContextKeysManager {
228
186
  return NOTHING;
229
187
  }
230
188
 
231
- // at first - try to find by reference
232
- // if not found, look in session > local > secure
233
-
234
- const resultByReference = await this.getKeyByReference(
235
- parsedKey,
236
- parsedNamespace
237
- );
238
-
239
- if (!isNil(resultByReference)) {
240
- return resultByReference;
241
- }
242
-
243
- // try to full-search
189
+ // look in session > local > secure
244
190
  try {
245
191
  const resultFromSessionStorage = await this._sessionStorage.getItem(
246
192
  parsedKey,
@@ -284,41 +230,6 @@ export class ContextKeysManager {
284
230
  // GET
285
231
 
286
232
  // SET
287
- public async setReferenceForKey(
288
- key: string,
289
- namespace: string,
290
- storageLevel: StorageLevel
291
- ): Promise<boolean> {
292
- return this._referenceStorage
293
- .setItem(
294
- buildNamespaceKey(key, namespace),
295
- storageLevel,
296
- REFERENCE_NAMESPACE
297
- )
298
- .then((result) => {
299
- if (savingResultIsSuccess(result)) {
300
- return true;
301
- }
302
-
303
- this._logger.warn({
304
- message:
305
- "While saving reference - reference storage return non expected value: true",
306
- data: { key, namespace, storageLevel },
307
- });
308
-
309
- return false;
310
- })
311
- .catch((error) => {
312
- // something went wrong
313
- this._logger.warn({
314
- message: error.message,
315
- data: { key, namespace, storageLevel },
316
- });
317
-
318
- return false;
319
- });
320
- }
321
-
322
233
  // for all keys where saving were succeed return true
323
234
  // for others return false
324
235
  public async setKeys(
@@ -352,29 +263,36 @@ export class ContextKeysManager {
352
263
  }
353
264
 
354
265
  try {
266
+ let setItemResult: boolean;
267
+
355
268
  switch (storageLevel) {
356
269
  case StorageLevel.persisted:
357
- return await Promise.all([
358
- this._localStorage.setItem(parsedKey, value, parsedNamespace),
359
- this.setReferenceForKey(parsedKey, parsedNamespace, storageLevel),
360
- ]).then(([setItemResult]) => {
361
- return savingResultIsSuccess(setItemResult);
362
- });
270
+ setItemResult = await this._localStorage.setItem(
271
+ parsedKey,
272
+ value,
273
+ parsedNamespace
274
+ );
275
+
276
+ break;
363
277
  case StorageLevel.secure:
364
- return await Promise.all([
365
- this._secureStorage.setItem(parsedKey, value, parsedNamespace),
366
- this.setReferenceForKey(parsedKey, parsedNamespace, storageLevel),
367
- ]).then(([setItemResult]) => {
368
- return savingResultIsSuccess(setItemResult);
369
- });
278
+ setItemResult = await this._secureStorage.setItem(
279
+ parsedKey,
280
+ value,
281
+ parsedNamespace
282
+ );
283
+
284
+ break;
370
285
  default:
371
- return await Promise.all([
372
- this._sessionStorage.setItem(parsedKey, value, parsedNamespace),
373
- this.setReferenceForKey(parsedKey, parsedNamespace, storageLevel),
374
- ]).then(([setItemResult]) => {
375
- return savingResultIsSuccess(setItemResult);
376
- });
286
+ setItemResult = await this._sessionStorage.setItem(
287
+ parsedKey,
288
+ value,
289
+ parsedNamespace
290
+ );
291
+
292
+ break;
377
293
  }
294
+
295
+ return savingResultIsSuccess(setItemResult);
378
296
  } catch (error) {
379
297
  // something went wrong
380
298
  this._logger.warn({
@@ -388,24 +306,6 @@ export class ContextKeysManager {
388
306
  // SET
389
307
 
390
308
  // REMOVE
391
- public async removeReferenceForKey(
392
- key: string,
393
- namespace: string
394
- ): Promise<boolean> {
395
- return this._referenceStorage
396
- .removeItem(buildNamespaceKey(key, namespace), REFERENCE_NAMESPACE)
397
- .then(() => true)
398
- .catch((error) => {
399
- // something went wrong
400
- this._logger.warn({
401
- message: error.message,
402
- data: { key, namespace },
403
- });
404
-
405
- return false;
406
- });
407
- }
408
-
409
309
  public async removeKey(key: KeyName): Promise<boolean> {
410
310
  const {
411
311
  isValid: isValidKey,
@@ -422,7 +322,6 @@ export class ContextKeysManager {
422
322
  this._sessionStorage.removeItem(parsedKey, parsedNamespace),
423
323
  this._localStorage.removeItem(parsedKey, parsedNamespace),
424
324
  this._secureStorage.removeItem(parsedKey, parsedNamespace),
425
- this.removeReferenceForKey(parsedKey, parsedNamespace),
426
325
  ])
427
326
  .then(() => true)
428
327
  .catch((error) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-utils",
3
- "version": "16.0.0-rc.123",
3
+ "version": "16.0.0-rc.124",
4
4
  "description": "Applicaster Zapp React Native utilities package",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -27,7 +27,7 @@
27
27
  },
28
28
  "homepage": "https://github.com/applicaster/quickbrick#readme",
29
29
  "dependencies": {
30
- "@applicaster/applicaster-types": "16.0.0-rc.123",
30
+ "@applicaster/applicaster-types": "16.0.0-rc.124",
31
31
  "buffer": "^5.2.1",
32
32
  "camelize": "^1.0.0",
33
33
  "dayjs": "^1.11.10",
@@ -1,56 +0,0 @@
1
- import { ContextKeysManager } from "../../..";
2
-
3
- describe("Context Keys Manager - getKey", () => {
4
- it("returns value if found by reference", async () => {
5
- // setup
6
- const key = "namespace.key";
7
- const value = "value";
8
-
9
- const mockedLogger = {
10
- warn: jest.fn(),
11
- };
12
-
13
- const mockedSessionStorage = {
14
- getItem: jest.fn(),
15
- setItem: jest.fn(),
16
- removeItem: jest.fn(),
17
- };
18
-
19
- const mockedLocalStorage = {
20
- getItem: jest.fn(),
21
- setItem: jest.fn(),
22
- removeItem: jest.fn(),
23
- };
24
-
25
- const mockedSecureStorage = {
26
- getItem: jest.fn(),
27
- setItem: jest.fn(),
28
- removeItem: jest.fn(),
29
- };
30
-
31
- const contextManager = new ContextKeysManager({
32
- logger: mockedLogger,
33
- sessionStorage: mockedSessionStorage,
34
- localStorage: mockedLocalStorage,
35
- secureStorage: mockedSecureStorage,
36
- });
37
-
38
- const getKeyByReference = jest
39
- .spyOn(contextManager, "getKeyByReference")
40
- .mockResolvedValueOnce(value);
41
-
42
- // run
43
- const result = await contextManager.getKey(key);
44
-
45
- // verify
46
- expect(result).toEqual(value);
47
-
48
- expect(mockedLogger.warn).not.toHaveBeenCalled();
49
-
50
- expect(getKeyByReference).toHaveBeenCalledWith("key", "namespace");
51
-
52
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
53
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
54
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
55
- });
56
- });
@@ -1,265 +0,0 @@
1
- import { ContextKeysManager, REFERENCE_NAMESPACE, NOTHING } from "../..";
2
- import { buildNamespaceKey } from "../../utils";
3
- import { StorageType } from "../../consts";
4
-
5
- describe("Context Keys Manager - getKeyByReference", () => {
6
- it("returns null if reference-storage failed", async () => {
7
- // setup
8
- const key = "key";
9
- const namespace = "namespace";
10
- const error = Error("oops");
11
-
12
- const mockedLogger = {
13
- warn: jest.fn(),
14
- };
15
-
16
- const mockedSessionStorage = {
17
- getItem: jest.fn(),
18
- setItem: jest.fn(),
19
- removeItem: jest.fn(),
20
- };
21
-
22
- const mockedLocalStorage = {
23
- getItem: jest.fn(),
24
- setItem: jest.fn(),
25
- removeItem: jest.fn(),
26
- };
27
-
28
- const mockedSecureStorage = {
29
- getItem: jest.fn(),
30
- setItem: jest.fn(),
31
- removeItem: jest.fn(),
32
- };
33
-
34
- const mockedReferenceStorage = {
35
- getItem: jest.fn().mockRejectedValueOnce(error),
36
- setItem: jest.fn(),
37
- removeItem: jest.fn(),
38
- };
39
-
40
- const contextManager = new ContextKeysManager({
41
- logger: mockedLogger,
42
- sessionStorage: mockedSessionStorage,
43
- localStorage: mockedLocalStorage,
44
- secureStorage: mockedSecureStorage,
45
- referenceStorage: mockedReferenceStorage,
46
- });
47
-
48
- // run
49
- const result = await contextManager.getKeyByReference(key, namespace);
50
-
51
- // verify
52
- expect(result).toEqual(NOTHING);
53
-
54
- expect(mockedLogger.warn).toHaveBeenCalledTimes(1);
55
-
56
- expect(mockedLogger.warn).toHaveBeenCalledWith({
57
- message: error.message,
58
- data: { key, namespace },
59
- });
60
-
61
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
62
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
63
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
64
-
65
- expect(mockedReferenceStorage.getItem).toHaveBeenCalledWith(
66
- buildNamespaceKey(key, namespace),
67
- REFERENCE_NAMESPACE
68
- );
69
- });
70
-
71
- it("returns null if from session-storage failed", async () => {
72
- // setup
73
- const key = "key";
74
- const namespace = "namespace";
75
- const error = Error("oops");
76
-
77
- const mockedLogger = {
78
- warn: jest.fn(),
79
- };
80
-
81
- const mockedSessionStorage = {
82
- getItem: jest.fn().mockRejectedValueOnce(error),
83
- setItem: jest.fn(),
84
- removeItem: jest.fn(),
85
- };
86
-
87
- const mockedLocalStorage = {
88
- getItem: jest.fn(),
89
- setItem: jest.fn(),
90
- removeItem: jest.fn(),
91
- };
92
-
93
- const mockedSecureStorage = {
94
- getItem: jest.fn(),
95
- setItem: jest.fn(),
96
- removeItem: jest.fn(),
97
- };
98
-
99
- const mockedReferenceStorage = {
100
- getItem: jest.fn().mockResolvedValueOnce(StorageType.session),
101
- setItem: jest.fn(),
102
- removeItem: jest.fn(),
103
- };
104
-
105
- const contextManager = new ContextKeysManager({
106
- logger: mockedLogger,
107
- sessionStorage: mockedSessionStorage,
108
- localStorage: mockedLocalStorage,
109
- secureStorage: mockedSecureStorage,
110
- referenceStorage: mockedReferenceStorage,
111
- });
112
-
113
- // run
114
- const result = await contextManager.getKeyByReference(key, namespace);
115
-
116
- // verify
117
- expect(result).toEqual(NOTHING);
118
-
119
- expect(mockedLogger.warn).toHaveBeenCalledTimes(1);
120
-
121
- expect(mockedLogger.warn).toHaveBeenCalledWith({
122
- message: error.message,
123
- data: { key, namespace },
124
- });
125
-
126
- expect(mockedSessionStorage.getItem).toHaveBeenCalledWith(key, namespace);
127
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
128
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
129
-
130
- expect(mockedReferenceStorage.getItem).toHaveBeenCalledWith(
131
- buildNamespaceKey(key, namespace),
132
- REFERENCE_NAMESPACE
133
- );
134
- });
135
-
136
- it("returns null if from local-storage failed", async () => {
137
- // setup
138
- const key = "key";
139
- const namespace = "namespace";
140
- const error = Error("oops");
141
-
142
- const mockedLogger = {
143
- warn: jest.fn(),
144
- };
145
-
146
- const mockedSessionStorage = {
147
- getItem: jest.fn(),
148
- setItem: jest.fn(),
149
- removeItem: jest.fn(),
150
- };
151
-
152
- const mockedLocalStorage = {
153
- getItem: jest.fn().mockRejectedValueOnce(error),
154
- setItem: jest.fn(),
155
- removeItem: jest.fn(),
156
- };
157
-
158
- const mockedSecureStorage = {
159
- getItem: jest.fn(),
160
- setItem: jest.fn(),
161
- removeItem: jest.fn(),
162
- };
163
-
164
- const mockedReferenceStorage = {
165
- getItem: jest.fn().mockResolvedValueOnce(StorageType.local),
166
- setItem: jest.fn(),
167
- removeItem: jest.fn(),
168
- };
169
-
170
- const contextManager = new ContextKeysManager({
171
- logger: mockedLogger,
172
- sessionStorage: mockedSessionStorage,
173
- localStorage: mockedLocalStorage,
174
- secureStorage: mockedSecureStorage,
175
- referenceStorage: mockedReferenceStorage,
176
- });
177
-
178
- // run
179
- const result = await contextManager.getKeyByReference(key, namespace);
180
-
181
- // verify
182
- expect(result).toEqual(NOTHING);
183
-
184
- expect(mockedLogger.warn).toHaveBeenCalledTimes(1);
185
-
186
- expect(mockedLogger.warn).toHaveBeenCalledWith({
187
- message: error.message,
188
- data: { key, namespace },
189
- });
190
-
191
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
192
- expect(mockedLocalStorage.getItem).toHaveBeenCalledWith(key, namespace);
193
- expect(mockedSecureStorage.getItem).not.toHaveBeenCalled();
194
-
195
- expect(mockedReferenceStorage.getItem).toHaveBeenCalledWith(
196
- buildNamespaceKey(key, namespace),
197
- REFERENCE_NAMESPACE
198
- );
199
- });
200
-
201
- it("returns null if from secure-storage failed", async () => {
202
- // setup
203
- const key = "key";
204
- const namespace = "namespace";
205
- const error = Error("oops");
206
-
207
- const mockedLogger = {
208
- warn: jest.fn(),
209
- };
210
-
211
- const mockedSessionStorage = {
212
- getItem: jest.fn(),
213
- setItem: jest.fn(),
214
- removeItem: jest.fn(),
215
- };
216
-
217
- const mockedLocalStorage = {
218
- getItem: jest.fn(),
219
- setItem: jest.fn(),
220
- removeItem: jest.fn(),
221
- };
222
-
223
- const mockedSecureStorage = {
224
- getItem: jest.fn().mockRejectedValueOnce(error),
225
- setItem: jest.fn(),
226
- removeItem: jest.fn(),
227
- };
228
-
229
- const mockedReferenceStorage = {
230
- getItem: jest.fn().mockResolvedValueOnce(StorageType.secure),
231
- setItem: jest.fn(),
232
- removeItem: jest.fn(),
233
- };
234
-
235
- const contextManager = new ContextKeysManager({
236
- logger: mockedLogger,
237
- sessionStorage: mockedSessionStorage,
238
- localStorage: mockedLocalStorage,
239
- secureStorage: mockedSecureStorage,
240
- referenceStorage: mockedReferenceStorage,
241
- });
242
-
243
- // run
244
- const result = await contextManager.getKeyByReference(key, namespace);
245
-
246
- // verify
247
- expect(result).toEqual(NOTHING);
248
-
249
- expect(mockedLogger.warn).toHaveBeenCalledTimes(1);
250
-
251
- expect(mockedLogger.warn).toHaveBeenCalledWith({
252
- message: error.message,
253
- data: { key, namespace },
254
- });
255
-
256
- expect(mockedSessionStorage.getItem).not.toHaveBeenCalled();
257
- expect(mockedLocalStorage.getItem).not.toHaveBeenCalled();
258
- expect(mockedSecureStorage.getItem).toHaveBeenCalledWith(key, namespace);
259
-
260
- expect(mockedReferenceStorage.getItem).toHaveBeenCalledWith(
261
- buildNamespaceKey(key, namespace),
262
- REFERENCE_NAMESPACE
263
- );
264
- });
265
- });