@ofidj/node 1.0.0

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.
Files changed (104) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/QUICKSTART.md +224 -0
  3. package/README.md +72 -0
  4. package/api/FidjApiAppsCreateRequest.d.ts +20 -0
  5. package/api/FidjApiAppsCreateRequest.js +3 -0
  6. package/api/FidjApiAppsCreateResponse.d.ts +8 -0
  7. package/api/FidjApiAppsCreateResponse.js +3 -0
  8. package/api/FidjApiAppsDetailsResponse.d.ts +18 -0
  9. package/api/FidjApiAppsDetailsResponse.js +3 -0
  10. package/api/FidjApiAppsMeDetailsResponse.d.ts +6 -0
  11. package/api/FidjApiAppsMeDetailsResponse.js +3 -0
  12. package/api/FidjApiAppsOAuthStatusResponse.d.ts +5 -0
  13. package/api/FidjApiAppsOAuthStatusResponse.js +3 -0
  14. package/api/FidjApiAppsPublicResponse.d.ts +7 -0
  15. package/api/FidjApiAppsPublicResponse.js +3 -0
  16. package/api/FidjApiAppsUpdateRequest.d.ts +2 -0
  17. package/api/FidjApiAppsUpdateRequest.js +3 -0
  18. package/api/FidjApiAppsUsersResponse.d.ts +7 -0
  19. package/api/FidjApiAppsUsersResponse.js +3 -0
  20. package/api/FidjApiConsentsHistoryResponse.d.ts +10 -0
  21. package/api/FidjApiConsentsHistoryResponse.js +3 -0
  22. package/api/FidjApiConsentsResponse.d.ts +9 -0
  23. package/api/FidjApiConsentsResponse.js +3 -0
  24. package/api/FidjApiConsentsUpdateRequest.d.ts +8 -0
  25. package/api/FidjApiConsentsUpdateRequest.js +3 -0
  26. package/api/FidjApiContractsCreateRequest.d.ts +5 -0
  27. package/api/FidjApiContractsCreateRequest.js +3 -0
  28. package/api/FidjApiContractsListResponse.d.ts +10 -0
  29. package/api/FidjApiContractsListResponse.js +3 -0
  30. package/api/FidjApiContractsUpdateRequest.d.ts +3 -0
  31. package/api/FidjApiContractsUpdateRequest.js +3 -0
  32. package/api/FidjApiErrorResponse.d.ts +3 -0
  33. package/api/FidjApiErrorResponse.js +3 -0
  34. package/api/FidjApiOAuthTokenRequest.d.ts +8 -0
  35. package/api/FidjApiOAuthTokenRequest.js +3 -0
  36. package/api/FidjApiOAuthTokenResponse.d.ts +6 -0
  37. package/api/FidjApiOAuthTokenResponse.js +3 -0
  38. package/api/FidjApiStatusResponse.d.ts +8 -0
  39. package/api/FidjApiStatusResponse.js +3 -0
  40. package/api/FidjApiTokensCreateRequest.d.ts +8 -0
  41. package/api/FidjApiTokensCreateRequest.js +3 -0
  42. package/api/FidjApiTokensCreateResponse.d.ts +7 -0
  43. package/api/FidjApiTokensCreateResponse.js +3 -0
  44. package/api/FidjApiUsersCreateRequest.d.ts +7 -0
  45. package/api/FidjApiUsersCreateRequest.js +3 -0
  46. package/api/FidjApiUsersCreateResponse.d.ts +13 -0
  47. package/api/FidjApiUsersCreateResponse.js +3 -0
  48. package/api/FidjApiUsersForgotRequest.d.ts +3 -0
  49. package/api/FidjApiUsersForgotRequest.js +3 -0
  50. package/api/FidjApiUsersMeDetailsResponse.d.ts +13 -0
  51. package/api/FidjApiUsersMeDetailsResponse.js +3 -0
  52. package/api/FidjApiUsersMeResponse.d.ts +6 -0
  53. package/api/FidjApiUsersMeResponse.js +3 -0
  54. package/api/FidjApiUsersMeUpdateRequest.d.ts +4 -0
  55. package/api/FidjApiUsersMeUpdateRequest.js +3 -0
  56. package/api/index.d.ts +26 -0
  57. package/api/index.js +50 -0
  58. package/bpInfo.d.ts +3 -0
  59. package/bpInfo.js +5 -0
  60. package/connection/Ajax.d.ts +65 -0
  61. package/connection/Ajax.js +230 -0
  62. package/connection/Client.d.ts +38 -0
  63. package/connection/Client.js +278 -0
  64. package/connection/ClientToken.d.ts +6 -0
  65. package/connection/ClientToken.js +12 -0
  66. package/connection/ClientTokens.d.ts +8 -0
  67. package/connection/ClientTokens.js +13 -0
  68. package/connection/ClientUser.d.ts +6 -0
  69. package/connection/ClientUser.js +12 -0
  70. package/connection/Connection.d.ts +65 -0
  71. package/connection/Connection.js +613 -0
  72. package/connection/Interfaces.d.ts +3 -0
  73. package/connection/Interfaces.js +3 -0
  74. package/connection/OwnerUser.d.ts +9 -0
  75. package/connection/OwnerUser.js +60 -0
  76. package/connection/index.d.ts +8 -0
  77. package/connection/index.js +25 -0
  78. package/index.d.ts +5 -0
  79. package/index.js +23 -0
  80. package/package.json +71 -0
  81. package/sdk/FidjError.d.ts +8 -0
  82. package/sdk/FidjError.js +18 -0
  83. package/sdk/FidjNodeService.d.ts +77 -0
  84. package/sdk/FidjNodeService.js +682 -0
  85. package/sdk/IService.d.ts +38 -0
  86. package/sdk/IService.js +3 -0
  87. package/sdk/Interfaces.d.ts +67 -0
  88. package/sdk/Interfaces.js +11 -0
  89. package/sdk/LoggerService.d.ts +9 -0
  90. package/sdk/LoggerService.js +37 -0
  91. package/sdk/index.d.ts +6 -0
  92. package/sdk/index.js +25 -0
  93. package/session/Session.d.ts +28 -0
  94. package/session/Session.js +398 -0
  95. package/session/index.d.ts +1 -0
  96. package/session/index.js +18 -0
  97. package/tools/Base64.d.ts +7 -0
  98. package/tools/Base64.js +50 -0
  99. package/tools/Storage.d.ts +32 -0
  100. package/tools/Storage.js +132 -0
  101. package/tools/Xor.d.ts +7 -0
  102. package/tools/Xor.js +36 -0
  103. package/tools/index.d.ts +3 -0
  104. package/tools/index.js +20 -0
@@ -0,0 +1,613 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Connection = void 0;
13
+ const sdk_1 = require("../sdk");
14
+ const tools_1 = require("../tools");
15
+ const Ajax_1 = require("./Ajax");
16
+ const ClientUser_1 = require("./ClientUser");
17
+ const ClientTokens_1 = require("./ClientTokens");
18
+ const ClientToken_1 = require("./ClientToken");
19
+ class Connection {
20
+ constructor(_sdk, _storage, _logger) {
21
+ this._sdk = _sdk;
22
+ this._storage = _storage;
23
+ this._logger = _logger;
24
+ this.client = null;
25
+ this.user = null;
26
+ }
27
+ isReady() {
28
+ return !!this.client && this.client.isReady();
29
+ }
30
+ init(fidjVersion, fidjId, fidjCrypto, apiEndpoint) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ this.fidjId = fidjId;
33
+ this.fidjVersion = fidjVersion;
34
+ this.fidjCrypto = fidjCrypto;
35
+ this.apiEndpoint = apiEndpoint;
36
+ this._accessToken = 'v2.accessToken.' + this.fidjId;
37
+ this._accessTokenPrevious = 'v2.accessTokenPrevious.' + this.fidjId;
38
+ this._idToken = 'v2.idToken.' + this.fidjId;
39
+ this._refreshToken = 'v2.refreshToken.' + this.fidjId;
40
+ this._states = 'v2.states.' + this.fidjId;
41
+ this._cryptoSalt = 'v2.cryptoSalt.' + this.fidjId;
42
+ this._cryptoSaltNext = 'v2.cryptoSalt.next.' + this.fidjId;
43
+ this.cryptoSalt = this._storage.get(this._cryptoSalt) || null;
44
+ this.cryptoSaltNext = this._storage.get(this._cryptoSaltNext) || null;
45
+ this.accessToken = this._storage.get(this._accessToken) || null;
46
+ this.accessTokenPrevious = this._storage.get(this._accessTokenPrevious) || null;
47
+ this.idToken = this._storage.get(this._idToken) || null;
48
+ this.refreshToken = this._storage.get(this._refreshToken) || null;
49
+ this.states = this._storage.get(this._states) || {};
50
+ this.apis = [];
51
+ });
52
+ }
53
+ destroy(force) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ this._storage.remove(this._accessToken);
56
+ this._storage.remove(this._idToken);
57
+ this._storage.remove(this._refreshToken);
58
+ this._storage.remove(this._states);
59
+ if (this.accessToken) {
60
+ this.accessTokenPrevious = this.accessToken;
61
+ this._storage.set(this._accessTokenPrevious, this.accessTokenPrevious);
62
+ }
63
+ if (force) {
64
+ this._storage.remove(this._cryptoSalt);
65
+ this._storage.remove(this._cryptoSaltNext);
66
+ this._storage.remove(this._accessTokenPrevious);
67
+ }
68
+ this.user = null;
69
+ if (this.client) {
70
+ // this.client.setClientId(null);
71
+ yield this.client.logout();
72
+ }
73
+ this.accessToken = null;
74
+ this.idToken = null;
75
+ this.refreshToken = null;
76
+ this.states = {}; // new Map<string, boolean>();
77
+ });
78
+ }
79
+ setClient(client) {
80
+ this.client = client;
81
+ // if (!this.user) {
82
+ // this.user = new ClientUser();
83
+ // }
84
+ // this._user._id = this._client.clientId;
85
+ // this.user._name = JSON.parse(this.getIdPayload({name: ''})).name;
86
+ }
87
+ setUser(user) {
88
+ this.user = user;
89
+ if (this.client && this.user.id) {
90
+ this.client.setClientId(this.user.id);
91
+ // store only clientId
92
+ // delete this.user._id;
93
+ }
94
+ }
95
+ getUser() {
96
+ return this.user;
97
+ }
98
+ getClient() {
99
+ return this.client;
100
+ }
101
+ setCryptoSalt(value) {
102
+ if (this.cryptoSalt !== value && this.cryptoSaltNext !== value) {
103
+ this.cryptoSaltNext = value;
104
+ this._storage.set(this._cryptoSaltNext, this.cryptoSaltNext);
105
+ }
106
+ if (!this.cryptoSalt) {
107
+ this.setCryptoSaltAsVerified();
108
+ }
109
+ }
110
+ setCryptoSaltAsVerified() {
111
+ if (this.cryptoSaltNext) {
112
+ this.cryptoSalt = this.cryptoSaltNext;
113
+ this._storage.set(this._cryptoSalt, this.cryptoSalt);
114
+ }
115
+ this.cryptoSaltNext = null;
116
+ this._storage.remove(this._cryptoSaltNext);
117
+ }
118
+ encrypt(data) {
119
+ if (typeof data !== 'string') {
120
+ data = JSON.stringify(data);
121
+ }
122
+ else {
123
+ const dataAsObj = { string: data };
124
+ data = JSON.stringify(dataAsObj);
125
+ }
126
+ if (this.fidjCrypto && this.cryptoSalt) {
127
+ const key = this.cryptoSalt;
128
+ return tools_1.Xor.encrypt(data, key);
129
+ }
130
+ else {
131
+ return data;
132
+ }
133
+ }
134
+ decrypt(data) {
135
+ let decrypted = null;
136
+ try {
137
+ if (this.fidjCrypto && this.cryptoSaltNext) {
138
+ const key = this.cryptoSaltNext;
139
+ decrypted = tools_1.Xor.decrypt(data, key);
140
+ decrypted = JSON.parse(decrypted);
141
+ // if (decrypted) {
142
+ // this.setCryptoSaltAsVerified();
143
+ // }
144
+ }
145
+ }
146
+ catch (err) {
147
+ decrypted = null;
148
+ }
149
+ try {
150
+ if (!decrypted && this.fidjCrypto && this.cryptoSalt) {
151
+ const key = this.cryptoSalt;
152
+ decrypted = tools_1.Xor.decrypt(data, key);
153
+ decrypted = JSON.parse(decrypted);
154
+ }
155
+ }
156
+ catch (err) {
157
+ decrypted = null;
158
+ }
159
+ try {
160
+ if (!decrypted && this.fidjCrypto && this.cryptoSalt) {
161
+ const key = this.cryptoSalt;
162
+ decrypted = tools_1.Xor.decrypt(data, key, true);
163
+ decrypted = JSON.parse(decrypted);
164
+ }
165
+ }
166
+ catch (err) {
167
+ decrypted = null;
168
+ }
169
+ try {
170
+ if (!decrypted) {
171
+ decrypted = JSON.parse(data);
172
+ }
173
+ if (decrypted && decrypted.string) {
174
+ decrypted = decrypted.string;
175
+ }
176
+ }
177
+ catch (err) {
178
+ decrypted = null;
179
+ }
180
+ return decrypted;
181
+ }
182
+ isLogin() {
183
+ let exp = true;
184
+ try {
185
+ const payload = this.refreshToken.split('.')[1];
186
+ const decoded = JSON.parse(tools_1.Base64.decode(payload));
187
+ exp = new Date().getTime() / 1000 >= decoded.exp;
188
+ }
189
+ catch (e) {
190
+ // If there's an error parsing the token, keep exp as true (not logged in)
191
+ }
192
+ return !exp;
193
+ }
194
+ isConnected() {
195
+ var _a;
196
+ return (_a = this.client) === null || _a === void 0 ? void 0 : _a.status();
197
+ }
198
+ // todo reintegrate client.login()
199
+ logout() {
200
+ return __awaiter(this, void 0, void 0, function* () {
201
+ return this.getClient().logout(this.refreshToken);
202
+ });
203
+ }
204
+ getClientId() {
205
+ if (!this.client) {
206
+ return null;
207
+ }
208
+ return this.client.clientId;
209
+ }
210
+ getIdToken() {
211
+ return __awaiter(this, void 0, void 0, function* () {
212
+ return this.idToken;
213
+ });
214
+ }
215
+ getIdPayload(def) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const idToken = yield this.getIdToken();
218
+ try {
219
+ let payload;
220
+ if (idToken) {
221
+ payload = idToken.split('.')[1];
222
+ }
223
+ if (payload) {
224
+ return tools_1.Base64.decode(payload);
225
+ }
226
+ }
227
+ catch (e) {
228
+ this._logger.log('fidj.connection.getIdPayload pb: ', def, e);
229
+ }
230
+ if (def) {
231
+ if (typeof def !== 'string') {
232
+ def = JSON.stringify(def);
233
+ }
234
+ return def;
235
+ }
236
+ return null;
237
+ });
238
+ }
239
+ getAccessPayload(def) {
240
+ return __awaiter(this, void 0, void 0, function* () {
241
+ if (def && typeof def !== 'string') {
242
+ def = JSON.stringify(def);
243
+ }
244
+ try {
245
+ const payload = this.accessToken.split('.')[1];
246
+ if (payload) {
247
+ return tools_1.Base64.decode(payload);
248
+ }
249
+ }
250
+ catch (e) {
251
+ // If there's an error parsing the token, return the default value
252
+ }
253
+ return def ? def : null;
254
+ });
255
+ }
256
+ getPreviousAccessPayload(def) {
257
+ if (def && typeof def !== 'string') {
258
+ def = JSON.stringify(def);
259
+ }
260
+ try {
261
+ const payload = this.accessTokenPrevious.split('.')[1];
262
+ if (payload) {
263
+ return tools_1.Base64.decode(payload);
264
+ }
265
+ }
266
+ catch (e) {
267
+ // If there's an error parsing the previous token, return the default value
268
+ }
269
+ return def ? def : null;
270
+ }
271
+ /**
272
+ * @throws ErrorInterface
273
+ */
274
+ refreshConnection() {
275
+ return __awaiter(this, arguments, void 0, function* (force = false) {
276
+ if (force) {
277
+ this.removingCurrentTokens();
278
+ }
279
+ // token not expired : ok
280
+ if (this.accessToken) {
281
+ const payload = this.accessToken.split('.')[1];
282
+ const decoded = tools_1.Base64.decode(payload);
283
+ const notExpired = new Date().getTime() / 1000 < JSON.parse(decoded).exp;
284
+ // console.log('new Date().getTime() < JSON.parse(decoded).exp :', (new Date().getTime() / 1000), JSON.parse(decoded).exp);
285
+ this._logger.log('fidj.connection.connection.refreshConnection : token not expired ? ', notExpired);
286
+ if (notExpired) {
287
+ return this.updatedClientTokens();
288
+ }
289
+ }
290
+ // remove expired refreshToken
291
+ if (this.refreshToken) {
292
+ const payload = this.refreshToken.split('.')[1];
293
+ const decoded = tools_1.Base64.decode(payload);
294
+ const expired = new Date().getTime() / 1000 >= JSON.parse(decoded).exp;
295
+ this._logger.log('fidj.connection.connection.refreshConnection : refreshToken not expired ? ', expired);
296
+ if (expired) {
297
+ this._storage.remove(this._refreshToken);
298
+ }
299
+ }
300
+ // remove expired accessToken & idToken & store it as Previous one
301
+ this.removingCurrentTokens();
302
+ // refresh authentication
303
+ this._logger.log('fidj.connection.connection.refreshConnection : refresh authentication.');
304
+ const client = this.getClient();
305
+ if (!client) {
306
+ throw new sdk_1.FidjError(400, 'Need an initialized client.');
307
+ }
308
+ const { createdAccessToken, createdIdToken } = yield this.client.reAuthenticate(this.refreshToken);
309
+ this.accessToken = createdAccessToken.data;
310
+ this.idToken = createdIdToken.data;
311
+ return this.updatedClientTokens();
312
+ });
313
+ }
314
+ setConnection(clientTokens) {
315
+ return __awaiter(this, void 0, void 0, function* () {
316
+ if (!clientTokens) {
317
+ return;
318
+ }
319
+ // only in private storage
320
+ if (clientTokens.accessToken) {
321
+ this.accessToken = clientTokens.accessToken.data;
322
+ this._storage.set(this._accessToken, this.accessToken);
323
+ const salt = JSON.parse(yield this.getAccessPayload({ salt: '' })).salt;
324
+ if (salt) {
325
+ this.setCryptoSalt(salt);
326
+ }
327
+ }
328
+ if (clientTokens.idToken) {
329
+ this.idToken = clientTokens.idToken.data;
330
+ this._storage.set(this._idToken, this.idToken);
331
+ }
332
+ if (clientTokens.refreshToken) {
333
+ this.refreshToken = clientTokens.refreshToken.data;
334
+ this._storage.set(this._refreshToken, this.refreshToken);
335
+ }
336
+ // store changed states
337
+ this._storage.set(this._states, this.states);
338
+ // expose roles, message
339
+ const clientUser = new ClientUser_1.ClientUser(clientTokens.username, clientTokens.username, JSON.parse(yield this.getIdPayload({ roles: [] })).roles);
340
+ this.setUser(clientUser);
341
+ });
342
+ }
343
+ setConnectionOffline(options) {
344
+ return __awaiter(this, void 0, void 0, function* () {
345
+ if (options.accessToken) {
346
+ this.accessToken = options.accessToken;
347
+ this._storage.set(this._accessToken, this.accessToken);
348
+ }
349
+ if (options.idToken) {
350
+ this.idToken = options.idToken;
351
+ this._storage.set(this._idToken, this.idToken);
352
+ }
353
+ if (options.refreshToken) {
354
+ this.refreshToken = options.refreshToken;
355
+ this._storage.set(this._refreshToken, this.refreshToken);
356
+ }
357
+ this.setUser(new ClientUser_1.ClientUser('demo', 'demo', JSON.parse(yield this.getIdPayload({ roles: [] })).roles));
358
+ });
359
+ }
360
+ getApiEndpoints(options) {
361
+ return __awaiter(this, void 0, void 0, function* () {
362
+ if (this.apiEndpoint) {
363
+ return [{ key: 'fidj.override', url: this.apiEndpoint, blocked: false }];
364
+ }
365
+ let ea = [
366
+ { key: 'fidj.default', url: 'https://api.fidj.ovh/v3', blocked: false },
367
+ ];
368
+ let filteredEa = [];
369
+ if (!this._sdk.prod) {
370
+ ea = [
371
+ { key: 'fidj.default', url: 'http://localhost:3201/v3', blocked: false },
372
+ { key: 'fidj.default', url: 'https://api.sandbox.fidj.ovh/v3', blocked: false },
373
+ ];
374
+ }
375
+ if (this.accessToken) {
376
+ const val = yield this.getAccessPayload({ apis: [] });
377
+ const apiEndpoints = JSON.parse(val).apis;
378
+ if (apiEndpoints && apiEndpoints.length) {
379
+ ea = [];
380
+ apiEndpoints.forEach((endpoint) => {
381
+ if (endpoint.url) {
382
+ ea.push(endpoint);
383
+ }
384
+ });
385
+ }
386
+ }
387
+ if (this.accessTokenPrevious) {
388
+ const apiEndpoints = JSON.parse(this.getPreviousAccessPayload({ apis: [] })).apis;
389
+ if (apiEndpoints && apiEndpoints.length) {
390
+ apiEndpoints.forEach((endpoint) => {
391
+ if (endpoint.url && ea.filter((r) => r.url === endpoint.url).length === 0) {
392
+ ea.push(endpoint);
393
+ }
394
+ });
395
+ }
396
+ }
397
+ this._logger.log('fidj.sdk.connection.getApiEndpoints : ', ea, this.states);
398
+ let couldCheckStates = true;
399
+ if (this.states && Object.keys(this.states).length) {
400
+ for (let i = 0; i < ea.length && couldCheckStates; i++) {
401
+ if (!this.states[ea[i].url]) {
402
+ couldCheckStates = false;
403
+ }
404
+ }
405
+ }
406
+ else {
407
+ couldCheckStates = false;
408
+ }
409
+ if (options === null || options === void 0 ? void 0 : options.filter) {
410
+ if (couldCheckStates && options.filter === 'theBestOne') {
411
+ for (let i = 0; i < ea.length && filteredEa.length === 0; i++) {
412
+ const endpoint = ea[i];
413
+ if (this.states[endpoint.url] && this.states[endpoint.url].state) {
414
+ filteredEa.push(endpoint);
415
+ }
416
+ }
417
+ }
418
+ else if (couldCheckStates && options.filter === 'theBestOldOne') {
419
+ let bestOldOne;
420
+ for (let i = 0; i < ea.length; i++) {
421
+ const endpoint = ea[i];
422
+ if (this.states[endpoint.url] &&
423
+ this.states[endpoint.url].lastTimeWasOk &&
424
+ (!bestOldOne ||
425
+ this.states[endpoint.url].lastTimeWasOk >
426
+ this.states[bestOldOne.url].lastTimeWasOk)) {
427
+ bestOldOne = endpoint;
428
+ }
429
+ }
430
+ if (bestOldOne) {
431
+ filteredEa.push(bestOldOne);
432
+ }
433
+ }
434
+ else if (ea.length) {
435
+ filteredEa.push(ea[0]);
436
+ }
437
+ }
438
+ else {
439
+ filteredEa = ea;
440
+ }
441
+ return filteredEa;
442
+ });
443
+ }
444
+ getDBs(options) {
445
+ return __awaiter(this, void 0, void 0, function* () {
446
+ if (!this.accessToken) {
447
+ return [];
448
+ }
449
+ // todo test random DB connection
450
+ const random = Math.random() % 2;
451
+ let dbs = JSON.parse(yield this.getAccessPayload({ dbs: [] })).dbs || [];
452
+ // need to synchronize db
453
+ if (random === 0) {
454
+ dbs = dbs.sort();
455
+ }
456
+ else if (random === 1) {
457
+ dbs = dbs.reverse();
458
+ }
459
+ let filteredDBs = [];
460
+ let couldCheckStates = true;
461
+ if (this.states && Object.keys(this.states).length) {
462
+ for (let i = 0; i < dbs.length && couldCheckStates; i++) {
463
+ if (!this.states[dbs[i].url]) {
464
+ couldCheckStates = false;
465
+ }
466
+ }
467
+ }
468
+ else {
469
+ couldCheckStates = false;
470
+ }
471
+ if (couldCheckStates && options && options.filter === 'theBestOne') {
472
+ for (let i = 0; i < dbs.length && filteredDBs.length === 0; i++) {
473
+ const endpoint = dbs[i];
474
+ if (this.states[endpoint.url] && this.states[endpoint.url].state) {
475
+ filteredDBs.push(endpoint);
476
+ }
477
+ }
478
+ }
479
+ else if (couldCheckStates && options && options.filter === 'theBestOnes') {
480
+ for (let i = 0; i < dbs.length; i++) {
481
+ const endpoint = dbs[i];
482
+ if (this.states[endpoint.url] && this.states[endpoint.url].state) {
483
+ filteredDBs.push(endpoint);
484
+ }
485
+ }
486
+ }
487
+ else if (options && options.filter === 'theBestOne' && dbs.length) {
488
+ filteredDBs.push(dbs[0]);
489
+ }
490
+ else {
491
+ filteredDBs = dbs;
492
+ }
493
+ return filteredDBs;
494
+ });
495
+ }
496
+ verifyConnectionStates() {
497
+ return __awaiter(this, void 0, void 0, function* () {
498
+ const currentTime = new Date().getTime();
499
+ // todo need verification ? not yet (cache)
500
+ // if (Object.keys(this.states).length > 0) {
501
+ // const time = this.states[Object.keys(this.states)[0]].time;
502
+ // if (currentTime < time) {
503
+ // return Promise.resolve();
504
+ // }
505
+ // }
506
+ // verify via GET status on Endpoints & DBs
507
+ this.states = {};
508
+ this.apis = yield this.getApiEndpoints();
509
+ for (const api of this.apis) {
510
+ let endpointUrl = api.url;
511
+ if (!endpointUrl) {
512
+ endpointUrl = api.toString();
513
+ }
514
+ const verified = yield this.verifyApiState(currentTime, endpointUrl);
515
+ }
516
+ const dbs = yield this.getDBs();
517
+ for (const db of dbs) {
518
+ let dbEndpoint = db.url;
519
+ if (!dbEndpoint) {
520
+ dbEndpoint = db.toString();
521
+ }
522
+ const verified = yield this.verifyDbState(currentTime, dbEndpoint);
523
+ }
524
+ });
525
+ }
526
+ updatedClientTokens() {
527
+ return __awaiter(this, void 0, void 0, function* () {
528
+ const accessToken = new ClientToken_1.ClientToken(this.getClientId(), 'accessToken', this.accessToken);
529
+ const idToken = new ClientToken_1.ClientToken(this.getClientId(), 'idToken', this.idToken);
530
+ const refreshToken = new ClientToken_1.ClientToken(this.getClientId(), 'refreshToken', this.refreshToken);
531
+ const clientTokens = new ClientTokens_1.ClientTokens(this.getClientId(), accessToken, idToken, refreshToken);
532
+ yield this.setConnection(clientTokens);
533
+ return clientTokens;
534
+ });
535
+ }
536
+ removingCurrentTokens() {
537
+ if (this.accessToken) {
538
+ this.accessTokenPrevious = this.accessToken;
539
+ this._storage.set(this._accessTokenPrevious, this.accessTokenPrevious);
540
+ }
541
+ this._storage.remove(this._accessToken);
542
+ this._storage.remove(this._idToken);
543
+ this.accessToken = null;
544
+ this.idToken = null;
545
+ }
546
+ verifyApiState(currentTime, endpointUrl) {
547
+ return __awaiter(this, void 0, void 0, function* () {
548
+ try {
549
+ this._logger.log('fidj.sdk.connection.verifyApiState : ', currentTime, endpointUrl);
550
+ const data = (yield new Ajax_1.Ajax().get({
551
+ url: endpointUrl + '/status?isOk=' + this._sdk.version,
552
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
553
+ timeout: sdk_1.FidjNodeService.DEFAULT_TIMEOUT_MS,
554
+ })).data;
555
+ let state = false;
556
+ if (data && data.isOk) {
557
+ state = true;
558
+ }
559
+ this.states[endpointUrl] = {
560
+ state: state,
561
+ time: currentTime,
562
+ lastTimeWasOk: currentTime,
563
+ };
564
+ this._logger.log('fidj.sdk.connection.verifyApiState > states : ', this.states);
565
+ }
566
+ catch (err) {
567
+ this._logger.log('fidj.sdk.connection.verifyApiState > catch pb - states : ', endpointUrl);
568
+ let lastTimeWasOk = 0;
569
+ if (this.states[endpointUrl]) {
570
+ lastTimeWasOk = this.states[endpointUrl].lastTimeWasOk;
571
+ }
572
+ this.states[endpointUrl] = {
573
+ state: false,
574
+ time: currentTime,
575
+ lastTimeWasOk: lastTimeWasOk,
576
+ };
577
+ }
578
+ // store states
579
+ this._storage.set(this._states, this.states);
580
+ });
581
+ }
582
+ verifyDbState(currentTime, dbEndpoint) {
583
+ return __awaiter(this, void 0, void 0, function* () {
584
+ try {
585
+ // console.log('verifyDbState: ', dbEndpoint);
586
+ yield new Ajax_1.Ajax().get({
587
+ url: dbEndpoint,
588
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
589
+ timeout: sdk_1.FidjNodeService.DEFAULT_TIMEOUT_MS,
590
+ });
591
+ this.states[dbEndpoint] = { state: true, time: currentTime, lastTimeWasOk: currentTime };
592
+ // resolve();
593
+ // console.log('verifyDbState: state', dbEndpoint, true);
594
+ }
595
+ catch (err) {
596
+ let lastTimeWasOk = 0;
597
+ if (this.states[dbEndpoint]) {
598
+ lastTimeWasOk = this.states[dbEndpoint].lastTimeWasOk;
599
+ }
600
+ this.states[dbEndpoint] = {
601
+ state: false,
602
+ time: currentTime,
603
+ lastTimeWasOk: lastTimeWasOk,
604
+ };
605
+ // resolve();
606
+ }
607
+ // store states
608
+ this._storage.set(this._states, this.states);
609
+ });
610
+ }
611
+ }
612
+ exports.Connection = Connection;
613
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25uZWN0aW9uL0Nvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsZ0NBUWdCO0FBQ2hCLG9DQUFtRDtBQUNuRCxpQ0FBNEI7QUFFNUIsNkNBQXdDO0FBQ3hDLGlEQUE0QztBQUM1QywrQ0FBMEM7QUFFMUMsTUFBYSxVQUFVO0lBdUJuQixZQUNZLElBQWtCLEVBQ2xCLFFBQXNCLEVBQ3RCLE9BQXdCO1FBRnhCLFNBQUksR0FBSixJQUFJLENBQWM7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUVoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsT0FBTztRQUNILE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUssSUFBSSxDQUFDLFdBQW1CLEVBQUUsTUFBYyxFQUFFLFVBQW1CLEVBQUUsV0FBb0I7O1lBQ3JGLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1lBRS9CLElBQUksQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNwRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcseUJBQXlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNwRSxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFD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
@@ -0,0 +1,3 @@
1
+ export interface ConnectionFindOptionsInterface {
2
+ filter: string;
3
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25uZWN0aW9uL0ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9