@intuitionrobotics/firebase 0.41.69 → 0.41.72
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/app-backend/FirebaseModule.js +46 -63
- package/app-backend/FirebaseModule.js.map +1 -1
- package/app-backend/auth/FirebaseBaseWrapper.d.ts +2 -2
- package/app-backend/auth/FirebaseBaseWrapper.js +8 -24
- package/app-backend/auth/FirebaseBaseWrapper.js.map +1 -1
- package/app-backend/auth/FirebaseSession_Admin.d.ts +4 -6
- package/app-backend/auth/FirebaseSession_Admin.js +21 -37
- package/app-backend/auth/FirebaseSession_Admin.js.map +1 -1
- package/app-backend/auth/firebase-session.d.ts +2 -7
- package/app-backend/auth/firebase-session.js +22 -42
- package/app-backend/auth/firebase-session.js.map +1 -1
- package/app-backend/database/DatabaseWrapper.d.ts +1 -1
- package/app-backend/database/DatabaseWrapper.js +91 -195
- package/app-backend/database/DatabaseWrapper.js.map +1 -1
- package/app-backend/firestore/FirestoreCollection.js +92 -216
- package/app-backend/firestore/FirestoreCollection.js.map +1 -1
- package/app-backend/firestore/FirestoreInterface.js +30 -34
- package/app-backend/firestore/FirestoreInterface.js.map +1 -1
- package/app-backend/firestore/FirestoreTransaction.js +125 -321
- package/app-backend/firestore/FirestoreTransaction.js.map +1 -1
- package/app-backend/firestore/FirestoreWrapper.d.ts +1 -1
- package/app-backend/firestore/FirestoreWrapper.js +25 -72
- package/app-backend/firestore/FirestoreWrapper.js.map +1 -1
- package/app-backend/functions/firebase-function.js +178 -327
- package/app-backend/functions/firebase-function.js.map +1 -1
- package/app-backend/push/PushMessagesWrapper.d.ts +1 -1
- package/app-backend/push/PushMessagesWrapper.js +31 -86
- package/app-backend/push/PushMessagesWrapper.js.map +1 -1
- package/app-backend/storage/StorageWrapper.d.ts +2 -2
- package/app-backend/storage/StorageWrapper.js +166 -347
- package/app-backend/storage/StorageWrapper.js.map +1 -1
- package/app-frontend/FirebaseModule.js +81 -169
- package/app-frontend/FirebaseModule.js.map +1 -1
- package/app-frontend/analytics/AnalyticsModule.js +17 -68
- package/app-frontend/analytics/AnalyticsModule.js.map +1 -1
- package/app-frontend/analytics/AnalyticsWrapper.js +17 -33
- package/app-frontend/analytics/AnalyticsWrapper.js.map +1 -1
- package/app-frontend/auth/FirebaseSession.js +33 -80
- package/app-frontend/auth/FirebaseSession.js.map +1 -1
- package/app-frontend/auth/SwFirebaseSession.js +11 -27
- package/app-frontend/auth/SwFirebaseSession.js.map +1 -1
- package/app-frontend/database/DatabaseWrapper.js +64 -148
- package/app-frontend/database/DatabaseWrapper.js.map +1 -1
- package/app-frontend/messaging/MessagingWrapper.js +16 -68
- package/app-frontend/messaging/MessagingWrapper.js.map +1 -1
- package/app-frontend/messaging/SwMessagingWrapper.js +11 -28
- package/app-frontend/messaging/SwMessagingWrapper.js.map +1 -1
- package/package.json +8 -8
|
@@ -16,19 +16,6 @@
|
|
|
16
16
|
* See the License for the specific language governing permissions and
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
|
-
var __extends = (this && this.__extends) || (function () {
|
|
20
|
-
var extendStatics = function (d, b) {
|
|
21
|
-
extendStatics = Object.setPrototypeOf ||
|
|
22
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
23
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
24
|
-
return extendStatics(d, b);
|
|
25
|
-
};
|
|
26
|
-
return function (d, b) {
|
|
27
|
-
extendStatics(d, b);
|
|
28
|
-
function __() { this.constructor = d; }
|
|
29
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
30
|
-
};
|
|
31
|
-
})();
|
|
32
19
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
33
20
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
34
21
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -38,207 +25,116 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
38
25
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
39
26
|
});
|
|
40
27
|
};
|
|
41
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
42
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
43
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
44
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
45
|
-
function step(op) {
|
|
46
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
47
|
-
while (_) try {
|
|
48
|
-
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;
|
|
49
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
50
|
-
switch (op[0]) {
|
|
51
|
-
case 0: case 1: t = op; break;
|
|
52
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
53
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
54
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
55
|
-
default:
|
|
56
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
57
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
58
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
59
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
60
|
-
if (t[2]) _.ops.pop();
|
|
61
|
-
_.trys.pop(); continue;
|
|
62
|
-
}
|
|
63
|
-
op = body.call(thisArg, _);
|
|
64
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
65
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
69
29
|
exports.DatabaseWrapper = void 0;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
_this.database = database_1.getDatabase(firebaseSession.app);
|
|
78
|
-
return _this;
|
|
30
|
+
const ts_common_1 = require("@intuitionrobotics/ts-common");
|
|
31
|
+
const FirebaseBaseWrapper_1 = require("../auth/FirebaseBaseWrapper");
|
|
32
|
+
const database_1 = require("firebase-admin/database");
|
|
33
|
+
class DatabaseWrapper extends FirebaseBaseWrapper_1.FirebaseBaseWrapper {
|
|
34
|
+
constructor(firebaseSession) {
|
|
35
|
+
super(firebaseSession);
|
|
36
|
+
this.database = database_1.getDatabase(firebaseSession.app);
|
|
79
37
|
}
|
|
80
|
-
|
|
81
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (snapshot)
|
|
90
|
-
toRet = snapshot.val();
|
|
91
|
-
if (!toRet)
|
|
92
|
-
toRet = defaultValue;
|
|
93
|
-
return [2 /*return*/, toRet];
|
|
94
|
-
}
|
|
95
|
-
});
|
|
38
|
+
get(path, defaultValue) {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const snapshot = yield this.database.ref(path).once("value");
|
|
41
|
+
let toRet = defaultValue;
|
|
42
|
+
if (snapshot)
|
|
43
|
+
toRet = snapshot.val();
|
|
44
|
+
if (!toRet)
|
|
45
|
+
toRet = defaultValue;
|
|
46
|
+
return toRet;
|
|
96
47
|
});
|
|
97
|
-
}
|
|
98
|
-
|
|
48
|
+
}
|
|
49
|
+
listen(path, callback) {
|
|
99
50
|
try {
|
|
100
|
-
return this.database.ref(path).on("value",
|
|
51
|
+
return this.database.ref(path).on("value", (snapshot) => callback(snapshot ? snapshot.val() : undefined));
|
|
101
52
|
}
|
|
102
53
|
catch (e) {
|
|
103
|
-
throw new ts_common_1.BadImplementationException(
|
|
54
|
+
throw new ts_common_1.BadImplementationException(`Error while getting value from path: ${path}`, e);
|
|
104
55
|
}
|
|
105
|
-
}
|
|
106
|
-
|
|
56
|
+
}
|
|
57
|
+
stopListening(path, listener) {
|
|
107
58
|
try {
|
|
108
59
|
this.database.ref(path).off("value", listener);
|
|
109
60
|
}
|
|
110
61
|
catch (e) {
|
|
111
|
-
throw new ts_common_1.BadImplementationException(
|
|
62
|
+
throw new ts_common_1.BadImplementationException(`Error while getting value from path: ${path}`, e);
|
|
112
63
|
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
123
|
-
case 2:
|
|
124
|
-
e_1 = _a.sent();
|
|
125
|
-
throw new ts_common_1.BadImplementationException("Error while setting value to path: " + path, e_1);
|
|
126
|
-
case 3: return [2 /*return*/];
|
|
127
|
-
}
|
|
128
|
-
});
|
|
64
|
+
}
|
|
65
|
+
set(path, value) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
try {
|
|
68
|
+
return yield this.database.ref(path).set(value);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
throw new ts_common_1.BadImplementationException(`Error while setting value to path: ${path}`, e);
|
|
72
|
+
}
|
|
129
73
|
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
for (_b in data)
|
|
141
|
-
_a.push(_b);
|
|
142
|
-
_i = 0;
|
|
143
|
-
_c.label = 1;
|
|
144
|
-
case 1:
|
|
145
|
-
if (!(_i < _a.length)) return [3 /*break*/, 6];
|
|
146
|
-
key = _a[_i];
|
|
147
|
-
node = parentPath + "/" + key;
|
|
148
|
-
if (!(ts_common_1.calculateJsonSizeMb(data[key]) < maxSizeMB)) return [3 /*break*/, 3];
|
|
149
|
-
return [4 /*yield*/, this.set(node, data[key])];
|
|
150
|
-
case 2:
|
|
151
|
-
_c.sent();
|
|
152
|
-
return [3 /*break*/, 5];
|
|
153
|
-
case 3: return [4 /*yield*/, this.uploadByChunks(node, data[key], maxSizeMB, itemsToRef)];
|
|
154
|
-
case 4:
|
|
155
|
-
_c.sent();
|
|
156
|
-
_c.label = 5;
|
|
157
|
-
case 5:
|
|
158
|
-
_i++;
|
|
159
|
-
return [3 /*break*/, 1];
|
|
160
|
-
case 6: return [2 /*return*/];
|
|
161
|
-
}
|
|
162
|
-
});
|
|
74
|
+
}
|
|
75
|
+
uploadByChunks(parentPath, data, maxSizeMB = 3, itemsToRef = []) {
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
for (const key in data) {
|
|
78
|
+
const node = `${parentPath}/${key}`;
|
|
79
|
+
if (ts_common_1.calculateJsonSizeMb(data[key]) < maxSizeMB)
|
|
80
|
+
yield this.set(node, data[key]);
|
|
81
|
+
else
|
|
82
|
+
yield this.uploadByChunks(node, data[key], maxSizeMB, itemsToRef);
|
|
83
|
+
}
|
|
163
84
|
});
|
|
164
|
-
}
|
|
85
|
+
}
|
|
165
86
|
;
|
|
166
|
-
|
|
167
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
return [2 /*return*/, this.patch(path, value)];
|
|
171
|
-
});
|
|
87
|
+
update(path, value) {
|
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
this.logWarning("update will be deprecated!! please use patch");
|
|
90
|
+
return this.patch(path, value);
|
|
172
91
|
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
case 2:
|
|
184
|
-
e_2 = _a.sent();
|
|
185
|
-
this.logError(e_2);
|
|
186
|
-
throw new ts_common_1.BadImplementationException("Error while updating value to path: " + path, e_2);
|
|
187
|
-
case 3: return [2 /*return*/];
|
|
188
|
-
}
|
|
189
|
-
});
|
|
92
|
+
}
|
|
93
|
+
patch(path, value) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
try {
|
|
96
|
+
return yield this.database.ref(path).update(value);
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
this.logError(e);
|
|
100
|
+
throw new ts_common_1.BadImplementationException(`Error while updating value to path: ${path}`, e);
|
|
101
|
+
}
|
|
190
102
|
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
return
|
|
196
|
-
this.logWarning("remove will be deprecated!! please use delete");
|
|
197
|
-
return [2 /*return*/, this.delete(path, assertionRegexp)];
|
|
198
|
-
});
|
|
103
|
+
}
|
|
104
|
+
remove(path, assertionRegexp = "^/.*?/.*") {
|
|
105
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
this.logWarning("remove will be deprecated!! please use delete");
|
|
107
|
+
return this.delete(path, assertionRegexp);
|
|
199
108
|
});
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
_a.sent();
|
|
228
|
-
reject();
|
|
229
|
-
return [2 /*return*/];
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
}); })];
|
|
233
|
-
}
|
|
234
|
-
catch (e) {
|
|
235
|
-
throw new ts_common_1.BadImplementationException("Error while removing path: " + path, e);
|
|
236
|
-
}
|
|
237
|
-
return [2 /*return*/];
|
|
238
|
-
});
|
|
109
|
+
}
|
|
110
|
+
delete(path, assertionRegexp = "^/.*?/.*") {
|
|
111
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
if (!path)
|
|
113
|
+
throw new ts_common_1.BadImplementationException(`Falsy value, path: '${path}'`);
|
|
114
|
+
if (!path.match(new RegExp(assertionRegexp)))
|
|
115
|
+
throw new ts_common_1.BadImplementationException(`path: '${path}' does not match assertion: '${assertionRegexp}'`);
|
|
116
|
+
try {
|
|
117
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
let val;
|
|
119
|
+
yield this.database.ref(path).transaction((a) => {
|
|
120
|
+
val = a;
|
|
121
|
+
return null;
|
|
122
|
+
}, (error, committed, snapshot) => {
|
|
123
|
+
if (error)
|
|
124
|
+
return reject();
|
|
125
|
+
// Transaction aborted with return undefined
|
|
126
|
+
if (!committed)
|
|
127
|
+
return reject();
|
|
128
|
+
resolve(val);
|
|
129
|
+
});
|
|
130
|
+
reject();
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
catch (e) {
|
|
134
|
+
throw new ts_common_1.BadImplementationException(`Error while removing path: ${path}`, e);
|
|
135
|
+
}
|
|
239
136
|
});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
}(FirebaseBaseWrapper_1.FirebaseBaseWrapper));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
243
139
|
exports.DatabaseWrapper = DatabaseWrapper;
|
|
244
140
|
//# sourceMappingURL=DatabaseWrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseWrapper.js","sourceRoot":"","sources":["../../../src/main/app-backend/database/DatabaseWrapper.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG
|
|
1
|
+
{"version":3,"file":"DatabaseWrapper.js","sourceRoot":"","sources":["../../../src/main/app-backend/database/DatabaseWrapper.ts"],"names":[],"mappings":"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"}
|