edmaxlabs-core 1.2.4 → 1.3.4
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.cjs +128 -110
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -9
- package/dist/index.d.ts +17 -9
- package/dist/index.mjs +127 -110
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
ArraySnapshot: () => ArraySnapshot,
|
|
24
|
+
Authentication: () => Authentication,
|
|
24
25
|
Credentials: () => Credentials,
|
|
25
26
|
DocumentSnapshot: () => DocumentSnapshot,
|
|
26
27
|
StorageSnapshot: () => StorageSnapshot,
|
|
@@ -110,112 +111,18 @@ var HttpsRequest = class {
|
|
|
110
111
|
}
|
|
111
112
|
};
|
|
112
113
|
|
|
113
|
-
// src/utils/waiter.ts
|
|
114
|
-
var listeners = /* @__PURE__ */ new Map();
|
|
115
|
-
var waiters = /* @__PURE__ */ new Map();
|
|
116
|
-
function emitValue(key, value) {
|
|
117
|
-
const keyListeners = listeners.get(key) || [];
|
|
118
|
-
keyListeners.forEach((listener) => listener(value));
|
|
119
|
-
const keyWaiters = waiters.get(key) || [];
|
|
120
|
-
keyWaiters.forEach((resolve) => resolve(value));
|
|
121
|
-
waiters.delete(key);
|
|
122
|
-
}
|
|
123
|
-
function onValue(key, callback) {
|
|
124
|
-
const current = listeners.get(key) || [];
|
|
125
|
-
current.push(callback);
|
|
126
|
-
listeners.set(key, current);
|
|
127
|
-
return () => {
|
|
128
|
-
const next = (listeners.get(key) || []).filter((cb) => cb !== callback);
|
|
129
|
-
listeners.set(key, next);
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
|
|
133
114
|
// src/authentication/Authentication.ts
|
|
134
|
-
var
|
|
115
|
+
var _Authentication = class _Authentication {
|
|
135
116
|
constructor() {
|
|
136
|
-
this.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (!credentials) {
|
|
146
|
-
ldb.removeItem("eauth");
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
ldb.setItem("eauth", JSON.stringify(credentials));
|
|
150
|
-
emitValue("credentials", credentials);
|
|
151
|
-
};
|
|
152
|
-
this.currentUser = () => {
|
|
153
|
-
const ldb = localStorage;
|
|
154
|
-
const data = ldb.getItem("eauth");
|
|
155
|
-
if (data === void 0 || data === null) {
|
|
156
|
-
return void 0;
|
|
157
|
-
}
|
|
158
|
-
const result = JSON.parse(data ?? "{}");
|
|
159
|
-
return Credentials.fromMap(result);
|
|
160
|
-
};
|
|
161
|
-
this.authState = ({
|
|
162
|
-
onChange,
|
|
163
|
-
onSignOut,
|
|
164
|
-
onDeleted
|
|
165
|
-
}) => {
|
|
166
|
-
let userDocUnsubscribe;
|
|
167
|
-
const attachUserListener = (creds) => {
|
|
168
|
-
if (userDocUnsubscribe) {
|
|
169
|
-
userDocUnsubscribe();
|
|
170
|
-
userDocUnsubscribe = void 0;
|
|
171
|
-
}
|
|
172
|
-
if (!creds) {
|
|
173
|
-
this.eUser = void 0;
|
|
174
|
-
onSignOut?.();
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
const userRef = this.app?.database.collection("users").doc(creds.uid);
|
|
178
|
-
if (!userRef)
|
|
179
|
-
return;
|
|
180
|
-
userDocUnsubscribe = userRef.onSnapshot(
|
|
181
|
-
(snapshot, change) => {
|
|
182
|
-
if (change === "insert" || change === "update") {
|
|
183
|
-
if (snapshot.data.logged === "false" || snapshot.data.logged === false) {
|
|
184
|
-
this.eUser = void 0;
|
|
185
|
-
this.saveCredentials(null);
|
|
186
|
-
onSignOut?.();
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const result = Credentials.fromMap(snapshot.toMap());
|
|
190
|
-
this.eUser = result;
|
|
191
|
-
this.saveCredentials(result);
|
|
192
|
-
onChange(result);
|
|
193
|
-
}
|
|
194
|
-
if (change === "delete") {
|
|
195
|
-
this.eUser = void 0;
|
|
196
|
-
this.saveCredentials(null);
|
|
197
|
-
onSignOut?.();
|
|
198
|
-
onDeleted?.();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
};
|
|
203
|
-
const current = this.currentUser();
|
|
204
|
-
if (current) {
|
|
205
|
-
this.eUser = current;
|
|
206
|
-
onChange(current);
|
|
207
|
-
attachUserListener(current);
|
|
208
|
-
}
|
|
209
|
-
const unsubscribeCredentials = onValue(
|
|
210
|
-
"credentials",
|
|
211
|
-
(creds) => {
|
|
212
|
-
attachUserListener(creds);
|
|
213
|
-
}
|
|
214
|
-
);
|
|
215
|
-
return () => {
|
|
216
|
-
unsubscribeCredentials?.();
|
|
217
|
-
userDocUnsubscribe?.();
|
|
218
|
-
};
|
|
117
|
+
this.eventListeners = /* @__PURE__ */ new Map();
|
|
118
|
+
this.eventWaiters = /* @__PURE__ */ new Map();
|
|
119
|
+
this.unsubscribers = /* @__PURE__ */ new Set();
|
|
120
|
+
this.isSameCredentials = (a, b) => {
|
|
121
|
+
if (!a && !b)
|
|
122
|
+
return true;
|
|
123
|
+
if (!a || !b)
|
|
124
|
+
return false;
|
|
125
|
+
return JSON.stringify(a.toMap()) === JSON.stringify(b.toMap());
|
|
219
126
|
};
|
|
220
127
|
this.createUserWithEmailAndPassword = async ({
|
|
221
128
|
email,
|
|
@@ -267,14 +174,12 @@ var Authentication = class {
|
|
|
267
174
|
throw new Error("User Not Found.");
|
|
268
175
|
}
|
|
269
176
|
const _data = data[0];
|
|
270
|
-
console.log("Signing ...");
|
|
271
|
-
this.eUser = Credentials.fromMap(_data);
|
|
272
|
-
this.saveCredentials(this.eUser);
|
|
273
177
|
await db?.collection("users").doc(data[0].id).update({
|
|
274
178
|
logged: true,
|
|
275
179
|
lastLogged: Date.now()
|
|
276
180
|
});
|
|
277
|
-
|
|
181
|
+
this.eUser = Credentials.fromMap(_data);
|
|
182
|
+
this.saveCredentials(this.eUser);
|
|
278
183
|
return Credentials.fromMap(data[0].toMap());
|
|
279
184
|
};
|
|
280
185
|
this.deleteUser = async () => {
|
|
@@ -315,15 +220,127 @@ var Authentication = class {
|
|
|
315
220
|
}).sendRequest();
|
|
316
221
|
return res;
|
|
317
222
|
};
|
|
223
|
+
if (_Authentication.instance)
|
|
224
|
+
return _Authentication.instance;
|
|
318
225
|
this.client = EdmaxLabs.instance;
|
|
319
226
|
this.app = new EdmaxLabs({
|
|
320
227
|
token: "auth",
|
|
321
228
|
project: this.client.getAuth.project
|
|
322
229
|
});
|
|
323
|
-
this
|
|
230
|
+
_Authentication.instance = this;
|
|
231
|
+
this.restoreSession();
|
|
232
|
+
}
|
|
233
|
+
restoreSession() {
|
|
234
|
+
const saved = this.currentUser();
|
|
235
|
+
if (saved) {
|
|
236
|
+
this.eUser = saved;
|
|
237
|
+
this.emitValue("creds", saved);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Better singleton
|
|
241
|
+
static getInstance() {
|
|
242
|
+
if (!_Authentication.instance) {
|
|
243
|
+
_Authentication.instance = new _Authentication();
|
|
244
|
+
}
|
|
245
|
+
return _Authentication.instance;
|
|
246
|
+
}
|
|
247
|
+
emitValue(key, value) {
|
|
248
|
+
const listeners = this.eventListeners.get(key) || [];
|
|
249
|
+
listeners.forEach((l) => l(value));
|
|
250
|
+
const waiters = this.eventWaiters.get(key) || [];
|
|
251
|
+
waiters.forEach((resolve) => resolve(value));
|
|
252
|
+
this.eventWaiters.delete(key);
|
|
253
|
+
}
|
|
254
|
+
onValue(key, callback) {
|
|
255
|
+
const listeners = this.eventListeners.get(key) || [];
|
|
256
|
+
listeners.push(callback);
|
|
257
|
+
this.eventListeners.set(key, listeners);
|
|
258
|
+
return () => {
|
|
259
|
+
const filtered = listeners.filter((cb) => cb !== callback);
|
|
260
|
+
this.eventListeners.set(key, filtered);
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
currentUser() {
|
|
264
|
+
const data = localStorage.getItem("eauth");
|
|
265
|
+
if (!data)
|
|
266
|
+
return null;
|
|
267
|
+
try {
|
|
268
|
+
return Credentials.fromMap(JSON.parse(data));
|
|
269
|
+
} catch {
|
|
270
|
+
localStorage.removeItem("eauth");
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
saveCredentials(credentials) {
|
|
275
|
+
if (!credentials) {
|
|
276
|
+
localStorage.removeItem("eauth");
|
|
277
|
+
this.eUser = null;
|
|
278
|
+
this.emitValue("creds", null);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
localStorage.setItem("eauth", JSON.stringify(credentials.toMap()));
|
|
282
|
+
this.eUser = credentials;
|
|
283
|
+
this.emitValue("creds", credentials);
|
|
284
|
+
}
|
|
285
|
+
// Main auth state listener - should be called ONCE at app root
|
|
286
|
+
authState({
|
|
287
|
+
onChange,
|
|
288
|
+
onSignOut,
|
|
289
|
+
onDeleted
|
|
290
|
+
}) {
|
|
291
|
+
let userDocUnsubscribe;
|
|
292
|
+
const handleCredsChange = (creds) => {
|
|
293
|
+
if (userDocUnsubscribe) {
|
|
294
|
+
userDocUnsubscribe();
|
|
295
|
+
userDocUnsubscribe = void 0;
|
|
296
|
+
}
|
|
297
|
+
if (!creds) {
|
|
298
|
+
this.eUser = null;
|
|
299
|
+
onSignOut?.();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const userRef = this.app?.database.collection("users").doc(creds.uid);
|
|
303
|
+
if (!userRef)
|
|
304
|
+
return;
|
|
305
|
+
userDocUnsubscribe = userRef.onSnapshot(
|
|
306
|
+
(snapshot, change) => {
|
|
307
|
+
if (change === "delete") {
|
|
308
|
+
this.saveCredentials(null);
|
|
309
|
+
onSignOut?.();
|
|
310
|
+
onDeleted?.();
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (change === "insert" || change === "update") {
|
|
314
|
+
if (snapshot.data.logged === false || snapshot.data.logged === "false") {
|
|
315
|
+
this.saveCredentials(null);
|
|
316
|
+
onSignOut?.();
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const newCreds = Credentials.fromMap(snapshot.toMap());
|
|
320
|
+
if (!this.isSameCredentials(this.eUser, newCreds)) {
|
|
321
|
+
this.eUser = newCreds;
|
|
322
|
+
this.saveCredentials(newCreds);
|
|
323
|
+
onChange(newCreds);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
);
|
|
328
|
+
};
|
|
329
|
+
const initialUser = this.currentUser();
|
|
330
|
+
if (initialUser) {
|
|
331
|
+
this.eUser = initialUser;
|
|
332
|
+
onChange(initialUser);
|
|
333
|
+
}
|
|
334
|
+
handleCredsChange(initialUser);
|
|
335
|
+
const credsUnsub = this.onValue("creds", handleCredsChange);
|
|
336
|
+
return () => {
|
|
337
|
+
credsUnsub();
|
|
338
|
+
userDocUnsubscribe?.();
|
|
339
|
+
};
|
|
324
340
|
}
|
|
325
341
|
};
|
|
326
|
-
|
|
342
|
+
_Authentication.instance = null;
|
|
343
|
+
var Authentication = _Authentication;
|
|
327
344
|
|
|
328
345
|
// src/database/Timestamp.ts
|
|
329
346
|
var Timestamp = class _Timestamp {
|
|
@@ -1672,6 +1689,7 @@ var src_default = EdmaxLabs;
|
|
|
1672
1689
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1673
1690
|
0 && (module.exports = {
|
|
1674
1691
|
ArraySnapshot,
|
|
1692
|
+
Authentication,
|
|
1675
1693
|
Credentials,
|
|
1676
1694
|
DocumentSnapshot,
|
|
1677
1695
|
StorageSnapshot,
|