@hyper-fetch/firebase-admin 6.0.0 → 7.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.
@@ -63,8 +63,11 @@ var RealtimeDBMethods = /* @__PURE__ */ ((RealtimeDBMethods2) => {
63
63
  import { Firestore as Firestore2 } from "firebase-admin/firestore";
64
64
 
65
65
  // src/firestore/firestore.sockets.ts
66
- import { CollectionReference, DocumentSnapshot } from "firebase-admin/firestore";
67
- import { getSocketAdapterBindings } from "@hyper-fetch/sockets";
66
+ import {
67
+ CollectionReference,
68
+ DocumentSnapshot
69
+ } from "firebase-admin/firestore";
70
+ import { SocketAdapter } from "@hyper-fetch/sockets";
68
71
 
69
72
  // src/firestore/utils/result.utils.ts
70
73
  var getOrderedResultFirestore = (snapshot) => {
@@ -72,10 +75,14 @@ var getOrderedResultFirestore = (snapshot) => {
72
75
  snapshot.docs.forEach((d) => {
73
76
  result.push(__spreadProps(__spreadValues({}, d.data()), { __key: d.id }));
74
77
  });
75
- return result.length > 0 ? result : null;
78
+ return result;
76
79
  };
77
80
  var getGroupedResultFirestore = (snapshot) => {
78
- const groupedResult = { added: [], modified: [], removed: [] };
81
+ const groupedResult = {
82
+ added: [],
83
+ modified: [],
84
+ removed: []
85
+ };
79
86
  snapshot.docChanges().forEach((change) => {
80
87
  groupedResult[change.type].push(change.doc.data());
81
88
  });
@@ -88,16 +95,19 @@ var getRef = (db, fullUrl) => {
88
95
  const urlParts = withoutSurroundingSlashes.split("/").map((element, index) => {
89
96
  return index % 2 === 0 ? ["collection", element] : ["doc", element];
90
97
  });
91
- return urlParts.reduce((_db, value) => {
92
- const [method, pathPart] = value;
93
- if (method === "doc" && "doc" in _db) {
94
- return _db.doc(pathPart);
95
- }
96
- if (method === "collection" && "collection" in _db) {
97
- return _db.collection(pathPart);
98
- }
99
- return _db;
100
- }, db);
98
+ return urlParts.reduce(
99
+ (_db, value) => {
100
+ const [method, pathPart] = value;
101
+ if (method === "doc" && "doc" in _db) {
102
+ return _db.doc(pathPart);
103
+ }
104
+ if (method === "collection" && "collection" in _db) {
105
+ return _db.collection(pathPart);
106
+ }
107
+ return _db;
108
+ },
109
+ db
110
+ );
101
111
  };
102
112
 
103
113
  // src/constraints/firebase.constraints.ts
@@ -263,18 +273,10 @@ var isDocOrQuery = (fullUrl) => {
263
273
 
264
274
  // src/firestore/firestore.sockets.ts
265
275
  var firestoreAdminSockets = (database) => {
266
- return (socket) => {
267
- const {
268
- open,
269
- connecting,
270
- reconnectionAttempts,
271
- listeners,
272
- removeListener,
273
- onReconnect,
274
- onListen,
275
- onEvent,
276
- onError
277
- } = getSocketAdapterBindings(socket, { open: true });
276
+ return new SocketAdapter({
277
+ name: "firebase-admin-firestore",
278
+ defaultConnected: true
279
+ }).setConnector(({ socket, onReconnect, onListen, onEvent, onError }) => {
278
280
  const connect = () => {
279
281
  throw new Error("Connect function is not implemented for Firestore Admin socket.");
280
282
  };
@@ -282,10 +284,10 @@ var firestoreAdminSockets = (database) => {
282
284
  throw new Error("Cannot disconnect from Firestore database socket. Use 'app.delete()' instead.");
283
285
  };
284
286
  const reconnect = () => {
285
- onReconnect(disconnect, connect);
287
+ onReconnect({ disconnect, connect });
286
288
  };
287
289
  const listen = (listener, callback) => {
288
- const fullUrl = socket.url + listener.endpoint;
290
+ const fullUrl = socket.url + listener.topic;
289
291
  const { options } = listener;
290
292
  let pathRef = getRef(database, fullUrl);
291
293
  if (pathRef instanceof CollectionReference) {
@@ -305,13 +307,13 @@ var firestoreAdminSockets = (database) => {
305
307
  const groupedResult = (options == null ? void 0 : options.groupByChangeType) === true ? getGroupedResultFirestore(snapshot) : null;
306
308
  const extra = { ref: pathRef, snapshot, unsubscribe, groupedResult, status };
307
309
  callback({ data: response, extra });
308
- onEvent(listener.endpoint, response, extra);
310
+ onEvent({ topic: listener.topic, data: response, extra });
309
311
  },
310
312
  (error) => {
311
- onError(error);
313
+ onError({ error });
312
314
  }
313
315
  );
314
- unmount = onListen(listener, callback, unsubscribe);
316
+ unmount = onListen({ listener, callback, onUnmount: unsubscribe });
315
317
  clearListeners = () => {
316
318
  unsubscribe();
317
319
  unmount();
@@ -322,22 +324,83 @@ var firestoreAdminSockets = (database) => {
322
324
  throw new Error("Cannot emit from Firestore database socket.");
323
325
  });
324
326
  return {
325
- open,
326
- reconnectionAttempts,
327
- listeners,
328
- connecting,
329
- listen,
330
- removeListener,
331
- emit,
332
327
  connect,
333
328
  reconnect,
334
- disconnect
329
+ disconnect,
330
+ emit,
331
+ listen
335
332
  };
336
- };
333
+ });
337
334
  };
338
335
 
339
- // src/realtime/realtime.sockets.ts
340
- import { getSocketAdapterBindings as getSocketAdapterBindings2 } from "@hyper-fetch/sockets";
336
+ // src/firestore/firestore.methods.ts
337
+ var getFirestoreAdminMethods = ({
338
+ database,
339
+ url,
340
+ onSuccess,
341
+ onError,
342
+ onResponseStart,
343
+ onRequestStart,
344
+ onRequestEnd,
345
+ onResponseEnd
346
+ }) => {
347
+ const [cleanUrl] = url.split("?");
348
+ const methods = {
349
+ getDoc: () => __async(void 0, null, function* () {
350
+ const path = getRef(database, cleanUrl);
351
+ const snapshot = yield path.get();
352
+ const result = snapshot.data() ? __spreadProps(__spreadValues({}, snapshot.data()), { __key: snapshot.id }) : null;
353
+ const status = result ? "success" : "emptyResource";
354
+ return { result, status, extra: { ref: path, snapshot } };
355
+ }),
356
+ getDocs: (_0) => __async(void 0, [_0], function* ({
357
+ constraints = []
358
+ }) {
359
+ const path = getRef(database, cleanUrl);
360
+ const query = applyFireStoreAdminConstraints(path, constraints);
361
+ const querySnapshot = yield query.get();
362
+ const result = getOrderedResultFirestore(querySnapshot);
363
+ const status = getStatus(result);
364
+ return { result, status, extra: { ref: path, snapshot: querySnapshot } };
365
+ }),
366
+ setDoc: (_0) => __async(void 0, [_0], function* ({ data, options }) {
367
+ const path = getRef(database, cleanUrl);
368
+ const merge = (options == null ? void 0 : options.merge) === true;
369
+ const res = yield path.set(data, { merge });
370
+ return { result: res, status: "success", extra: { ref: path } };
371
+ }),
372
+ addDoc: (_0) => __async(void 0, [_0], function* ({ data }) {
373
+ const ref = getRef(database, cleanUrl);
374
+ const docRef = yield ref.add(data);
375
+ return { result: __spreadProps(__spreadValues({}, data), { __key: docRef.id }), status: "success", extra: { ref: docRef } };
376
+ }),
377
+ updateDoc: (_0) => __async(void 0, [_0], function* ({ data }) {
378
+ const path = getRef(database, cleanUrl);
379
+ yield path.update(data);
380
+ return { result: data, status: "success", extra: { ref: path } };
381
+ }),
382
+ deleteDoc: () => __async(void 0, null, function* () {
383
+ const path = getRef(database, cleanUrl);
384
+ yield path.delete();
385
+ return { result: null, status: "success", extra: { ref: path } };
386
+ })
387
+ };
388
+ return (methodName, data) => __async(void 0, null, function* () {
389
+ try {
390
+ onRequestStart();
391
+ const { result, status, extra } = yield methods[methodName](data);
392
+ onRequestEnd();
393
+ onResponseStart();
394
+ onSuccess({ data: result, status, extra });
395
+ onResponseEnd();
396
+ } catch (error) {
397
+ onRequestEnd();
398
+ onResponseStart();
399
+ onError({ error, status: "error", extra: {} });
400
+ onResponseEnd();
401
+ }
402
+ });
403
+ };
341
404
 
342
405
  // src/realtime/utils/result.utils.ts
343
406
  var getOrderedResultRealtime = (snapshot) => {
@@ -399,162 +462,21 @@ var applyRealtimeAdminConstraints = (ref, constraints) => {
399
462
  }, ref);
400
463
  };
401
464
 
402
- // src/realtime/realtime.sockets.ts
403
- var realtimeSocketsAdmin = (database) => {
404
- return (socket) => {
405
- const {
406
- open,
407
- connecting,
408
- reconnectionAttempts,
409
- listeners,
410
- removeListener,
411
- onConnect,
412
- onReconnect,
413
- onDisconnect,
414
- onListen,
415
- onOpen,
416
- onClose,
417
- onEvent,
418
- onError
419
- } = getSocketAdapterBindings2(socket, { open: true });
420
- const connect = () => {
421
- const enabled = onConnect();
422
- if (enabled) {
423
- database.goOnline();
424
- onOpen();
425
- }
426
- };
427
- const disconnect = () => {
428
- database.goOffline();
429
- onDisconnect();
430
- onClose();
431
- };
432
- const reconnect = () => {
433
- onReconnect(disconnect, connect);
434
- };
435
- const listen = (listener, callback) => {
436
- const fullUrl = socket.url + listener.endpoint;
437
- const path = database.ref(fullUrl);
438
- const { options } = listener;
439
- const onlyOnce = (options == null ? void 0 : options.onlyOnce) || false;
440
- const q = applyRealtimeAdminConstraints(path, (options == null ? void 0 : options.constraints) || []);
441
- const method = onlyOnce === true ? "once" : "on";
442
- q[method](
443
- "value",
444
- (snapshot) => {
445
- const getSnapshotData = (s) => s.val() ? __spreadProps(__spreadValues({}, s.val()), { __key: s.key }) : null;
446
- const response = isDocOrQuery(fullUrl) === "doc" ? getSnapshotData(snapshot) : getOrderedResultRealtime(snapshot);
447
- const status = getStatus(response);
448
- const extra = { ref: path, snapshot, status };
449
- callback({ data: response, extra });
450
- onEvent(listener.endpoint, response, extra);
451
- },
452
- (error) => {
453
- onError(error);
454
- }
455
- );
456
- const unsubscribe = () => q.off("value");
457
- const unmount = onListen(listener, callback, unsubscribe);
458
- const clearListeners = () => {
459
- unsubscribe();
460
- unmount();
461
- };
462
- return clearListeners;
463
- };
464
- const emit = () => __async(void 0, null, function* () {
465
- throw new Error("Cannot emit from Realtime database socket.");
466
- });
467
- return {
468
- open,
469
- reconnectionAttempts,
470
- listeners,
471
- connecting,
472
- listen,
473
- removeListener,
474
- emit,
475
- connect,
476
- reconnect,
477
- disconnect
478
- };
479
- };
480
- };
481
-
482
- // src/adapter/adapter.sockets.ts
483
- var firebaseSocketsAdminAdapter = (database) => {
484
- if (database instanceof Firestore2) {
485
- return firestoreAdminSockets(database);
486
- }
487
- return realtimeSocketsAdmin(database);
488
- };
489
-
490
- // src/adapter/adapter.ts
491
- import { getAdapterBindings } from "@hyper-fetch/core";
492
- import { Firestore as Firestore3 } from "firebase-admin/firestore";
493
-
494
- // src/firestore/firestore.methods.ts
495
- var getFirestoreAdminMethods = (request, database, url, onSuccess, onError, resolve, events) => {
496
- const [cleanUrl] = url.split("?");
497
- const methods = {
498
- getDoc: () => __async(void 0, null, function* () {
499
- const path = getRef(database, cleanUrl);
500
- const snapshot = yield path.get();
501
- const result = snapshot.data() ? __spreadProps(__spreadValues({}, snapshot.data()), { __key: snapshot.id }) : null;
502
- const status = result ? "success" : "emptyResource";
503
- return { result, status, extra: { ref: path, snapshot } };
504
- }),
505
- getDocs: (_0) => __async(void 0, [_0], function* ({ constraints = [] }) {
506
- const path = getRef(database, cleanUrl);
507
- const query = applyFireStoreAdminConstraints(path, constraints);
508
- const querySnapshot = yield query.get();
509
- const result = getOrderedResultFirestore(querySnapshot);
510
- const status = getStatus(result);
511
- return { result, status, extra: { ref: path, snapshot: querySnapshot } };
512
- }),
513
- setDoc: (_0) => __async(void 0, [_0], function* ({ data, options }) {
514
- const path = getRef(database, cleanUrl);
515
- const merge = (options == null ? void 0 : options.merge) === true;
516
- const res = yield path.set(data, { merge });
517
- return { result: res, status: "success", extra: { ref: path } };
518
- }),
519
- addDoc: (_0) => __async(void 0, [_0], function* ({ data }) {
520
- const ref = getRef(database, cleanUrl);
521
- const docRef = yield ref.add(data);
522
- return { result: __spreadProps(__spreadValues({}, data), { __key: docRef.id }), status: "success", extra: { ref: docRef } };
523
- }),
524
- updateDoc: (_0) => __async(void 0, [_0], function* ({ data }) {
525
- const path = getRef(database, cleanUrl);
526
- yield path.update(data);
527
- return { result: data, status: "success", extra: { ref: path } };
528
- }),
529
- deleteDoc: () => __async(void 0, null, function* () {
530
- const path = getRef(database, cleanUrl);
531
- yield path.delete();
532
- return { result: null, status: "success", extra: { ref: path } };
533
- })
534
- };
535
- return (methodName, data) => __async(void 0, null, function* () {
536
- try {
537
- events.onRequestStart();
538
- const { result, status, extra } = yield methods[methodName](data);
539
- events.onRequestEnd();
540
- events.onResponseStart();
541
- onSuccess(result, status, extra, resolve);
542
- events.onResponseEnd();
543
- } catch (e) {
544
- events.onRequestEnd();
545
- events.onResponseStart();
546
- onError(e, "error", {}, resolve);
547
- events.onResponseEnd();
548
- }
549
- });
550
- };
551
-
552
465
  // src/realtime/realtime.methods.ts
553
- var getRealtimeDbAdminMethods = (request, database, url, onSuccess, onError, resolve, events) => {
466
+ var getRealtimeDbAdminMethods = ({
467
+ database,
468
+ url,
469
+ onSuccess,
470
+ onError,
471
+ onResponseStart,
472
+ onRequestStart,
473
+ onRequestEnd,
474
+ onResponseEnd
475
+ }) => {
554
476
  const [fullUrl] = url.split("?");
555
477
  const path = database.ref(fullUrl);
556
478
  const methods = {
557
- get: (_0) => __async(void 0, [_0], function* ({ constraints }) {
479
+ get: (_0) => __async(void 0, [_0], function* ({ constraints = [] }) {
558
480
  const docOrQuery = isDocOrQuery(fullUrl);
559
481
  const q = applyRealtimeAdminConstraints(path, constraints);
560
482
  const snapshot = yield q.get();
@@ -581,34 +503,115 @@ var getRealtimeDbAdminMethods = (request, database, url, onSuccess, onError, res
581
503
  };
582
504
  return (methodName, data) => __async(void 0, null, function* () {
583
505
  try {
584
- events.onRequestStart();
506
+ onRequestStart();
585
507
  const { result, status, extra } = yield methods[methodName](data);
586
- events.onRequestEnd();
587
- events.onResponseStart();
588
- onSuccess(result, status, extra, resolve);
589
- events.onResponseEnd();
590
- } catch (e) {
591
- events.onRequestEnd();
592
- events.onResponseStart();
593
- onError(e, "error", {}, resolve);
594
- events.onResponseEnd();
508
+ onRequestEnd();
509
+ onResponseStart();
510
+ onSuccess({ data: result, status, extra });
511
+ onResponseEnd();
512
+ } catch (error) {
513
+ onRequestEnd();
514
+ onResponseStart();
515
+ onError({ error, status: "error", extra: {} });
516
+ onResponseEnd();
595
517
  }
596
518
  });
597
519
  };
598
520
 
521
+ // src/realtime/realtime.sockets.ts
522
+ import { SocketAdapter as SocketAdapter2 } from "@hyper-fetch/sockets";
523
+ var realtimeSocketsAdmin = (database) => {
524
+ return new SocketAdapter2({
525
+ name: "firebase-admin-realtime",
526
+ defaultConnected: true
527
+ }).setConnector(
528
+ ({ socket, onReconnect, onConnect, onConnected, onDisconnect, onDisconnected, onListen, onEvent, onError }) => {
529
+ const connect = () => __async(void 0, null, function* () {
530
+ const enabled = onConnect();
531
+ if (enabled) {
532
+ database.goOnline();
533
+ onConnected();
534
+ }
535
+ });
536
+ const disconnect = () => __async(void 0, null, function* () {
537
+ database.goOffline();
538
+ onDisconnect();
539
+ onDisconnected();
540
+ });
541
+ const reconnect = () => {
542
+ onReconnect({ disconnect, connect });
543
+ };
544
+ const listen = (listener, callback) => {
545
+ const fullUrl = socket.url + listener.topic;
546
+ const path = database.ref(fullUrl);
547
+ const { options } = listener;
548
+ const onlyOnce = (options == null ? void 0 : options.onlyOnce) || false;
549
+ const q = applyRealtimeAdminConstraints(path, (options == null ? void 0 : options.constraints) || []);
550
+ const method = onlyOnce === true ? "once" : "on";
551
+ q[method](
552
+ "value",
553
+ (snapshot) => {
554
+ const getSnapshotData = (s) => s.val() ? __spreadProps(__spreadValues({}, s.val()), { __key: s.key }) : null;
555
+ const response = isDocOrQuery(fullUrl) === "doc" ? getSnapshotData(snapshot) : getOrderedResultRealtime(snapshot);
556
+ const status = getStatus(response);
557
+ const extra = { ref: path, snapshot, status };
558
+ callback({ data: response, extra });
559
+ onEvent({ topic: listener.topic, data: response, extra });
560
+ },
561
+ (error) => {
562
+ onError({ error });
563
+ }
564
+ );
565
+ const unsubscribe = () => q.off("value");
566
+ const unmount = onListen({ listener, callback, onUnmount: unsubscribe });
567
+ const clearListeners = () => {
568
+ unsubscribe();
569
+ unmount();
570
+ };
571
+ return clearListeners;
572
+ };
573
+ const emit = () => __async(void 0, null, function* () {
574
+ throw new Error("Cannot emit from Realtime database socket.");
575
+ });
576
+ return {
577
+ connect,
578
+ reconnect,
579
+ disconnect,
580
+ listen,
581
+ emit
582
+ };
583
+ }
584
+ );
585
+ };
586
+
587
+ // src/adapter/adapter.sockets.ts
588
+ var FirebaseSocketsAdminAdapter = (database) => {
589
+ if (database instanceof Firestore2) {
590
+ return firestoreAdminSockets(database);
591
+ }
592
+ return realtimeSocketsAdmin(database);
593
+ };
594
+
599
595
  // src/adapter/adapter.ts
600
- var firebaseAdminAdapter = (database) => () => {
601
- const adapter = (request, requestId) => __async(void 0, null, function* () {
602
- const { fullUrl, onSuccess, onError, onRequestStart, onResponseEnd, onResponseStart, onRequestEnd } = yield getAdapterBindings(request, requestId, "error", {});
603
- return new Promise((resolve) => {
596
+ import { Adapter } from "@hyper-fetch/core";
597
+ import { Firestore as Firestore3 } from "firebase-admin/firestore";
598
+ var FirebaseAdminAdapter = (database) => {
599
+ return new Adapter({
600
+ name: "firebase-admin",
601
+ defaultMethod: "getDoc",
602
+ defaultExtra: {},
603
+ systemErrorStatus: "error",
604
+ systemErrorExtra: {}
605
+ }).setFetcher(
606
+ (_0) => __async(void 0, [_0], function* ({ request, onSuccess, onError, onResponseStart, onResponseEnd, onRequestStart, onRequestEnd }) {
607
+ const fullUrl = `${request.client.url}${request.endpoint}`;
604
608
  if (database instanceof Firestore3) {
605
- const {
606
- method = "getDocs" /* getDocs */,
607
- queryParams,
608
- data,
609
- options
610
- } = request;
611
- const availableMethods = getFirestoreAdminMethods(request, database, fullUrl, onSuccess, onError, resolve, {
609
+ const { method = "getDocs" /* getDocs */, queryParams, payload, options } = request;
610
+ const availableMethods = getFirestoreAdminMethods({
611
+ database,
612
+ url: fullUrl,
613
+ onSuccess,
614
+ onError,
612
615
  onRequestStart,
613
616
  onResponseEnd,
614
617
  onResponseStart,
@@ -619,17 +622,16 @@ var firebaseAdminAdapter = (database) => () => {
619
622
  }
620
623
  availableMethods(method, {
621
624
  constraints: (queryParams == null ? void 0 : queryParams.constraints) ? queryParams.constraints : [],
622
- data,
625
+ payload,
623
626
  options
624
627
  });
625
628
  } else {
626
- const {
627
- method = "get" /* get */,
628
- queryParams,
629
- data,
630
- options
631
- } = request;
632
- const availableMethods = getRealtimeDbAdminMethods(request, database, fullUrl, onSuccess, onError, resolve, {
629
+ const { method = "get" /* get */, queryParams, payload, options } = request;
630
+ const availableMethods = getRealtimeDbAdminMethods({
631
+ database,
632
+ url: fullUrl,
633
+ onSuccess,
634
+ onError,
633
635
  onRequestStart,
634
636
  onResponseEnd,
635
637
  onResponseStart,
@@ -641,12 +643,11 @@ var firebaseAdminAdapter = (database) => () => {
641
643
  availableMethods(method, {
642
644
  constraints: (queryParams == null ? void 0 : queryParams.constraints) ? queryParams.constraints : [],
643
645
  options,
644
- data
646
+ payload
645
647
  });
646
648
  }
647
- });
648
- });
649
- return adapter;
649
+ })
650
+ );
650
651
  };
651
652
  export {
652
653
  $endAt,
@@ -662,6 +663,8 @@ export {
662
663
  $startAfter,
663
664
  $startAt,
664
665
  $where,
666
+ FirebaseAdminAdapter,
667
+ FirebaseSocketsAdminAdapter,
665
668
  FirestoreMethods,
666
669
  FirestoreQueryConstraints,
667
670
  RealtimeDBMethods,
@@ -671,8 +674,6 @@ export {
671
674
  applyFireStoreAdminConstraints,
672
675
  applyRealtimeAdminConstraint,
673
676
  applyRealtimeAdminConstraints,
674
- firebaseAdminAdapter,
675
- firebaseSocketsAdminAdapter,
676
677
  firestoreAdminSockets,
677
678
  getFirestoreAdminMethods,
678
679
  getGroupedResultFirestore,
@@ -682,4 +683,4 @@ export {
682
683
  getRef,
683
684
  realtimeSocketsAdmin
684
685
  };
685
- //# sourceMappingURL=index.esm.js.map
686
+ //# sourceMappingURL=index.js.map