@retter/sdk 0.1.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.
package/dist/index.js ADDED
@@ -0,0 +1,1123 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __rest = (this && this.__rest) || function (s, e) {
50
+ var t = {};
51
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
52
+ t[p] = s[p];
53
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
54
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
55
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
56
+ t[p[i]] = s[p[i]];
57
+ }
58
+ return t;
59
+ };
60
+ var __importDefault = (this && this.__importDefault) || function (mod) {
61
+ return (mod && mod.__esModule) ? mod : { "default": mod };
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.RBSAuthStatus = exports.RbsRegion = exports.parseClassValidatorErrors = exports.RESPONSE_TYPE = exports.createResponse = void 0;
65
+ var jwt_decode_1 = __importDefault(require("jwt-decode"));
66
+ var loglevel_1 = __importDefault(require("loglevel"));
67
+ var firestore_1 = require("firebase/firestore");
68
+ var app_1 = require("firebase/app");
69
+ var firestore_2 = require("firebase/firestore");
70
+ var rxjs_1 = require("rxjs");
71
+ var async_storage_1 = __importDefault(require("@react-native-async-storage/async-storage"));
72
+ var auth_1 = require("firebase/auth");
73
+ var operators_1 = require("rxjs/operators");
74
+ var base64_1 = __importDefault(require("./base64"));
75
+ var axiosSetup_1 = __importDefault(require("./axiosSetup"));
76
+ var helpers_1 = require("./helpers");
77
+ Object.defineProperty(exports, "createResponse", { enumerable: true, get: function () { return helpers_1.createResponse; } });
78
+ Object.defineProperty(exports, "RESPONSE_TYPE", { enumerable: true, get: function () { return helpers_1.RESPONSE_TYPE; } });
79
+ Object.defineProperty(exports, "parseClassValidatorErrors", { enumerable: true, get: function () { return helpers_1.parseClassValidatorErrors; } });
80
+ var LogLevel;
81
+ (function (LogLevel) {
82
+ LogLevel[LogLevel["VERBOSE"] = 1] = "VERBOSE";
83
+ LogLevel[LogLevel["DEBUG"] = 2] = "DEBUG";
84
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
85
+ })(LogLevel || (LogLevel = {}));
86
+ var RbsRegion;
87
+ (function (RbsRegion) {
88
+ RbsRegion[RbsRegion["euWest1"] = 0] = "euWest1";
89
+ RbsRegion[RbsRegion["euWest1Beta"] = 1] = "euWest1Beta";
90
+ })(RbsRegion = exports.RbsRegion || (exports.RbsRegion = {}));
91
+ var RbsRegions = [
92
+ {
93
+ regionId: RbsRegion.euWest1,
94
+ getUrl: 'https://core.rtbs.io',
95
+ url: 'https://core-internal.rtbs.io',
96
+ apiUrl: 'api.rtbs.io',
97
+ },
98
+ {
99
+ regionId: RbsRegion.euWest1Beta,
100
+ getUrl: 'https://core-test.rtbs.io',
101
+ url: 'https://core-internal-beta.rtbs.io',
102
+ apiUrl: 'test-api.rtbs.io',
103
+ },
104
+ ];
105
+ var RBSAuthStatus;
106
+ (function (RBSAuthStatus) {
107
+ RBSAuthStatus["SIGNED_IN"] = "SIGNED_IN";
108
+ RBSAuthStatus["SIGNED_IN_ANONYM"] = "SIGNED_IN_ANONYM";
109
+ RBSAuthStatus["SIGNED_OUT"] = "SIGNED_OUT";
110
+ RBSAuthStatus["AUTH_FAILED"] = "AUTH_FAILED";
111
+ })(RBSAuthStatus = exports.RBSAuthStatus || (exports.RBSAuthStatus = {}));
112
+ var RBS_TOKENS_KEY = 'RBS_TOKENS_KEY';
113
+ var RBS = /** @class */ (function () {
114
+ function RBS() {
115
+ var _this = this;
116
+ this.firebaseApp = null;
117
+ this.firestore = null;
118
+ this.firebaseAuth = null;
119
+ this.cloudObjects = [];
120
+ this.commandQueue = new rxjs_1.Subject();
121
+ this.customAuthQueue = new rxjs_1.Subject();
122
+ this.clientConfig = null;
123
+ this.axiosInstance = null;
124
+ this.initialized = false;
125
+ this.authStatusSubject = new rxjs_1.ReplaySubject(1);
126
+ this.getServiceEndpoint = function (actionWrapper) {
127
+ var endpoint = actionWrapper.tokenData.isServiceToken ? '/service/action' : '/user/action';
128
+ var action = actionWrapper.action.action;
129
+ var actionType = action.split('.')[2];
130
+ endpoint = endpoint + "/" + _this.clientConfig.projectId + "/" + action;
131
+ return endpoint;
132
+ };
133
+ this.getRegion = function () {
134
+ var region = undefined;
135
+ if (_this.clientConfig.regionConfiguration) {
136
+ region = _this.clientConfig.regionConfiguration;
137
+ }
138
+ else {
139
+ region = RbsRegions.find(function (r) { return r.regionId === _this.clientConfig.region; });
140
+ if (!region) {
141
+ region = RbsRegions.find(function (r) { return r.regionId === RbsRegion.euWest1; });
142
+ }
143
+ }
144
+ if (!region)
145
+ throw new Error('Invalid rbs region');
146
+ return region;
147
+ };
148
+ this.getApiUrl = function () {
149
+ var region = _this.getRegion();
150
+ return "https://root." + region.apiUrl;
151
+ };
152
+ this.getBaseUrl = function (action) {
153
+ var region = _this.getRegion();
154
+ if (action.includes('.get.')) {
155
+ return region.getUrl;
156
+ }
157
+ else {
158
+ return region.url;
159
+ }
160
+ };
161
+ this.getAuthChangedEvent = function (tokenData) {
162
+ if (!tokenData) {
163
+ return {
164
+ authStatus: RBSAuthStatus.SIGNED_OUT,
165
+ };
166
+ }
167
+ else {
168
+ var data = (0, jwt_decode_1.default)(tokenData.accessToken);
169
+ if (data.anonymous) {
170
+ return {
171
+ authStatus: RBSAuthStatus.SIGNED_IN_ANONYM,
172
+ uid: data.userId,
173
+ identity: data.identity,
174
+ };
175
+ }
176
+ else {
177
+ return {
178
+ authStatus: RBSAuthStatus.SIGNED_IN,
179
+ uid: data.userId,
180
+ identity: data.identity,
181
+ };
182
+ }
183
+ }
184
+ };
185
+ this.fireAuthStatus = function (tokenData) {
186
+ var event = _this.getAuthChangedEvent(tokenData);
187
+ loglevel_1.default.info('RBSSDK LOG: fireAuthStatus event:', event);
188
+ _this.authStatusSubject.next(event);
189
+ };
190
+ this._getStoredTokenData = function () { return __awaiter(_this, void 0, void 0, function () {
191
+ var storedTokenData, item, item;
192
+ return __generator(this, function (_a) {
193
+ switch (_a.label) {
194
+ case 0:
195
+ if (!(typeof document != 'undefined')) return [3 /*break*/, 1];
196
+ item = localStorage.getItem(this.getTokenDataKey());
197
+ if (item) {
198
+ storedTokenData = JSON.parse(item);
199
+ }
200
+ return [3 /*break*/, 4];
201
+ case 1:
202
+ if (!(typeof navigator != 'undefined' && navigator.product == 'ReactNative')) return [3 /*break*/, 3];
203
+ return [4 /*yield*/, async_storage_1.default.getItem(this.getTokenDataKey())];
204
+ case 2:
205
+ item = _a.sent();
206
+ if (item) {
207
+ storedTokenData = JSON.parse(item);
208
+ }
209
+ return [3 /*break*/, 4];
210
+ case 3:
211
+ // I'm in node js
212
+ // Node environment
213
+ storedTokenData = this.latestTokenData;
214
+ _a.label = 4;
215
+ case 4: return [2 /*return*/, storedTokenData];
216
+ }
217
+ });
218
+ }); };
219
+ this.logMessage = function (logMessage) { };
220
+ this.getActionWithTokenData = function (actionWrapper) {
221
+ return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
222
+ var now, storedTokenData, accessTokenExpiresAt, refreshTokenExpiresAt, url, _a, err_1, url, params, _b;
223
+ return __generator(this, function (_c) {
224
+ switch (_c.label) {
225
+ case 0:
226
+ loglevel_1.default.info('RBSSDK LOG: getActionWithTokenData started');
227
+ loglevel_1.default.info('RBSSDK LOG: secretKey and serviceId not found');
228
+ now = this.getSafeNow();
229
+ loglevel_1.default.info('RBSSDK LOG: now:', now);
230
+ return [4 /*yield*/, this._getStoredTokenData()];
231
+ case 1:
232
+ storedTokenData = _c.sent();
233
+ loglevel_1.default.info('RBSSDK LOG: storedTokenData:', storedTokenData);
234
+ if (!storedTokenData) return [3 /*break*/, 9];
235
+ loglevel_1.default.info('RBSSDK LOG: storedTokenData is defined');
236
+ accessTokenExpiresAt = (0, jwt_decode_1.default)(storedTokenData.accessToken).exp || 0;
237
+ refreshTokenExpiresAt = (0, jwt_decode_1.default)(storedTokenData.refreshToken).exp || 0;
238
+ // If token doesn't need refreshing return it.
239
+ if (refreshTokenExpiresAt > now && accessTokenExpiresAt > now) {
240
+ loglevel_1.default.info('RBSSDK LOG: returning same token');
241
+ // Just return same token
242
+ actionWrapper.tokenData = storedTokenData;
243
+ }
244
+ if (!(refreshTokenExpiresAt > now && accessTokenExpiresAt <= now)) return [3 /*break*/, 8];
245
+ // now + 280 -> only wait 20 seconds for debugging
246
+ // Refresh token
247
+ loglevel_1.default.info('RBSSDK LOG: token refresh needed');
248
+ _c.label = 2;
249
+ case 2:
250
+ _c.trys.push([2, 6, , 7]);
251
+ url = this.getApiUrl() + "/CALL/ProjectUser/refreshToken/" + this.clientConfig.projectId;
252
+ console.log('RBSSDK LOG: url:', url);
253
+ _a = actionWrapper;
254
+ return [4 /*yield*/, this.getP(url, {
255
+ refreshToken: storedTokenData.refreshToken,
256
+ })];
257
+ case 3:
258
+ _a.tokenData = _c.sent();
259
+ if (!!this.firebaseApp) return [3 /*break*/, 5];
260
+ return [4 /*yield*/, this.initFirebase()];
261
+ case 4:
262
+ _c.sent();
263
+ _c.label = 5;
264
+ case 5: return [3 /*break*/, 7];
265
+ case 6:
266
+ err_1 = _c.sent();
267
+ this.signOut();
268
+ return [3 /*break*/, 7];
269
+ case 7:
270
+ loglevel_1.default.info('RBSSDK LOG: refreshed tokenData:', actionWrapper.tokenData);
271
+ _c.label = 8;
272
+ case 8: return [3 /*break*/, 13];
273
+ case 9:
274
+ loglevel_1.default.info('RBSSDK LOG: getting anonym token');
275
+ url = this.getApiUrl() + "/INSTANCE/ProjectUser";
276
+ params = {
277
+ projectId: this.clientConfig.projectId,
278
+ };
279
+ _b = actionWrapper;
280
+ return [4 /*yield*/, this.getP(url, params)];
281
+ case 10:
282
+ _b.tokenData = (_c.sent()).response;
283
+ if (!!this.firebaseApp) return [3 /*break*/, 12];
284
+ return [4 /*yield*/, this.initFirebase()];
285
+ case 11:
286
+ _c.sent();
287
+ _c.label = 12;
288
+ case 12:
289
+ loglevel_1.default.info('RBSSDK LOG: fetched anonym token:', actionWrapper.tokenData);
290
+ _c.label = 13;
291
+ case 13:
292
+ loglevel_1.default.info('RBSSDK LOG: resolving with actionWrapper:', actionWrapper);
293
+ resolve(actionWrapper);
294
+ return [2 /*return*/];
295
+ }
296
+ });
297
+ }); });
298
+ };
299
+ this.getP = function (url, queryParams) { return __awaiter(_this, void 0, void 0, function () {
300
+ return __generator(this, function (_a) {
301
+ switch (_a.label) {
302
+ case 0: return [4 /*yield*/, this.axiosInstance.get(url, { params: queryParams })];
303
+ case 1: return [2 /*return*/, (_a.sent()).data];
304
+ }
305
+ });
306
+ }); };
307
+ this.getPlatform = function () {
308
+ var _a;
309
+ return ((_a = _this.clientConfig) === null || _a === void 0 ? void 0 : _a.platform) ? _this.clientConfig.platform : 'WEB';
310
+ };
311
+ this.request = function (url, actionWrapper) { return __awaiter(_this, void 0, void 0, function () {
312
+ var data, params, key, _a, config, request, response, error_1;
313
+ var _b, _c, _d;
314
+ return __generator(this, function (_e) {
315
+ switch (_e.label) {
316
+ case 0:
317
+ data = (_b = actionWrapper.action) === null || _b === void 0 ? void 0 : _b.data;
318
+ params = {
319
+ _token: (_c = actionWrapper.tokenData) === null || _c === void 0 ? void 0 : _c.accessToken,
320
+ };
321
+ for (key in data.querystring || []) {
322
+ params[key] = data.querystring[key];
323
+ }
324
+ _e.label = 1;
325
+ case 1:
326
+ _e.trys.push([1, 3, , 4]);
327
+ if (!this.axiosInstance)
328
+ throw new Error('Axios instance is null');
329
+ return [4 /*yield*/, this.axiosInstance({
330
+ url: url,
331
+ method: (_d = data.httpMethod) !== null && _d !== void 0 ? _d : 'post',
332
+ params: params,
333
+ data: data.payload,
334
+ headers: __assign(__assign({}, data.headers), { accept: 'text/plain', 'Content-Type': 'text/plain' }),
335
+ })];
336
+ case 2:
337
+ _a = _e.sent(), config = _a.config, request = _a.request, response = __rest(_a, ["config", "request"]);
338
+ actionWrapper.response = response;
339
+ return [2 /*return*/, actionWrapper];
340
+ case 3:
341
+ error_1 = _e.sent();
342
+ actionWrapper.response = error_1.response;
343
+ actionWrapper.responseError = error_1;
344
+ throw actionWrapper;
345
+ case 4: return [2 /*return*/];
346
+ }
347
+ });
348
+ }); };
349
+ this.post = function (url, actionWrapper) {
350
+ return new Promise(function (resolve, reject) {
351
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
352
+ var params = {
353
+ auth: (_a = actionWrapper.tokenData) === null || _a === void 0 ? void 0 : _a.accessToken,
354
+ };
355
+ var data = (_b = actionWrapper.action) === null || _b === void 0 ? void 0 : _b.data;
356
+ if ((_c = actionWrapper.action) === null || _c === void 0 ? void 0 : _c.targetServiceId) {
357
+ params.targetServiceId = (_d = actionWrapper.action) === null || _d === void 0 ? void 0 : _d.targetServiceId;
358
+ }
359
+ if ((_e = actionWrapper.action) === null || _e === void 0 ? void 0 : _e.relatedUserId) {
360
+ params.relatedUserId = (_f = actionWrapper.action) === null || _f === void 0 ? void 0 : _f.relatedUserId;
361
+ }
362
+ if ((_g = actionWrapper.action) === null || _g === void 0 ? void 0 : _g.headers) {
363
+ params.headers = base64_1.default.urlEncode(JSON.stringify((_h = actionWrapper.action) === null || _h === void 0 ? void 0 : _h.headers));
364
+ }
365
+ if ((_j = actionWrapper.action) === null || _j === void 0 ? void 0 : _j.culture) {
366
+ params.culture = actionWrapper.action.culture;
367
+ }
368
+ if ((_k = actionWrapper.action) === null || _k === void 0 ? void 0 : _k.pop) {
369
+ params.pop = 'true';
370
+ }
371
+ params.platform = _this.getPlatform();
372
+ _this.axiosInstance.post(url, data, {
373
+ params: params,
374
+ })
375
+ .then(function (resp) {
376
+ actionWrapper.response = resp.data;
377
+ resolve(actionWrapper);
378
+ })
379
+ .catch(function (err) {
380
+ actionWrapper.responseError = err;
381
+ reject(actionWrapper);
382
+ });
383
+ });
384
+ };
385
+ this.getParams = function (actionWrapper) {
386
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
387
+ var params = {
388
+ auth: (_a = actionWrapper.tokenData) === null || _a === void 0 ? void 0 : _a.accessToken,
389
+ };
390
+ if ((_b = actionWrapper.action) === null || _b === void 0 ? void 0 : _b.data) {
391
+ var data = ((_c = actionWrapper.action) === null || _c === void 0 ? void 0 : _c.data) ? (_d = actionWrapper.action) === null || _d === void 0 ? void 0 : _d.data : {};
392
+ params.data = base64_1.default.urlEncode(JSON.stringify(data));
393
+ }
394
+ if ((_e = actionWrapper.action) === null || _e === void 0 ? void 0 : _e.targetServiceId) {
395
+ params.targetServiceId = (_f = actionWrapper.action) === null || _f === void 0 ? void 0 : _f.targetServiceId;
396
+ }
397
+ if ((_g = actionWrapper.action) === null || _g === void 0 ? void 0 : _g.relatedUserId) {
398
+ params.relatedUserId = (_h = actionWrapper.action) === null || _h === void 0 ? void 0 : _h.relatedUserId;
399
+ }
400
+ if ((_j = actionWrapper.action) === null || _j === void 0 ? void 0 : _j.headers) {
401
+ params.headers = base64_1.default.urlEncode(JSON.stringify((_k = actionWrapper.action) === null || _k === void 0 ? void 0 : _k.headers));
402
+ }
403
+ if ((_l = actionWrapper.action) === null || _l === void 0 ? void 0 : _l.culture) {
404
+ params.culture = actionWrapper.action.culture;
405
+ }
406
+ if ((_m = actionWrapper.action) === null || _m === void 0 ? void 0 : _m.pop) {
407
+ params.pop = 'true';
408
+ }
409
+ params.platform = _this.getPlatform();
410
+ return params;
411
+ };
412
+ this.get = function (url, actionWrapper) {
413
+ return new Promise(function (resolve, reject) {
414
+ var _a;
415
+ var _b, _c;
416
+ var params = _this.getParams(actionWrapper);
417
+ if ((_b = actionWrapper.action) === null || _b === void 0 ? void 0 : _b.generateGetUrl) {
418
+ // Don't get from server but just return get url
419
+ var url_1 = _this.getBaseUrl(actionWrapper.action.action) + _this.getServiceEndpoint(actionWrapper) + '?';
420
+ for (var _i = 0, _d = Object.keys(params); _i < _d.length; _i++) {
421
+ var k = _d[_i];
422
+ url_1 = "" + url_1 + k + "=" + params[k] + "&";
423
+ }
424
+ actionWrapper.url = url_1;
425
+ resolve(actionWrapper);
426
+ }
427
+ else {
428
+ _this.axiosInstance.get(url, {
429
+ params: params,
430
+ headers: __assign((_a = {}, _a['Content-Type'] = 'text/plain', _a), (_c = actionWrapper.action) === null || _c === void 0 ? void 0 : _c.headers),
431
+ })
432
+ .then(function (resp) {
433
+ actionWrapper.response = resp.data;
434
+ resolve(actionWrapper);
435
+ })
436
+ .catch(function (err) {
437
+ actionWrapper.responseError = err;
438
+ reject(actionWrapper);
439
+ });
440
+ }
441
+ });
442
+ };
443
+ this.getPlain = function (url, params, actionWrapper) {
444
+ return new Promise(function (resolve, reject) {
445
+ _this.axiosInstance.get(url, {
446
+ params: params,
447
+ })
448
+ .then(function (resp) {
449
+ actionWrapper.response = resp;
450
+ resolve(actionWrapper);
451
+ })
452
+ .catch(function (err) {
453
+ actionWrapper.responseError = err;
454
+ reject(actionWrapper);
455
+ });
456
+ });
457
+ };
458
+ this.getSafeNow = function () {
459
+ return Math.round(new Date().getTime() / 1000) + 30; // Plus 30 seconds, just in case.
460
+ };
461
+ this.getTokenDataKey = function () {
462
+ var _a;
463
+ return RBS_TOKENS_KEY + "." + ((_a = _this.clientConfig) === null || _a === void 0 ? void 0 : _a.projectId);
464
+ };
465
+ this.setTokenData = function (tokenData) { return __awaiter(_this, void 0, void 0, function () {
466
+ return __generator(this, function (_a) {
467
+ switch (_a.label) {
468
+ case 0:
469
+ if (!(typeof document != 'undefined')) return [3 /*break*/, 1];
470
+ // I'm on the web!
471
+ // Browser environment
472
+ localStorage.setItem(this.getTokenDataKey(), JSON.stringify(tokenData));
473
+ return [3 /*break*/, 4];
474
+ case 1:
475
+ if (!(typeof navigator != 'undefined' && navigator.product == 'ReactNative')) return [3 /*break*/, 3];
476
+ // I'm in react-native
477
+ return [4 /*yield*/, async_storage_1.default.setItem(this.getTokenDataKey(), JSON.stringify(tokenData))];
478
+ case 2:
479
+ // I'm in react-native
480
+ _a.sent();
481
+ return [3 /*break*/, 4];
482
+ case 3:
483
+ // I'm in node js
484
+ // Node environment
485
+ this.latestTokenData = tokenData;
486
+ _a.label = 4;
487
+ case 4: return [2 /*return*/];
488
+ }
489
+ });
490
+ }); };
491
+ // PUBLIC METHODS
492
+ this.getStoredTokenData = function () { return __awaiter(_this, void 0, void 0, function () {
493
+ var storedTokenData, data, accessTokenExpiresAt, refreshTokenExpiresAt, storedTokenData, data, accessTokenExpiresAt, refreshTokenExpiresAt;
494
+ return __generator(this, function (_a) {
495
+ switch (_a.label) {
496
+ case 0:
497
+ if (!(typeof document != 'undefined')) return [3 /*break*/, 1];
498
+ storedTokenData = localStorage.getItem(this.getTokenDataKey());
499
+ if (storedTokenData) {
500
+ data = JSON.parse(storedTokenData);
501
+ accessTokenExpiresAt = (0, jwt_decode_1.default)(data.accessToken).exp || 0;
502
+ refreshTokenExpiresAt = (0, jwt_decode_1.default)(data.refreshToken).exp || 0;
503
+ data.accessTokenExpiresAt = accessTokenExpiresAt;
504
+ data.refreshTokenExpiresAt = refreshTokenExpiresAt;
505
+ return [2 /*return*/, data];
506
+ }
507
+ else {
508
+ return [2 /*return*/, undefined];
509
+ }
510
+ return [3 /*break*/, 4];
511
+ case 1:
512
+ if (!(typeof navigator != 'undefined' && navigator.product == 'ReactNative')) return [3 /*break*/, 3];
513
+ return [4 /*yield*/, async_storage_1.default.getItem(this.getTokenDataKey())];
514
+ case 2:
515
+ storedTokenData = _a.sent();
516
+ if (storedTokenData) {
517
+ data = JSON.parse(storedTokenData);
518
+ accessTokenExpiresAt = (0, jwt_decode_1.default)(data.accessToken).exp || 0;
519
+ refreshTokenExpiresAt = (0, jwt_decode_1.default)(data.refreshToken).exp || 0;
520
+ data.accessTokenExpiresAt = accessTokenExpiresAt;
521
+ data.refreshTokenExpiresAt = refreshTokenExpiresAt;
522
+ return [2 /*return*/, data];
523
+ }
524
+ else {
525
+ return [2 /*return*/, undefined];
526
+ }
527
+ return [3 /*break*/, 4];
528
+ case 3:
529
+ // Node environment
530
+ return [2 /*return*/, this.latestTokenData];
531
+ case 4: return [2 /*return*/];
532
+ }
533
+ });
534
+ }); };
535
+ this.getUser = function () { return __awaiter(_this, void 0, void 0, function () {
536
+ var tokenData;
537
+ return __generator(this, function (_a) {
538
+ switch (_a.label) {
539
+ case 0: return [4 /*yield*/, this.getStoredTokenData()];
540
+ case 1:
541
+ tokenData = _a.sent();
542
+ if (!tokenData)
543
+ return [2 /*return*/, null];
544
+ return [2 /*return*/, (0, jwt_decode_1.default)(tokenData.accessToken)];
545
+ }
546
+ });
547
+ }); };
548
+ this.generatePublicGetActionUrl = function (action) {
549
+ var actionWrapper = {
550
+ action: action,
551
+ tokenData: {
552
+ isServiceToken: false,
553
+ accessToken: '',
554
+ refreshToken: '',
555
+ accessTokenExpiresAt: 0,
556
+ refreshTokenExpiresAt: 0,
557
+ },
558
+ };
559
+ var params = _this.getParams(actionWrapper);
560
+ // Don't get from server but just return get url
561
+ var url = _this.getBaseUrl(actionWrapper.action.action) + _this.getServiceEndpoint(actionWrapper) + '?';
562
+ for (var _i = 0, _a = Object.keys(params); _i < _a.length; _i++) {
563
+ var k = _a[_i];
564
+ url = "" + url + k + "=" + params[k] + "&";
565
+ }
566
+ return url;
567
+ };
568
+ this.generateGetActionUrl = function (action) {
569
+ if (!_this.initialized)
570
+ throw new Error('RBS SDK is not initialized');
571
+ if (!action.culture)
572
+ action.culture = 'en-US';
573
+ return new Promise(function (resolve, reject) {
574
+ if (!action.onSuccess && !action.onError) {
575
+ action.onSuccess = resolve;
576
+ action.onError = reject;
577
+ }
578
+ action.generateGetUrl = true;
579
+ _this.commandQueue.next(action);
580
+ });
581
+ };
582
+ this.send = function (action) {
583
+ if (!_this.initialized)
584
+ throw new Error('RBS SDK is not initialized');
585
+ if (!action.culture)
586
+ action.culture = 'en-US';
587
+ return new Promise(function (resolve, reject) {
588
+ if (!action.onSuccess && !action.onError) {
589
+ action.onSuccess = resolve;
590
+ action.onError = reject;
591
+ }
592
+ _this.commandQueue.next(action);
593
+ });
594
+ };
595
+ this.authenticateWithCustomToken = function (userId, token) {
596
+ if (!_this.initialized)
597
+ throw new Error('RBS SDK is not initialized');
598
+ return new Promise(function (resolve, reject) {
599
+ var action = {
600
+ action: 'customauth',
601
+ data: {
602
+ userId: userId,
603
+ token: token,
604
+ },
605
+ onSuccess: resolve,
606
+ onError: reject,
607
+ };
608
+ _this.customAuthQueue.next(action);
609
+ });
610
+ };
611
+ this.signInAnonymously = function () { return __awaiter(_this, void 0, void 0, function () {
612
+ return __generator(this, function (_a) {
613
+ switch (_a.label) {
614
+ case 0: return [4 /*yield*/, this.send({
615
+ action: 'signInAnonym',
616
+ data: {},
617
+ })];
618
+ case 1:
619
+ _a.sent();
620
+ return [2 /*return*/];
621
+ }
622
+ });
623
+ }); };
624
+ this.signOut = function () { return __awaiter(_this, void 0, void 0, function () {
625
+ var _a;
626
+ return __generator(this, function (_b) {
627
+ switch (_b.label) {
628
+ case 0:
629
+ if (!this.initialized)
630
+ throw new Error('RBS SDK is not initialized');
631
+ if (!(typeof document != 'undefined')) return [3 /*break*/, 1];
632
+ localStorage.removeItem(this.getTokenDataKey());
633
+ return [3 /*break*/, 4];
634
+ case 1:
635
+ if (!(typeof navigator != 'undefined' && navigator.product == 'ReactNative')) return [3 /*break*/, 3];
636
+ return [4 /*yield*/, async_storage_1.default.removeItem(this.getTokenDataKey())];
637
+ case 2:
638
+ _b.sent();
639
+ return [3 /*break*/, 4];
640
+ case 3:
641
+ this.latestTokenData = undefined;
642
+ _b.label = 4;
643
+ case 4:
644
+ _a = this.fireAuthStatus;
645
+ return [4 /*yield*/, this.getStoredTokenData()];
646
+ case 5:
647
+ _a.apply(this, [_b.sent()]);
648
+ return [4 /*yield*/, this.cleanInitFirebase()];
649
+ case 6:
650
+ _b.sent();
651
+ this.logoutUser();
652
+ return [2 /*return*/, true];
653
+ }
654
+ });
655
+ }); };
656
+ this.logoutUser = function () { return __awaiter(_this, void 0, void 0, function () {
657
+ var _this = this;
658
+ return __generator(this, function (_a) {
659
+ return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
660
+ var tokenData, endpoint, err_2;
661
+ return __generator(this, function (_a) {
662
+ switch (_a.label) {
663
+ case 0: return [4 /*yield*/, this.getStoredTokenData()];
664
+ case 1:
665
+ tokenData = _a.sent();
666
+ endpoint = this.getApiUrl() + "/CALL/ProjectUser/signOut/" + this.clientConfig.projectId;
667
+ _a.label = 2;
668
+ case 2:
669
+ _a.trys.push([2, 4, , 5]);
670
+ return [4 /*yield*/, this.getP(endpoint, {
671
+ accessToken: tokenData === null || tokenData === void 0 ? void 0 : tokenData.accessToken,
672
+ })];
673
+ case 3:
674
+ _a.sent();
675
+ return [3 /*break*/, 5];
676
+ case 4:
677
+ err_2 = _a.sent();
678
+ return [3 /*break*/, 5];
679
+ case 5:
680
+ resolve(true);
681
+ return [2 /*return*/];
682
+ }
683
+ });
684
+ }); })];
685
+ });
686
+ }); };
687
+ this.initFirebase = function () { return __awaiter(_this, void 0, void 0, function () {
688
+ var firebaseConfig;
689
+ var _a;
690
+ return __generator(this, function (_b) {
691
+ switch (_b.label) {
692
+ case 0: return [4 /*yield*/, this.getStoredTokenData()];
693
+ case 1:
694
+ firebaseConfig = (_a = (_b.sent())) === null || _a === void 0 ? void 0 : _a.firebase;
695
+ console.log({ firebaseConfig: firebaseConfig });
696
+ if (!firebaseConfig)
697
+ return [2 /*return*/];
698
+ if (!!this.firebaseApp) return [3 /*break*/, 3];
699
+ this.firebaseApp = (0, app_1.initializeApp)({
700
+ apiKey: firebaseConfig.apiKey,
701
+ authDomain: firebaseConfig.projectId + '.firebaseapp.com',
702
+ projectId: firebaseConfig.projectId,
703
+ });
704
+ this.firestore = (0, firestore_1.getFirestore)(this.firebaseApp);
705
+ this.firebaseAuth = (0, auth_1.getAuth)(this.firebaseApp);
706
+ return [4 /*yield*/, (0, auth_1.signInWithCustomToken)(this.firebaseAuth, firebaseConfig.customToken)];
707
+ case 2:
708
+ _b.sent();
709
+ _b.label = 3;
710
+ case 3: return [2 /*return*/];
711
+ }
712
+ });
713
+ }); };
714
+ this.getFirebaseListeners = function (data, queue, key) { return __awaiter(_this, void 0, void 0, function () {
715
+ var userData, documentId, collection, document, unsubscribe;
716
+ return __generator(this, function (_a) {
717
+ switch (_a.label) {
718
+ case 0: return [4 /*yield*/, this.getUser()];
719
+ case 1:
720
+ userData = _a.sent();
721
+ console.log({ userData: userData });
722
+ if (!userData && key !== 'public')
723
+ return [2 /*return*/, null];
724
+ documentId = data.instanceId;
725
+ collection = "/projects/" + this.clientConfig.projectId + "/classes/" + data.classId + "/instances";
726
+ if (key === 'role') {
727
+ documentId = userData.identity;
728
+ collection += "/" + data.instanceId + "/roleState";
729
+ }
730
+ if (key === 'user') {
731
+ documentId = userData.userId;
732
+ collection += "/" + data.instanceId + "/userState";
733
+ }
734
+ console.log(collection, documentId);
735
+ document = (0, firestore_2.doc)(this.firestore, collection, documentId);
736
+ unsubscribe = (0, firestore_2.onSnapshot)(document, function (doc) {
737
+ var data = Object.assign({}, doc.data());
738
+ for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) {
739
+ var key_1 = _a[_i];
740
+ if (key_1.startsWith('__'))
741
+ delete data[key_1];
742
+ }
743
+ queue.next(data);
744
+ });
745
+ return [2 /*return*/, unsubscribe];
746
+ }
747
+ });
748
+ }); };
749
+ this.cleanInitFirebase = function () { return __awaiter(_this, void 0, void 0, function () {
750
+ return __generator(this, function (_a) {
751
+ switch (_a.label) {
752
+ case 0:
753
+ // unsubscribe from all events
754
+ this.cloudObjects.map(function (cloudObject) {
755
+ cloudObject.unsubscribers.map(function (unsubscribe) { return unsubscribe && unsubscribe(); });
756
+ });
757
+ this.cloudObjects = [];
758
+ if (!this.firebaseAuth) return [3 /*break*/, 2];
759
+ return [4 /*yield*/, (0, auth_1.signOut)(this.firebaseAuth)];
760
+ case 1:
761
+ _a.sent();
762
+ _a.label = 2;
763
+ case 2:
764
+ this.firebaseApp = null;
765
+ this.firestore = null;
766
+ this.firebaseAuth = null;
767
+ return [2 /*return*/];
768
+ }
769
+ });
770
+ }); };
771
+ this.isCosAction = function (action) {
772
+ return ['rbs.core.request.INSTANCE', 'rbs.core.request.CALL', 'rbs.core.request.STATE'].includes(action);
773
+ };
774
+ this.getCosEndpoint = function (method, classId, instanceId, methodId) {
775
+ var region = _this.getRegion();
776
+ return "https://" + _this.clientConfig.projectId + "." + region.apiUrl + "/" + method + "/" + classId + (methodId ? '/' + methodId : '') + (instanceId ? '/' + instanceId : '');
777
+ };
778
+ this.getCloudObject = function (data) { return __awaiter(_this, void 0, void 0, function () {
779
+ var instanceResponse, seekedObject, queues, state, unsubscribers, _a, _b, _c, _d, _e, _f, call, getState;
780
+ var _this = this;
781
+ var _g, _h;
782
+ return __generator(this, function (_j) {
783
+ switch (_j.label) {
784
+ case 0:
785
+ if (data.useLocal && data.instanceId) {
786
+ return [2 /*return*/, {
787
+ instanceId: data.instanceId,
788
+ isNewInstance: true,
789
+ methods: [],
790
+ getState: function (params) { return __awaiter(_this, void 0, void 0, function () {
791
+ return __generator(this, function (_a) {
792
+ switch (_a.label) {
793
+ case 0: return [4 /*yield*/, this.send({
794
+ action: 'rbs.core.request.STATE',
795
+ data: __assign(__assign({}, params), { classId: data.classId, instanceId: data.instanceId }),
796
+ token: params === null || params === void 0 ? void 0 : params.token,
797
+ })];
798
+ case 1: return [2 /*return*/, _a.sent()];
799
+ }
800
+ });
801
+ }); },
802
+ call: function (params) { return __awaiter(_this, void 0, void 0, function () {
803
+ return __generator(this, function (_a) {
804
+ switch (_a.label) {
805
+ case 0: return [4 /*yield*/, this.send({
806
+ action: 'rbs.core.request.CALL',
807
+ data: __assign(__assign({}, params), { classId: data.classId, instanceId: data.instanceId }),
808
+ token: params.token,
809
+ })];
810
+ case 1: return [2 /*return*/, _a.sent()];
811
+ }
812
+ });
813
+ }); },
814
+ }];
815
+ }
816
+ return [4 /*yield*/, this.send({
817
+ action: 'rbs.core.request.INSTANCE',
818
+ data: data,
819
+ token: data.token,
820
+ })];
821
+ case 1:
822
+ instanceResponse = (_j.sent()).data;
823
+ if (!!this.firebaseApp) return [3 /*break*/, 3];
824
+ return [4 /*yield*/, this.initFirebase()];
825
+ case 2:
826
+ _j.sent();
827
+ _j.label = 3;
828
+ case 3:
829
+ if (instanceResponse === null || instanceResponse === void 0 ? void 0 : instanceResponse.instanceId)
830
+ data.instanceId = instanceResponse.instanceId;
831
+ seekedObject = this.cloudObjects.find(function (cloudObject) { return cloudObject.config.classId === data.classId && cloudObject.config.instanceId === data.instanceId; });
832
+ if (seekedObject) {
833
+ seekedObject.methods = instanceResponse === null || instanceResponse === void 0 ? void 0 : instanceResponse.methods; // refresh methods.
834
+ return [2 /*return*/, {
835
+ instanceId: seekedObject.config.instanceId,
836
+ call: seekedObject.call,
837
+ state: seekedObject.state,
838
+ getState: seekedObject.getState,
839
+ methods: seekedObject.methods || [],
840
+ isNewInstance: seekedObject.isNewInstance,
841
+ }];
842
+ }
843
+ queues = {
844
+ roleQueue: new rxjs_1.ReplaySubject(1),
845
+ userQueue: new rxjs_1.ReplaySubject(1),
846
+ publicQueue: new rxjs_1.ReplaySubject(1),
847
+ };
848
+ state = {
849
+ role: queues.roleQueue.asObservable(),
850
+ user: queues.userQueue.asObservable(),
851
+ public: queues.publicQueue.asObservable(),
852
+ };
853
+ unsubscribers = [];
854
+ _b = (_a = unsubscribers).push;
855
+ return [4 /*yield*/, this.getFirebaseListeners(data, queues.roleQueue, 'role')];
856
+ case 4:
857
+ _b.apply(_a, [_j.sent()]);
858
+ _d = (_c = unsubscribers).push;
859
+ return [4 /*yield*/, this.getFirebaseListeners(data, queues.userQueue, 'user')];
860
+ case 5:
861
+ _d.apply(_c, [_j.sent()]);
862
+ _f = (_e = unsubscribers).push;
863
+ return [4 /*yield*/, this.getFirebaseListeners(data, queues.publicQueue, 'public')];
864
+ case 6:
865
+ _f.apply(_e, [_j.sent()]);
866
+ call = function (params) { return __awaiter(_this, void 0, void 0, function () {
867
+ return __generator(this, function (_a) {
868
+ switch (_a.label) {
869
+ case 0: return [4 /*yield*/, this.send({
870
+ action: 'rbs.core.request.CALL',
871
+ data: __assign(__assign({}, params), { classId: data.classId, instanceId: data.instanceId }),
872
+ token: params.token,
873
+ })];
874
+ case 1: return [2 /*return*/, _a.sent()];
875
+ }
876
+ });
877
+ }); };
878
+ getState = function (params) { return __awaiter(_this, void 0, void 0, function () {
879
+ return __generator(this, function (_a) {
880
+ switch (_a.label) {
881
+ case 0: return [4 /*yield*/, this.send({
882
+ action: 'rbs.core.request.STATE',
883
+ data: __assign(__assign({}, params), { classId: data.classId, instanceId: data.instanceId }),
884
+ token: params === null || params === void 0 ? void 0 : params.token,
885
+ })];
886
+ case 1: return [2 /*return*/, _a.sent()];
887
+ }
888
+ });
889
+ }); };
890
+ this.cloudObjects.push({
891
+ config: data,
892
+ isNewInstance: (_g = instanceResponse === null || instanceResponse === void 0 ? void 0 : instanceResponse.newInstance) !== null && _g !== void 0 ? _g : false,
893
+ methods: instanceResponse === null || instanceResponse === void 0 ? void 0 : instanceResponse.methods,
894
+ call: call,
895
+ state: state,
896
+ getState: getState,
897
+ unsubscribers: unsubscribers,
898
+ });
899
+ return [2 /*return*/, { instanceId: data.instanceId, state: state, call: call, getState: getState, isNewInstance: (_h = instanceResponse === null || instanceResponse === void 0 ? void 0 : instanceResponse.newInstance) !== null && _h !== void 0 ? _h : false, methods: (instanceResponse === null || instanceResponse === void 0 ? void 0 : instanceResponse.methods) || [] }];
900
+ }
901
+ });
902
+ }); };
903
+ }
904
+ RBS.prototype.isNode = function () {
905
+ return typeof window === 'undefined';
906
+ };
907
+ Object.defineProperty(RBS.prototype, "authStatus", {
908
+ get: function () {
909
+ return this.authStatusSubject.asObservable().pipe((0, operators_1.distinctUntilChanged)(function (a, b) { return a.authStatus === b.authStatus && a.identity === b.identity && a.uid === b.uid; }));
910
+ // .pipe(debounce(() => timer(100)))
911
+ },
912
+ enumerable: false,
913
+ configurable: true
914
+ });
915
+ RBS.clearTokens = function () {
916
+ if (typeof document != 'undefined') {
917
+ // I'm on the web!
918
+ // Browser environment
919
+ for (var key in localStorage) {
920
+ if (key.startsWith(RBS_TOKENS_KEY))
921
+ localStorage.removeItem(key);
922
+ }
923
+ }
924
+ };
925
+ RBS.getInstance = function (config) {
926
+ if (config === void 0) { config = null; }
927
+ if (!RBS.instances)
928
+ RBS.instances = [];
929
+ var instance = RBS.instances.find(function (i) { var _a; return ((_a = i.clientConfig) === null || _a === void 0 ? void 0 : _a.projectId) === (config === null || config === void 0 ? void 0 : config.projectId); });
930
+ if (!instance) {
931
+ instance = new RBS();
932
+ if (config) {
933
+ instance.init(config);
934
+ }
935
+ RBS.instances.push(instance);
936
+ }
937
+ return instance;
938
+ };
939
+ RBS.dispose = function () {
940
+ RBS.instances = [];
941
+ };
942
+ RBS.prototype.init = function (config) {
943
+ var _this = this;
944
+ if (this.initialized)
945
+ throw new Error('RBS SDK already initialized.');
946
+ this.initialized = true;
947
+ var axiosRequestConfiguration = {
948
+ responseType: 'json',
949
+ headers: {
950
+ 'Content-Type': 'application/json',
951
+ },
952
+ timeout: 30000,
953
+ };
954
+ this.axiosInstance = (0, axiosSetup_1.default)(axiosRequestConfiguration);
955
+ config.logLevel ? loglevel_1.default.setLevel(config.logLevel) : loglevel_1.default.setLevel('ERROR');
956
+ this.clientConfig = config;
957
+ if (!this.clientConfig.region)
958
+ this.clientConfig.region = RbsRegion.euWest1;
959
+ var incomingAction = this.commandQueue.asObservable();
960
+ var actionResult = incomingAction.pipe((0, operators_1.concatMap)(function (action) { return __awaiter(_this, void 0, void 0, function () {
961
+ var actionWrapper;
962
+ return __generator(this, function (_a) {
963
+ switch (_a.label) {
964
+ case 0:
965
+ actionWrapper = {
966
+ action: action,
967
+ };
968
+ return [4 /*yield*/, this.getActionWithTokenData(actionWrapper)];
969
+ case 1: return [2 /*return*/, _a.sent()];
970
+ }
971
+ });
972
+ }); }), (0, operators_1.tap)(function (actionWrapper) {
973
+ _this.fireAuthStatus(actionWrapper.tokenData);
974
+ }), (0, operators_1.filter)(function (actionWrapper) { return actionWrapper.tokenData != null; }), (0, operators_1.tap)(function (actionWrapper) { return __awaiter(_this, void 0, void 0, function () {
975
+ return __generator(this, function (_a) {
976
+ switch (_a.label) {
977
+ case 0: return [4 /*yield*/, this.setTokenData(actionWrapper.tokenData)];
978
+ case 1:
979
+ _a.sent();
980
+ return [2 /*return*/];
981
+ }
982
+ });
983
+ }); }), (0, operators_1.mergeMap)(function (ev) {
984
+ var _a;
985
+ var endpoint = ev.tokenData.isServiceToken ? '/service/action' : '/user/action';
986
+ var action = ev.action.action;
987
+ var actionType = action.split('.')[2];
988
+ endpoint = endpoint + "/" + _this.clientConfig.projectId + "/" + action;
989
+ endpoint = _this.getBaseUrl(action) + _this.getServiceEndpoint(ev);
990
+ if ((_a = ev.action) === null || _a === void 0 ? void 0 : _a.token) {
991
+ ev.tokenData.accessToken = ev.action.token;
992
+ }
993
+ if (_this.isCosAction(action)) {
994
+ var cosData = ev.action.data;
995
+ endpoint = _this.getCosEndpoint(action.split('.')[3], cosData.classId, cosData.key ? cosData.key.name + "!" + cosData.key.value : cosData.instanceId, cosData.method);
996
+ return (0, rxjs_1.defer)(function () { return _this.request(endpoint, ev); }).pipe((0, operators_1.materialize)());
997
+ }
998
+ if (action !== 'signInAnonym') {
999
+ if (actionType === 'get') {
1000
+ return (0, rxjs_1.defer)(function () { return _this.get(endpoint, ev); }).pipe((0, operators_1.materialize)());
1001
+ }
1002
+ else {
1003
+ return (0, rxjs_1.defer)(function () { return _this.post(endpoint, ev); }).pipe((0, operators_1.materialize)());
1004
+ }
1005
+ }
1006
+ return (0, rxjs_1.defer)(function () { }).pipe((0, operators_1.materialize)());
1007
+ }), (0, operators_1.share)());
1008
+ actionResult.pipe((0, operators_1.filter)(function (r) { return r.hasValue && r.kind === 'N'; })).subscribe(function (e) {
1009
+ var _a, _b, _c;
1010
+ if ((_b = (_a = e.value) === null || _a === void 0 ? void 0 : _a.action) === null || _b === void 0 ? void 0 : _b.onSuccess) {
1011
+ if (e.value.action.generateGetUrl) {
1012
+ e.value.action.onSuccess(e.value.url);
1013
+ }
1014
+ else {
1015
+ e.value.action.onSuccess((_c = e.value) === null || _c === void 0 ? void 0 : _c.response);
1016
+ }
1017
+ }
1018
+ });
1019
+ actionResult.pipe((0, operators_1.filter)(function (r) { return r.hasValue === false && r.kind === 'E'; })).subscribe(function (e) {
1020
+ var _a, _b;
1021
+ if (e.error) {
1022
+ var actionWrapper = e.error;
1023
+ if ((_a = actionWrapper.action) === null || _a === void 0 ? void 0 : _a.onError) {
1024
+ (_b = actionWrapper.action) === null || _b === void 0 ? void 0 : _b.onError(actionWrapper.responseError);
1025
+ }
1026
+ }
1027
+ });
1028
+ // Custom auth
1029
+ var customAuthResult = this.customAuthQueue.pipe((0, operators_1.concatMap)(function (action) {
1030
+ var actionWrapper = {
1031
+ action: action,
1032
+ };
1033
+ return (0, rxjs_1.defer)(function () {
1034
+ var url = _this.getApiUrl() + "/CALL/ProjectUser/authWithCustomToken/" + _this.clientConfig.projectId + "_" + action.data.userId;
1035
+ return _this.getPlain(url, { customToken: action.data.token }, actionWrapper);
1036
+ }).pipe((0, operators_1.materialize)());
1037
+ }), (0, operators_1.share)());
1038
+ customAuthResult
1039
+ .pipe((0, operators_1.filter)(function (r) { return r.hasValue && r.kind === 'N'; }), (0, operators_1.map)(function (e) {
1040
+ var actionWrapper = e.value;
1041
+ actionWrapper.tokenData = {
1042
+ accessToken: actionWrapper.response.data.accessToken,
1043
+ refreshToken: actionWrapper.response.data.refreshToken,
1044
+ isServiceToken: false,
1045
+ accessTokenExpiresAt: 0,
1046
+ refreshTokenExpiresAt: 0,
1047
+ };
1048
+ if (actionWrapper.response.data.firebase) {
1049
+ actionWrapper.tokenData.firebase = {
1050
+ apiKey: actionWrapper.response.data.firebase.apiKey,
1051
+ projectId: actionWrapper.response.data.firebase.projectId,
1052
+ customToken: actionWrapper.response.data.firebase.customToken,
1053
+ };
1054
+ }
1055
+ return actionWrapper;
1056
+ }), (0, operators_1.tap)(function (actionWrapper) { return __awaiter(_this, void 0, void 0, function () {
1057
+ return __generator(this, function (_a) {
1058
+ switch (_a.label) {
1059
+ case 0:
1060
+ if (!actionWrapper.tokenData) return [3 /*break*/, 2];
1061
+ return [4 /*yield*/, this.setTokenData(actionWrapper.tokenData)];
1062
+ case 1:
1063
+ _a.sent();
1064
+ _a.label = 2;
1065
+ case 2:
1066
+ this.fireAuthStatus(actionWrapper.tokenData);
1067
+ return [2 /*return*/];
1068
+ }
1069
+ });
1070
+ }); }), (0, operators_1.tap)(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
1071
+ switch (_a.label) {
1072
+ case 0: return [4 /*yield*/, this.cleanInitFirebase()];
1073
+ case 1: return [2 /*return*/, _a.sent()];
1074
+ }
1075
+ }); }); }))
1076
+ .subscribe(function (actionWrapper) { return __awaiter(_this, void 0, void 0, function () {
1077
+ var authEvent, _a;
1078
+ return __generator(this, function (_b) {
1079
+ switch (_b.label) {
1080
+ case 0:
1081
+ _a = this.getAuthChangedEvent;
1082
+ return [4 /*yield*/, this.getStoredTokenData()];
1083
+ case 1:
1084
+ authEvent = _a.apply(this, [_b.sent()]);
1085
+ if (actionWrapper.action.onSuccess) {
1086
+ actionWrapper.action.onSuccess(authEvent);
1087
+ }
1088
+ return [2 /*return*/];
1089
+ }
1090
+ });
1091
+ }); });
1092
+ customAuthResult.pipe((0, operators_1.filter)(function (r) { return r.hasValue === false && r.kind === 'E'; })).subscribe(function (e) {
1093
+ var _a, _b;
1094
+ if (e.error) {
1095
+ var actionWrapper = e.error;
1096
+ if ((_a = actionWrapper.action) === null || _a === void 0 ? void 0 : _a.onError) {
1097
+ (_b = actionWrapper.action) === null || _b === void 0 ? void 0 : _b.onError({
1098
+ authStatus: RBSAuthStatus.AUTH_FAILED,
1099
+ message: actionWrapper.responseError,
1100
+ });
1101
+ }
1102
+ }
1103
+ });
1104
+ this.authStatus.subscribe();
1105
+ setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
1106
+ var _a;
1107
+ return __generator(this, function (_b) {
1108
+ switch (_b.label) {
1109
+ case 0:
1110
+ _a = this.fireAuthStatus;
1111
+ return [4 /*yield*/, this.getStoredTokenData()];
1112
+ case 1:
1113
+ _a.apply(this, [_b.sent()]);
1114
+ return [2 /*return*/];
1115
+ }
1116
+ });
1117
+ }); }, 1);
1118
+ };
1119
+ RBS.instances = null;
1120
+ return RBS;
1121
+ }());
1122
+ exports.default = RBS;
1123
+ //# sourceMappingURL=index.js.map