@hyper-fetch/firebase-admin 6.0.1 → 7.0.1

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/adapter/types/adapter.firestore.types.ts", "../src/adapter/types/adapter.realtime.types.ts", "../src/adapter/adapter.sockets.ts", "../src/firestore/firestore.sockets.ts", "../src/firestore/utils/result.utils.ts", "../src/firestore/utils/ref.utils.ts", "../src/constraints/firebase.constraints.ts", "../src/firestore/utils/constraints.utils.ts", "../src/utils/misc.ts", "../src/firestore/firestore.methods.ts", "../src/realtime/utils/result.utils.ts", "../src/realtime/utils/constraints.utils.ts", "../src/realtime/realtime.methods.ts", "../src/realtime/realtime.sockets.ts", "../src/adapter/adapter.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/naming-convention */\nimport { Adapter } from \"@hyper-fetch/core\";\nimport {\n Unsubscribe as FirestoreUnsubscribe,\n CollectionReference,\n DocumentReference,\n DocumentSnapshot,\n QuerySnapshot,\n} from \"firebase/firestore\";\nimport { SocketAdapter } from \"@hyper-fetch/sockets\";\n\nimport {\n FirestoreConstraintsUnion,\n FirestorePermittedMethods,\n PermittedConstraints,\n SharedQueryConstraints,\n} from \"constraints\";\n\nexport type FirestoreSocketAdapterType = SocketAdapter<\n never,\n FirestoreOnSnapshotExtra,\n { groupByChangeType?: boolean } & FirestoreQueryParams\n>;\n\nexport type FirestoreAdapterType =\n | Adapter<\n Record<string, never>,\n \"getDoc\",\n FirestoreStatuses,\n FirestoreExtra,\n FirestoreQueryParams,\n FirestoreQueryParams\n >\n | Adapter<\n Record<string, never>,\n \"getDocs\",\n FirestoreStatuses,\n FirestoreGetDocsExtra,\n FirestoreQueryParams,\n FirestoreQueryParams\n >\n | Adapter<{ merge: boolean }, \"setDoc\", FirestoreStatuses, FirestoreRefOnlyExtra, Record<string, never>, undefined>\n | Adapter<\n Record<string, never>,\n \"updateDoc\" | \"addDoc\" | \"deleteDoc\" | \"setDoc\",\n FirestoreStatuses,\n FirestoreRefOnlyExtra,\n Record<string, never>,\n undefined\n >;\n\nexport type FirestoreQueryParams = {\n constraints?: PermittedConstraints<FirestorePermittedMethods, FirestoreConstraintsUnion | SharedQueryConstraints>[];\n};\n\nexport enum FirestoreMethods {\n addDoc = \"addDoc\",\n getDoc = \"getDoc\",\n getDocs = \"getDocs\",\n setDoc = \"setDoc\",\n updateDoc = \"updateDoc\",\n deleteDoc = \"deleteDoc\",\n}\n\nexport type FirestoreMethodsUnion =\n | FirestoreMethods.addDoc\n | FirestoreMethods.getDoc\n | FirestoreMethods.getDocs\n | FirestoreMethods.setDoc\n | FirestoreMethods.updateDoc\n | FirestoreMethods.deleteDoc;\n\nexport type FirestoreExtra = {\n ref?: DocumentReference;\n snapshot?: DocumentSnapshot;\n};\n\nexport type FirestoreOnSnapshotExtra = {\n ref?: DocumentReference | CollectionReference;\n snapshot?: DocumentSnapshot;\n unsubscribe?: FirestoreUnsubscribe;\n groupedResult?: { added: DocumentSnapshot[]; modified: DocumentSnapshot[]; removed: DocumentSnapshot[] };\n};\n\nexport type FirestoreGetDocsExtra = {\n ref?: CollectionReference;\n snapshot?: QuerySnapshot;\n};\n\nexport type FirestoreRefOnlyExtra = {\n ref?: DocumentReference;\n};\n\nexport type FirestoreStatuses = \"success\" | \"error\" | \"emptyResource\";\n", "/* eslint-disable @typescript-eslint/naming-convention */\nimport { Adapter } from \"@hyper-fetch/core\";\nimport { DatabaseReference, DataSnapshot } from \"firebase/database\";\nimport { SocketAdapter } from \"@hyper-fetch/sockets\";\n\nimport {\n PermittedConstraints,\n RealtimeConstraintsUnion,\n RealtimePermittedMethods,\n SharedQueryConstraints,\n} from \"constraints\";\n\nexport type RealtimeSocketAdapterType = SocketAdapter<\n never,\n RealtimeDbOnValueMethodExtra,\n { onlyOnce?: boolean } & RealtimeDBQueryParams\n>;\n\nexport type RealtimeDbAdapterType =\n | Adapter<\n DefaultRealtimeDBAdapterOptions,\n \"get\",\n RealtimeDBStatuses,\n RealtimeDbGetMethodExtra,\n RealtimeDBQueryParams,\n RealtimeDBQueryParams\n >\n | Adapter<\n DefaultRealtimeDBAdapterOptions,\n \"push\",\n RealtimeDBStatuses,\n RealtimeDbPushMethodExtra,\n Record<string, never>,\n undefined\n >\n | Adapter<\n DefaultRealtimeDBAdapterOptions,\n \"set\" | \"update\" | \"remove\",\n RealtimeDBStatuses,\n RealtimeDbDefaultExtra,\n Record<string, never>,\n undefined\n >;\n\nexport type DefaultRealtimeDBAdapterOptions = {\n priority?: number;\n};\n\nexport enum RealtimeDBMethods {\n set = \"set\",\n push = \"push\",\n update = \"update\",\n get = \"get\",\n remove = \"remove\",\n}\n\nexport type RealtimeDBMethodsUnion =\n | RealtimeDBMethods.set\n | RealtimeDBMethods.push\n | RealtimeDBMethods.update\n | RealtimeDBMethods.get\n | RealtimeDBMethods.remove;\n\nexport type RealtimeDBStatuses = \"success\" | \"error\" | \"emptyResource\";\nexport type RealtimeDbOnValueMethodExtra = {\n ref: DatabaseReference;\n snapshot: DataSnapshot;\n};\n\nexport type RealtimeDbGetMethodExtra = {\n ref: DatabaseReference;\n snapshot: DataSnapshot;\n};\n\nexport type RealtimeDbDefaultExtra = {\n ref: DatabaseReference;\n};\n\nexport type RealtimeDbPushMethodExtra = {\n ref: DatabaseReference;\n key: string;\n};\n\nexport type RealtimeDBQueryParams = {\n constraints?: PermittedConstraints<RealtimePermittedMethods, RealtimeConstraintsUnion | SharedQueryConstraints>[];\n};\n", "import { Firestore } from \"firebase-admin/firestore\";\n\nimport { FirebaseAdminDBTypes, FirebaseAdminSocketAdapterTypes } from \"./types\";\nimport { firestoreAdminSockets } from \"../firestore\";\nimport { realtimeSocketsAdmin } from \"../realtime\";\n\nexport const FirebaseSocketsAdminAdapter = <T extends FirebaseAdminDBTypes>(\n database: T,\n): FirebaseAdminSocketAdapterTypes<T> => {\n if (database instanceof Firestore) {\n return firestoreAdminSockets(database) as unknown as FirebaseAdminSocketAdapterTypes<T>;\n }\n return realtimeSocketsAdmin(database) as unknown as FirebaseAdminSocketAdapterTypes<T>;\n};\n", "import {\n CollectionReference,\n DocumentReference,\n DocumentSnapshot,\n Firestore,\n Query,\n QuerySnapshot,\n} from \"firebase-admin/firestore\";\nimport { SocketAdapter } from \"@hyper-fetch/sockets\";\n\nimport { getGroupedResultFirestore, getOrderedResultFirestore, getRef, applyFireStoreAdminConstraints } from \"./utils\";\nimport { FirestoreAdminSocketAdapterType } from \"adapter\";\nimport { getStatus } from \"utils\";\n\nexport const firestoreAdminSockets = (database: Firestore) => {\n return (\n new SocketAdapter({\n name: \"firebase-admin-firestore\",\n defaultConnected: true,\n }) as unknown as FirestoreAdminSocketAdapterType\n ).setConnector(({ socket, onReconnect, onListen, onEvent, onError }) => {\n const connect = () => {\n throw new Error(\"Connect function is not implemented for Firestore Admin socket.\");\n };\n\n const disconnect = () => {\n throw new Error(\"Cannot disconnect from Firestore database socket. Use 'app.delete()' instead.\");\n };\n\n const reconnect = () => {\n onReconnect({ disconnect, connect });\n };\n\n const listen: FirestoreAdminSocketAdapterType[\"listen\"] = (listener, callback) => {\n const fullUrl = socket.url + listener.topic;\n const { options } = listener;\n let pathRef: DocumentReference | Query = getRef(database, fullUrl);\n if (pathRef instanceof CollectionReference) {\n pathRef = applyFireStoreAdminConstraints(pathRef, options?.constraints || []);\n }\n let unsubscribe = () => {};\n let unmount = () => {};\n let clearListeners = () => {};\n\n unsubscribe = pathRef.onSnapshot(\n (snapshot) => {\n const getSnapshotData = (s: DocumentSnapshot) => (s.data() ? { ...s.data(), __key: s.id } : null);\n const response =\n snapshot instanceof DocumentSnapshot\n ? getSnapshotData(snapshot)\n : getOrderedResultFirestore(snapshot as QuerySnapshot);\n const status = getStatus(response);\n const groupedResult =\n options?.groupByChangeType === true ? getGroupedResultFirestore(snapshot as QuerySnapshot) : null;\n const extra = { ref: pathRef, snapshot, unsubscribe, groupedResult, status };\n callback({ data: response, extra });\n onEvent({ topic: listener.topic, data: response, extra });\n },\n (error) => {\n onError({ error });\n },\n );\n unmount = onListen({ listener, callback, onUnmount: unsubscribe });\n clearListeners = () => {\n unsubscribe();\n unmount();\n };\n\n return clearListeners;\n };\n\n const emit = async () => {\n throw new Error(\"Cannot emit from Firestore database socket.\");\n };\n\n return {\n connect,\n reconnect,\n disconnect,\n emit,\n listen,\n };\n });\n};\n", "import { QuerySnapshot, DocumentData } from \"firebase-admin/firestore\";\n\nexport const getOrderedResultFirestore = (snapshot: QuerySnapshot) => {\n const result: (DocumentData & { __key: string })[] = [];\n snapshot.docs.forEach((d) => {\n result.push({ ...d.data(), __key: d.id });\n });\n return result;\n};\n\nexport const getGroupedResultFirestore = (snapshot: QuerySnapshot) => {\n const groupedResult: { added: DocumentData[]; modified: DocumentData[]; removed: DocumentData[] } = {\n added: [],\n modified: [],\n removed: [],\n };\n snapshot.docChanges().forEach((change) => {\n groupedResult[change.type].push(change.doc.data());\n });\n return [...groupedResult.added, ...groupedResult.modified, ...groupedResult.removed].length > 0\n ? groupedResult\n : null;\n};\n", "import { CollectionReference, DocumentReference, Firestore } from \"firebase-admin/firestore\";\n\nexport const getRef = (db: Firestore, fullUrl: string) => {\n const withoutSurroundingSlashes = fullUrl.replace(/^\\/|\\/$/g, \"\");\n const urlParts = withoutSurroundingSlashes.split(\"/\").map((element, index) => {\n return index % 2 === 0 ? [\"collection\", element] : [\"doc\", element];\n });\n\n return urlParts.reduce(\n (_db, value) => {\n const [method, pathPart] = value;\n if (method === \"doc\" && \"doc\" in _db) {\n return _db.doc(pathPart);\n }\n if (method === \"collection\" && \"collection\" in _db) {\n return _db.collection(pathPart);\n }\n return _db;\n },\n db as unknown as Firestore | CollectionReference | DocumentReference,\n ) as CollectionReference | DocumentReference;\n};\n", "import { OrderByDirection, WhereFilterOp } from \"firebase-admin/firestore\";\n\nexport enum SharedQueryConstraints {\n START_AT = \"startAt\",\n START_AFTER = \"startAfter\",\n END_AT = \"endAt\",\n END_BEFORE = \"endBefore\",\n}\nexport enum RealtimeQueryConstraints {\n ORDER_BY_CHILD = \"orderByChild\",\n ORDER_BY_KEY = \"orderByKey\",\n ORDER_BY_VALUE = \"orderByValue\",\n LIMIT_TO_FIRST = \"limitToFirst\",\n LIMIT_TO_LAST = \"limitToLast\",\n EQUAL_TO = \"equalTo\",\n}\n\nexport enum FirestoreQueryConstraints {\n WHERE = \"where\",\n ORDER_BY = \"orderBy\",\n LIMIT = \"limit\",\n}\n\nexport const $where = (fieldPath: string, opStr: WhereFilterOp, value: any) => {\n return {\n toString: () => `${FirestoreQueryConstraints.WHERE}_${fieldPath}${opStr}${value}`,\n type: FirestoreQueryConstraints.WHERE as const,\n values: [fieldPath, opStr, value],\n };\n};\n\nexport const $orderBy = (fieldPath: string, directionStr?: OrderByDirection) => {\n return {\n toString: () => `${FirestoreQueryConstraints.ORDER_BY}_${fieldPath}_${directionStr || \"\"}`,\n type: FirestoreQueryConstraints.ORDER_BY as const,\n values: [fieldPath, directionStr],\n };\n};\n\nexport const $limit = (num: number) => {\n return {\n toString: () => `${FirestoreQueryConstraints.LIMIT}_${num}`,\n type: FirestoreQueryConstraints.LIMIT as const,\n values: [num],\n };\n};\n\nconst startEndConstraintsImpl = (constraintType: SharedQueryConstraints) => {\n return (...docOrFields: any[]) => {\n if (docOrFields.length === 1 && docOrFields[0].query) {\n return {\n toString: () => `${constraintType}_${docOrFields[0].query?._query?.memoizedTarget?.memoizedCanonicalId}`,\n type: constraintType,\n values: [docOrFields],\n };\n }\n return {\n toString: () => `${constraintType}_${docOrFields}`,\n type: constraintType,\n values: [docOrFields],\n };\n };\n};\n\nexport const $startAt = startEndConstraintsImpl(SharedQueryConstraints.START_AT as const);\nexport const $startAfter = startEndConstraintsImpl(SharedQueryConstraints.START_AFTER as const);\n\nexport const $endAt = startEndConstraintsImpl(SharedQueryConstraints.END_AT as const);\nexport const $endBefore = startEndConstraintsImpl(SharedQueryConstraints.END_BEFORE as const);\n\nexport const $orderByChild = (path: string) => {\n return {\n toString: () => `${RealtimeQueryConstraints.ORDER_BY_CHILD}_${path}`,\n type: RealtimeQueryConstraints.ORDER_BY_CHILD as const,\n values: [path],\n };\n};\n\nexport const $orderByKey = () => {\n return {\n toString: () => `${RealtimeQueryConstraints.ORDER_BY_KEY}`,\n type: RealtimeQueryConstraints.ORDER_BY_KEY as const,\n values: [],\n };\n};\n\nexport const $orderByValue = () => {\n return {\n toString: () => `${RealtimeQueryConstraints.ORDER_BY_VALUE}`,\n type: RealtimeQueryConstraints.ORDER_BY_VALUE as const,\n values: [],\n };\n};\n\nexport const $limitToFirst = (num: number) => {\n return {\n toString: () => `${RealtimeQueryConstraints.LIMIT_TO_FIRST}_${num}`,\n type: RealtimeQueryConstraints.LIMIT_TO_FIRST as const,\n values: [num],\n };\n};\n\nexport const $limitToLast = (num: number) => {\n return {\n toString: () => `${RealtimeQueryConstraints.LIMIT_TO_LAST}_${num}`,\n type: RealtimeQueryConstraints.LIMIT_TO_LAST as const,\n values: [num],\n };\n};\n\nexport const $equalTo = (value: any) => {\n return {\n toString: () => `${RealtimeQueryConstraints.LIMIT_TO_LAST}_${value}`,\n type: RealtimeQueryConstraints.EQUAL_TO as const,\n values: [value],\n };\n};\n", "import { Query } from \"firebase-admin/firestore\";\nimport { OrderByDirection } from \"firebase/firestore\";\n\nimport { FirestorePermittedMethods, FirestoreQueryConstraints, SharedQueryConstraints } from \"../../constraints\";\n\nexport const applyFireStoreAdminConstraint = (collectionRef: Query, { type, values }: FirestorePermittedMethods) => {\n switch (type) {\n case FirestoreQueryConstraints.WHERE: {\n const [fieldPath, strOp, value] = values;\n return collectionRef.where(fieldPath, strOp, value);\n }\n case FirestoreQueryConstraints.ORDER_BY: {\n const [field, ord] = values;\n return collectionRef.orderBy(field!, ord as OrderByDirection);\n }\n case FirestoreQueryConstraints.LIMIT: {\n const [limitValue] = values;\n return collectionRef.limit(limitValue);\n }\n case SharedQueryConstraints.START_AT: {\n const [docOrFields] = values;\n return collectionRef.startAt(docOrFields);\n }\n case SharedQueryConstraints.START_AFTER: {\n const [docOrFields] = values;\n return collectionRef.startAfter(docOrFields);\n }\n case SharedQueryConstraints.END_AT: {\n const [docOrFields] = values;\n return collectionRef.endAt(docOrFields);\n }\n case SharedQueryConstraints.END_BEFORE: {\n const [docOrFields] = values;\n return collectionRef.endBefore(docOrFields);\n }\n default:\n throw new Error(`Unknown method ${type}`);\n }\n};\n\nexport const applyFireStoreAdminConstraints = (collectionRef: Query, constraints: FirestorePermittedMethods[]) => {\n return constraints.reduce((collection, constraint) => {\n return applyFireStoreAdminConstraint(collection, constraint);\n }, collectionRef);\n};\n", "export const getStatus = (res: any) => {\n // Deliberate == instead of ===\n return (Array.isArray(res) && res.length === 0) || res == null ? \"emptyResource\" : \"success\";\n};\n\nexport const isDocOrQuery = (fullUrl: string): string => {\n const withoutSurroundingSlashes = fullUrl.replace(/^\\/|\\/$/g, \"\");\n const pathElements = withoutSurroundingSlashes.split(\"/\").length;\n return pathElements % 2 === 0 ? \"doc\" : \"query\";\n};\n", "/* eslint-disable max-params */\nimport { CollectionReference, DocumentReference, DocumentSnapshot, Firestore } from \"firebase-admin/firestore\";\nimport { getAdapterBindings } from \"@hyper-fetch/core\";\n\nimport { FirestoreMethodsUnion } from \"adapter\";\nimport { getStatus } from \"utils\";\nimport { applyFireStoreAdminConstraints, getOrderedResultFirestore, getRef } from \"./utils\";\nimport {\n FirestoreConstraintsUnion,\n FirestorePermittedMethods,\n PermittedConstraints,\n SharedQueryConstraints,\n} from \"constraints\";\n\ntype DataType = {\n constraints?: PermittedConstraints<FirestorePermittedMethods, FirestoreConstraintsUnion | SharedQueryConstraints>[];\n payload?: any;\n options?: Record<string, any>;\n};\n\nexport const getFirestoreAdminMethods = ({\n database,\n url,\n onSuccess,\n onError,\n onResponseStart,\n onRequestStart,\n onRequestEnd,\n onResponseEnd,\n}: {\n database: Firestore;\n url: string;\n onSuccess: Awaited<ReturnType<typeof getAdapterBindings>>[\"onSuccess\"];\n onError: Awaited<ReturnType<typeof getAdapterBindings>>[\"onError\"];\n onResponseStart: Awaited<ReturnType<typeof getAdapterBindings>>[\"onResponseStart\"];\n onRequestStart: Awaited<ReturnType<typeof getAdapterBindings>>[\"onRequestStart\"];\n onRequestEnd: Awaited<ReturnType<typeof getAdapterBindings>>[\"onRequestEnd\"];\n onResponseEnd: Awaited<ReturnType<typeof getAdapterBindings>>[\"onResponseEnd\"];\n}): ((methodName: FirestoreMethodsUnion, data: DataType) => Promise<void>) => {\n const [cleanUrl] = url.split(\"?\");\n const methods = {\n getDoc: async () => {\n const path = getRef(database, cleanUrl);\n const snapshot = (await path.get()) as DocumentSnapshot;\n const result = snapshot.data() ? { ...snapshot.data(), __key: snapshot.id } : null;\n const status = result ? \"success\" : \"emptyResource\";\n return { result, status, extra: { ref: path, snapshot } };\n },\n getDocs: async ({\n constraints = [],\n }: {\n constraints?: PermittedConstraints<\n FirestorePermittedMethods,\n FirestoreConstraintsUnion | SharedQueryConstraints\n >[];\n }) => {\n const path = getRef(database, cleanUrl) as CollectionReference;\n const query = applyFireStoreAdminConstraints(path, constraints);\n const querySnapshot = await query.get();\n const result = getOrderedResultFirestore(querySnapshot);\n const status = getStatus(result);\n\n return { result, status, extra: { ref: path, snapshot: querySnapshot } };\n },\n setDoc: async ({ data, options }: { data?: any; options?: any }) => {\n const path = getRef(database, cleanUrl) as DocumentReference;\n const merge = options?.merge === true;\n const res = await path.set(data, { merge });\n return { result: res, status: \"success\", extra: { ref: path } };\n },\n addDoc: async ({ data }: { data?: any }) => {\n const ref = getRef(database, cleanUrl) as CollectionReference;\n const docRef = await ref.add(data);\n return { result: { ...data, __key: docRef.id }, status: \"success\", extra: { ref: docRef } };\n },\n updateDoc: async ({ data }: { data?: any }) => {\n const path = getRef(database, cleanUrl) as DocumentReference;\n await path.update(data);\n return { result: data, status: \"success\", extra: { ref: path } };\n },\n deleteDoc: async () => {\n const path = getRef(database, cleanUrl) as DocumentReference;\n await path.delete();\n return { result: null, status: \"success\", extra: { ref: path } };\n },\n };\n\n return async (methodName: FirestoreMethodsUnion, data: DataType) => {\n try {\n onRequestStart();\n const { result, status, extra } = await methods[methodName](data);\n onRequestEnd();\n onResponseStart();\n onSuccess({ data: result, status, extra });\n onResponseEnd();\n } catch (error) {\n onRequestEnd();\n onResponseStart();\n onError({ error, status: \"error\", extra: {} });\n onResponseEnd();\n }\n };\n};\n", "import { DataSnapshot } from \"firebase-admin/database\";\n\nexport const getOrderedResultRealtime = (snapshot: DataSnapshot) => {\n const res: any = [];\n snapshot.forEach((child) => {\n res.push({ ...child.val(), __key: child.key });\n });\n return res.length > 0 ? res : null;\n};\n", "import { Query } from \"firebase-admin/database\";\n\nimport { RealtimePermittedMethods, RealtimeQueryConstraints, SharedQueryConstraints } from \"constraints\";\n\nexport const applyRealtimeAdminConstraint = (ref: Query, { type, values }: RealtimePermittedMethods) => {\n switch (type) {\n case RealtimeQueryConstraints.ORDER_BY_CHILD: {\n const [value] = values;\n return ref.orderByChild(value);\n }\n case RealtimeQueryConstraints.ORDER_BY_KEY: {\n return ref.orderByKey();\n }\n case RealtimeQueryConstraints.ORDER_BY_VALUE: {\n return ref.orderByValue();\n }\n case SharedQueryConstraints.START_AT: {\n const [[value]] = values;\n return ref.startAt(value);\n }\n case SharedQueryConstraints.START_AFTER: {\n const [[value]] = values;\n return ref.startAfter(value);\n }\n case SharedQueryConstraints.END_AT: {\n const [[value]] = values;\n return ref.endAt(value);\n }\n case SharedQueryConstraints.END_BEFORE: {\n const [[value]] = values;\n return ref.endBefore(value);\n }\n case RealtimeQueryConstraints.LIMIT_TO_FIRST: {\n const [value] = values;\n return ref.limitToFirst(value);\n }\n case RealtimeQueryConstraints.LIMIT_TO_LAST: {\n const [value] = values;\n return ref.limitToLast(value);\n }\n case RealtimeQueryConstraints.EQUAL_TO: {\n const [value] = values;\n return ref.equalTo(value);\n }\n default:\n throw new Error(`Unknown method ${type}`);\n }\n};\n\nexport const applyRealtimeAdminConstraints = (ref: Query, constraints: RealtimePermittedMethods[]) => {\n return constraints.reduce((collection, constraint) => {\n return applyRealtimeAdminConstraint(collection, constraint);\n }, ref);\n};\n", "/* eslint-disable max-params */\nimport { Database } from \"firebase-admin/database\";\nimport { getAdapterBindings } from \"@hyper-fetch/core\";\n\nimport { RealtimeDBMethodsUnion } from \"adapter/types\";\nimport { getStatus, isDocOrQuery } from \"utils\";\nimport { applyRealtimeAdminConstraints, getOrderedResultRealtime } from \"realtime/index\";\nimport {\n PermittedConstraints,\n RealtimeConstraintsUnion,\n RealtimePermittedMethods,\n SharedQueryConstraints,\n} from \"constraints\";\n\nexport const getRealtimeDbAdminMethods = ({\n database,\n url,\n onSuccess,\n onError,\n onResponseStart,\n onRequestStart,\n onRequestEnd,\n onResponseEnd,\n}: {\n database: Database;\n url: string;\n onSuccess: Awaited<ReturnType<typeof getAdapterBindings>>[\"onSuccess\"];\n onError: Awaited<ReturnType<typeof getAdapterBindings>>[\"onError\"];\n onResponseStart: Awaited<ReturnType<typeof getAdapterBindings>>[\"onResponseStart\"];\n onRequestStart: Awaited<ReturnType<typeof getAdapterBindings>>[\"onRequestStart\"];\n onRequestEnd: Awaited<ReturnType<typeof getAdapterBindings>>[\"onRequestEnd\"];\n onResponseEnd: Awaited<ReturnType<typeof getAdapterBindings>>[\"onResponseEnd\"];\n}): ((\n methodName: RealtimeDBMethodsUnion,\n data: {\n constraints: PermittedConstraints<RealtimePermittedMethods, RealtimeConstraintsUnion | SharedQueryConstraints>[];\n payload: any;\n options: Record<string, any>;\n },\n) => Promise<void>) => {\n const [fullUrl] = url.split(\"?\");\n const path = database.ref(fullUrl);\n const methods = {\n get: async ({ constraints = [] }) => {\n const docOrQuery = isDocOrQuery(fullUrl);\n const q = applyRealtimeAdminConstraints(path, constraints);\n const snapshot = await q.get();\n const res = docOrQuery === \"doc\" ? snapshot.val() : getOrderedResultRealtime(snapshot);\n const status = getStatus(res);\n return { result: res, status, extra: { ref: path, snapshot } };\n },\n set: async ({ data }: { data?: any }) => {\n await path.set(data);\n return { result: data, status: \"success\", extra: { ref: path } };\n },\n push: async ({ data }: { data?: any }) => {\n const resRef = await path.push(data);\n return { result: { ...data, __key: resRef.key }, status: \"success\", extra: { ref: resRef, key: resRef.key } };\n },\n update: async ({ data }: { data?: any }) => {\n await path.update(data);\n return { result: data, status: \"success\", extra: { ref: path } };\n },\n remove: async () => {\n await path.remove();\n return { result: null, status: \"success\", extra: { ref: path } };\n },\n };\n\n return async (methodName: RealtimeDBMethodsUnion, data) => {\n try {\n onRequestStart();\n const { result, status, extra } = await methods[methodName](data as any);\n onRequestEnd();\n onResponseStart();\n onSuccess({ data: result, status, extra });\n onResponseEnd();\n } catch (error) {\n onRequestEnd();\n onResponseStart();\n onError({ error, status: \"error\", extra: {} });\n onResponseEnd();\n }\n };\n};\n", "import { Database, DataSnapshot } from \"firebase-admin/database\";\nimport { SocketAdapter } from \"@hyper-fetch/sockets\";\n\nimport { applyRealtimeAdminConstraints, getOrderedResultRealtime } from \"./utils\";\nimport { getStatus, isDocOrQuery } from \"utils\";\nimport { RealtimeAdminOnValueMethodExtra, RealtimeAdminSocketAdapterType } from \"adapter\";\n\nexport const realtimeSocketsAdmin = (database: Database) => {\n return (\n new SocketAdapter({\n name: \"firebase-admin-realtime\",\n defaultConnected: true,\n }) as unknown as RealtimeAdminSocketAdapterType\n ).setConnector(\n ({ socket, onReconnect, onConnect, onConnected, onDisconnect, onDisconnected, onListen, onEvent, onError }) => {\n const connect = async () => {\n const enabled = onConnect();\n\n if (enabled) {\n database.goOnline();\n onConnected();\n }\n };\n\n const disconnect = async () => {\n database.goOffline();\n onDisconnect();\n onDisconnected();\n };\n\n const reconnect = () => {\n onReconnect({ disconnect, connect });\n };\n\n const listen: RealtimeAdminSocketAdapterType[\"listen\"] = (listener, callback) => {\n const fullUrl = socket.url + listener.topic;\n const path = database.ref(fullUrl);\n const { options } = listener;\n const onlyOnce = options?.onlyOnce || false;\n const q = applyRealtimeAdminConstraints(path, options?.constraints || []);\n const method = onlyOnce === true ? \"once\" : \"on\";\n q[method](\n \"value\",\n (snapshot) => {\n const getSnapshotData = (s: DataSnapshot) => (s.val() ? { ...s.val(), __key: s.key } : null);\n const response =\n isDocOrQuery(fullUrl) === \"doc\" ? getSnapshotData(snapshot) : getOrderedResultRealtime(snapshot);\n const status = getStatus(response);\n const extra: RealtimeAdminOnValueMethodExtra = { ref: path, snapshot, status };\n callback({ data: response, extra });\n onEvent({ topic: listener.topic, data: response, extra });\n },\n (error) => {\n onError({ error });\n },\n );\n const unsubscribe = () => q.off(\"value\");\n const unmount = onListen({ listener, callback, onUnmount: unsubscribe });\n\n const clearListeners = () => {\n unsubscribe();\n unmount();\n };\n\n return clearListeners;\n };\n\n const emit = async () => {\n throw new Error(\"Cannot emit from Realtime database socket.\");\n };\n\n return {\n connect,\n reconnect,\n disconnect,\n listen,\n emit,\n };\n },\n );\n};\n", "import { Adapter } from \"@hyper-fetch/core\";\nimport { Firestore } from \"firebase-admin/firestore\";\n\nimport {\n FirebaseAdminDBTypes,\n FirestoreMethods,\n RealtimeDBMethods,\n FirestoreRequestType,\n RealtimeDBRequestType,\n FirestoreAdapterType,\n} from \"adapter\";\nimport { getFirestoreAdminMethods } from \"../firestore\";\nimport { getRealtimeDbAdminMethods } from \"../realtime\";\n\nexport const FirebaseAdminAdapter = <T extends FirebaseAdminDBTypes>(database: T) => {\n return (\n new Adapter({\n name: \"firebase-admin\",\n defaultMethod: \"getDoc\",\n defaultExtra: {},\n systemErrorStatus: \"error\",\n systemErrorExtra: {},\n }) as unknown as FirestoreAdapterType\n ).setFetcher(\n async ({ request, onSuccess, onError, onResponseStart, onResponseEnd, onRequestStart, onRequestEnd }) => {\n const fullUrl = `${request.client.url}${request.endpoint}`;\n if (database instanceof Firestore) {\n const { method = FirestoreMethods.getDocs, queryParams, payload, options } = request as FirestoreRequestType;\n const availableMethods = getFirestoreAdminMethods({\n database,\n url: fullUrl,\n onSuccess,\n onError,\n onRequestStart,\n onResponseEnd,\n onResponseStart,\n onRequestEnd,\n });\n if (!Object.values(FirestoreMethods).includes(method)) {\n throw new Error(`Cannot find method ${method} in Firestore available methods.`);\n }\n availableMethods(method, {\n constraints: queryParams?.constraints ? queryParams.constraints : [],\n payload,\n options,\n });\n } else {\n const { method = RealtimeDBMethods.get, queryParams, payload, options } = request as RealtimeDBRequestType;\n const availableMethods = getRealtimeDbAdminMethods({\n database,\n url: fullUrl,\n onSuccess,\n onError,\n onRequestStart,\n onResponseEnd,\n onResponseStart,\n onRequestEnd,\n });\n if (!Object.values(RealtimeDBMethods).includes(method)) {\n throw new Error(`Cannot find method ${method} in Realtime database available methods.`);\n }\n availableMethods(method, {\n constraints: queryParams?.constraints ? queryParams.constraints : [],\n options,\n payload,\n });\n }\n },\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["FirestoreMethods", "RealtimeDBMethods", "Firestore", "SharedQueryConstraints", "RealtimeQueryConstraints", "FirestoreQueryConstraints", "SocketAdapter", "SocketAdapter", "Firestore", "Firestore", "Firestore"]
7
+ }
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "@hyper-fetch/firebase-admin",
3
- "version": "6.0.1",
4
- "private": false,
3
+ "version": "7.0.1",
5
4
  "description": "First class Firebase Admin adapter for Hyper Fetch",
6
- "author": "Kacper Skawina <kacper.skawina@gmail.com>",
5
+ "author": "Maciej Pyrc <maciekpyrc@gmail.com>, Kacper Skawina <kacper.skawina@gmail.com>",
7
6
  "homepage": "https://hyperfetch.bettertyped.com/",
8
7
  "license": "Apache-2.0",
9
- "main": "dist/index.cjs.js",
10
- "module": "dist/index.esm.js",
8
+ "main": "dist/index.js",
9
+ "module": "dist/index.js",
11
10
  "types": "dist/index.d.ts",
12
11
  "source": "src/index.ts",
13
12
  "scripts": {
@@ -21,7 +20,7 @@
21
20
  "postbuild": "rollup -c '../../rollup.config.js'",
22
21
  "lint": "eslint . --ext .js,.jsx,.tsx,.ts --fix",
23
22
  "format": "prettier --write .",
24
- "typecheck": "tsc --noEmit --emitDeclarationOnly false",
23
+ "typescheck": "tsc --noEmit --emitDeclarationOnly false",
25
24
  "tests": "firebase emulators:exec 'jest --watchAll=false --detectOpenHandles --forceExit --runInBand'",
26
25
  "release": "yarn semantic-release --extends ../../release.config.js -t 'hyper-fetch-firebase-admin-v${version}'"
27
26
  },
@@ -55,13 +54,12 @@
55
54
  "optional": true
56
55
  }
57
56
  },
58
- "dependencies": {},
59
57
  "devDependencies": {
60
58
  "@firebase/rules-unit-testing": "^2.0.7",
61
- "wait-for-expect": "^3.0.2",
62
59
  "firebase": "^9.21.0",
63
60
  "firebase-admin": "^11.5.0",
64
- "firebase-tools": "^11.23.1"
61
+ "firebase-tools": "^11.23.1",
62
+ "wait-for-expect": "^3.0.2"
65
63
  },
66
64
  "keywords": [
67
65
  "firebase",
@@ -1,10 +1,10 @@
1
1
  import { Firestore } from "firebase-admin/firestore";
2
2
 
3
3
  import { FirebaseAdminDBTypes, FirebaseAdminSocketAdapterTypes } from "./types";
4
- import { firestoreAdminSockets } from "../firestore/firestore.sockets";
5
- import { realtimeSocketsAdmin } from "../realtime/realtime.sockets";
4
+ import { firestoreAdminSockets } from "../firestore";
5
+ import { realtimeSocketsAdmin } from "../realtime";
6
6
 
7
- export const firebaseSocketsAdminAdapter = <T extends FirebaseAdminDBTypes>(
7
+ export const FirebaseSocketsAdminAdapter = <T extends FirebaseAdminDBTypes>(
8
8
  database: T,
9
9
  ): FirebaseAdminSocketAdapterTypes<T> => {
10
10
  if (database instanceof Firestore) {
@@ -1,72 +1,70 @@
1
- import { getAdapterBindings, ResponseReturnType } from "@hyper-fetch/core";
1
+ import { Adapter } from "@hyper-fetch/core";
2
2
  import { Firestore } from "firebase-admin/firestore";
3
3
 
4
4
  import {
5
- FirestoreAdapterType,
6
- FirestoreMethodsUnion,
7
- FirestoreQueryParams,
8
- FirebaseAdminAdapterTypes,
9
5
  FirebaseAdminDBTypes,
10
- RealtimeDbAdapterType,
11
- RealtimeDBMethodsUnion,
12
- RealtimeDBQueryParams,
13
6
  FirestoreMethods,
14
7
  RealtimeDBMethods,
8
+ FirestoreRequestType,
9
+ RealtimeDBRequestType,
10
+ FirestoreAdapterType,
15
11
  } from "adapter";
16
12
  import { getFirestoreAdminMethods } from "../firestore";
17
13
  import { getRealtimeDbAdminMethods } from "../realtime";
18
14
 
19
- export const firebaseAdminAdapter =
20
- <T extends FirebaseAdminDBTypes>(database: T) =>
21
- () => {
22
- const adapter: FirebaseAdminAdapterTypes<T> = async (request, requestId) => {
23
- const { fullUrl, onSuccess, onError, onRequestStart, onResponseEnd, onResponseStart, onRequestEnd } =
24
- await getAdapterBindings<RealtimeDbAdapterType | FirestoreAdapterType>(request, requestId, "error", {});
25
- return new Promise<ResponseReturnType<any, any, FirebaseAdminAdapterTypes<T>>>((resolve) => {
26
- if (database instanceof Firestore) {
27
- const {
28
- method = FirestoreMethods.getDocs,
29
- queryParams,
30
- data,
31
- options,
32
- }: { method: FirestoreMethodsUnion; queryParams: FirestoreQueryParams; data; options } = request;
33
- const availableMethods = getFirestoreAdminMethods(request, database, fullUrl, onSuccess, onError, resolve, {
34
- onRequestStart,
35
- onResponseEnd,
36
- onResponseStart,
37
- onRequestEnd,
38
- });
39
- if (!Object.values(FirestoreMethods).includes(method)) {
40
- throw new Error(`Cannot find method ${method} in Firestore available methods.`);
41
- }
42
- availableMethods(method, {
43
- constraints: queryParams?.constraints ? queryParams.constraints : [],
44
- data,
45
- options,
46
- });
47
- } else {
48
- const {
49
- method = RealtimeDBMethods.get,
50
- queryParams,
51
- data,
52
- options,
53
- }: { method: RealtimeDBMethodsUnion; queryParams: RealtimeDBQueryParams; data; options } = request;
54
- const availableMethods = getRealtimeDbAdminMethods(request, database, fullUrl, onSuccess, onError, resolve, {
55
- onRequestStart,
56
- onResponseEnd,
57
- onResponseStart,
58
- onRequestEnd,
59
- });
60
- if (!Object.values(RealtimeDBMethods).includes(method)) {
61
- throw new Error(`Cannot find method ${method} in Realtime database available methods.`);
62
- }
63
- availableMethods(method, {
64
- constraints: queryParams?.constraints ? queryParams.constraints : [],
65
- options,
66
- data,
67
- });
15
+ export const FirebaseAdminAdapter = <T extends FirebaseAdminDBTypes>(database: T) => {
16
+ return (
17
+ new Adapter({
18
+ name: "firebase-admin",
19
+ defaultMethod: "getDoc",
20
+ defaultExtra: {},
21
+ systemErrorStatus: "error",
22
+ systemErrorExtra: {},
23
+ }) as unknown as FirestoreAdapterType
24
+ ).setFetcher(
25
+ async ({ request, onSuccess, onError, onResponseStart, onResponseEnd, onRequestStart, onRequestEnd }) => {
26
+ const fullUrl = `${request.client.url}${request.endpoint}`;
27
+ if (database instanceof Firestore) {
28
+ const { method = FirestoreMethods.getDocs, queryParams, payload, options } = request as FirestoreRequestType;
29
+ const availableMethods = getFirestoreAdminMethods({
30
+ database,
31
+ url: fullUrl,
32
+ onSuccess,
33
+ onError,
34
+ onRequestStart,
35
+ onResponseEnd,
36
+ onResponseStart,
37
+ onRequestEnd,
38
+ });
39
+ if (!Object.values(FirestoreMethods).includes(method)) {
40
+ throw new Error(`Cannot find method ${method} in Firestore available methods.`);
41
+ }
42
+ availableMethods(method, {
43
+ constraints: queryParams?.constraints ? queryParams.constraints : [],
44
+ payload,
45
+ options,
46
+ });
47
+ } else {
48
+ const { method = RealtimeDBMethods.get, queryParams, payload, options } = request as RealtimeDBRequestType;
49
+ const availableMethods = getRealtimeDbAdminMethods({
50
+ database,
51
+ url: fullUrl,
52
+ onSuccess,
53
+ onError,
54
+ onRequestStart,
55
+ onResponseEnd,
56
+ onResponseStart,
57
+ onRequestEnd,
58
+ });
59
+ if (!Object.values(RealtimeDBMethods).includes(method)) {
60
+ throw new Error(`Cannot find method ${method} in Realtime database available methods.`);
68
61
  }
69
- });
70
- };
71
- return adapter;
72
- };
62
+ availableMethods(method, {
63
+ constraints: queryParams?.constraints ? queryParams.constraints : [],
64
+ options,
65
+ payload,
66
+ });
67
+ }
68
+ },
69
+ );
70
+ };
@@ -1,11 +1,16 @@
1
1
  import { Database } from "firebase-admin/database";
2
2
  import { Firestore } from "firebase-admin/firestore";
3
+ import { Adapter, Request, Client } from "@hyper-fetch/core";
3
4
 
4
5
  import {
5
6
  RealtimeDbAdapterType,
6
7
  FirestoreAdapterType,
7
8
  FirestoreAdminSocketAdapterType,
8
9
  RealtimeAdminSocketAdapterType,
10
+ FirestoreQueryParams,
11
+ FirestoreMethodsUnion,
12
+ RealtimeDBMethodsUnion,
13
+ RealtimeDBQueryParams,
9
14
  } from "./index";
10
15
 
11
16
  export type FirebaseAdminDBTypes = Database | Firestore;
@@ -13,3 +18,29 @@ export type FirebaseAdminAdapterTypes<T> = T extends Database ? RealtimeDbAdapte
13
18
  export type FirebaseAdminSocketAdapterTypes<T> = T extends Firestore
14
19
  ? FirestoreAdminSocketAdapterType
15
20
  : RealtimeAdminSocketAdapterType;
21
+
22
+ export type RealtimeDBRequestType = Request<
23
+ any,
24
+ any,
25
+ RealtimeDBQueryParams,
26
+ any,
27
+ any,
28
+ Client<any, Adapter<any, RealtimeDBMethodsUnion, any, any, any, any>>,
29
+ any,
30
+ any,
31
+ any
32
+ >;
33
+
34
+ export type FirestoreRequestType = Request<
35
+ any,
36
+ any,
37
+ FirestoreQueryParams,
38
+ any,
39
+ any,
40
+ Client<any, Adapter<any, FirestoreMethodsUnion, any, any, any, any>>,
41
+ any,
42
+ any,
43
+ any
44
+ >;
45
+
46
+ export type RequestType<T> = T extends Firestore ? FirestoreRequestType : RealtimeDBRequestType;
@@ -1,4 +1,5 @@
1
- import { AdapterType } from "@hyper-fetch/core";
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import { Adapter } from "@hyper-fetch/core";
2
3
  import {
3
4
  Unsubscribe as FirestoreUnsubscribe,
4
5
  CollectionReference,
@@ -6,7 +7,7 @@ import {
6
7
  DocumentSnapshot,
7
8
  QuerySnapshot,
8
9
  } from "firebase/firestore";
9
- import { SocketAdapterType } from "@hyper-fetch/sockets";
10
+ import { SocketAdapter } from "@hyper-fetch/sockets";
10
11
 
11
12
  import {
12
13
  FirestoreConstraintsUnion,
@@ -15,22 +16,37 @@ import {
15
16
  SharedQueryConstraints,
16
17
  } from "constraints";
17
18
 
18
- export type FirestoreSocketAdapterType = SocketAdapterType<
19
+ export type FirestoreSocketAdapterType = SocketAdapter<
19
20
  never,
20
21
  FirestoreOnSnapshotExtra,
21
22
  { groupByChangeType?: boolean } & FirestoreQueryParams
22
23
  >;
23
24
 
24
25
  export type FirestoreAdapterType =
25
- | AdapterType<Record<string, never>, "getDoc", FirestoreStatuses, FirestoreExtra, FirestoreQueryParams>
26
- | AdapterType<Record<string, never>, "getDocs", FirestoreStatuses, FirestoreGetDocsExtra, FirestoreQueryParams>
27
- | AdapterType<{ merge: boolean }, "setDoc", FirestoreStatuses, FirestoreRefOnlyExtra, Record<string, never>>
28
- | AdapterType<
26
+ | Adapter<
27
+ Record<string, never>,
28
+ "getDoc",
29
+ FirestoreStatuses,
30
+ FirestoreExtra,
31
+ FirestoreQueryParams,
32
+ FirestoreQueryParams
33
+ >
34
+ | Adapter<
35
+ Record<string, never>,
36
+ "getDocs",
37
+ FirestoreStatuses,
38
+ FirestoreGetDocsExtra,
39
+ FirestoreQueryParams,
40
+ FirestoreQueryParams
41
+ >
42
+ | Adapter<{ merge: boolean }, "setDoc", FirestoreStatuses, FirestoreRefOnlyExtra, Record<string, never>, undefined>
43
+ | Adapter<
29
44
  Record<string, never>,
30
45
  "updateDoc" | "addDoc" | "deleteDoc" | "setDoc",
31
46
  FirestoreStatuses,
32
47
  FirestoreRefOnlyExtra,
33
- Record<string, never>
48
+ Record<string, never>,
49
+ undefined
34
50
  >;
35
51
 
36
52
  export type FirestoreQueryParams = {
@@ -1,6 +1,7 @@
1
- import { AdapterType } from "@hyper-fetch/core";
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import { Adapter } from "@hyper-fetch/core";
2
3
  import { DatabaseReference, DataSnapshot } from "firebase/database";
3
- import { SocketAdapterType } from "@hyper-fetch/sockets";
4
+ import { SocketAdapter } from "@hyper-fetch/sockets";
4
5
 
5
6
  import {
6
7
  PermittedConstraints,
@@ -9,33 +10,36 @@ import {
9
10
  SharedQueryConstraints,
10
11
  } from "constraints";
11
12
 
12
- export type RealtimeSocketAdapterType = SocketAdapterType<
13
+ export type RealtimeSocketAdapterType = SocketAdapter<
13
14
  never,
14
15
  RealtimeDbOnValueMethodExtra,
15
16
  { onlyOnce?: boolean } & RealtimeDBQueryParams
16
17
  >;
17
18
 
18
19
  export type RealtimeDbAdapterType =
19
- | AdapterType<
20
+ | Adapter<
20
21
  DefaultRealtimeDBAdapterOptions,
21
22
  "get",
22
23
  RealtimeDBStatuses,
23
24
  RealtimeDbGetMethodExtra,
25
+ RealtimeDBQueryParams,
24
26
  RealtimeDBQueryParams
25
27
  >
26
- | AdapterType<
28
+ | Adapter<
27
29
  DefaultRealtimeDBAdapterOptions,
28
30
  "push",
29
31
  RealtimeDBStatuses,
30
32
  RealtimeDbPushMethodExtra,
31
- Record<string, never>
33
+ Record<string, never>,
34
+ undefined
32
35
  >
33
- | AdapterType<
36
+ | Adapter<
34
37
  DefaultRealtimeDBAdapterOptions,
35
38
  "set" | "update" | "remove",
36
39
  RealtimeDBStatuses,
37
40
  RealtimeDbDefaultExtra,
38
- Record<string, never>
41
+ Record<string, never>,
42
+ undefined
39
43
  >;
40
44
 
41
45
  export type DefaultRealtimeDBAdapterOptions = {
@@ -1,17 +1,17 @@
1
- import { DocumentReference, DocumentSnapshot, Query } from "firebase-admin/firestore";
2
- import { SocketAdapterType } from "@hyper-fetch/sockets";
1
+ import { DocumentReference, DocumentSnapshot, DocumentData, Query, QuerySnapshot } from "firebase-admin/firestore";
2
+ import { SocketAdapter } from "@hyper-fetch/sockets";
3
3
 
4
4
  import { FirestoreQueryParams } from "adapter";
5
5
 
6
- export type FirestoreAdminSocketAdapterType = SocketAdapterType<
7
- never,
6
+ export type FirestoreAdminSocketAdapterType = SocketAdapter<
8
7
  FirestoreAdminOnSnapshotExtra,
8
+ undefined,
9
9
  { groupByChangeType?: boolean } & FirestoreQueryParams
10
10
  >;
11
11
 
12
12
  export type FirestoreAdminOnSnapshotExtra = {
13
13
  ref?: DocumentReference | Query;
14
- snapshot?: DocumentSnapshot;
14
+ snapshot?: DocumentSnapshot | QuerySnapshot;
15
15
  unsubscribe?: () => void;
16
- groupedResult?: { added: DocumentSnapshot[]; modified: DocumentSnapshot[]; removed: DocumentSnapshot[] };
16
+ groupedResult: { added: DocumentData[]; modified: DocumentData[]; removed: DocumentData[] } | null;
17
17
  };
@@ -1,13 +1,13 @@
1
- import { SocketAdapterType } from "@hyper-fetch/sockets";
1
+ import { SocketAdapter } from "@hyper-fetch/sockets";
2
2
  import { Reference, DataSnapshot } from "firebase-admin/database";
3
3
 
4
4
  import { RealtimeDBQueryParams, RealtimeDBStatuses } from "adapter/index";
5
5
 
6
- export type RealtimeAdminSocketAdapterType = SocketAdapterType<
7
- never,
6
+ export type RealtimeAdminSocketAdapterType = SocketAdapter<
7
+ any,
8
8
  RealtimeAdminOnValueMethodExtra,
9
9
  { onlyOnce?: boolean } & RealtimeDBQueryParams,
10
- never
10
+ any
11
11
  >;
12
12
 
13
13
  export type RealtimeAdminOnValueMethodExtra = {
@@ -1,32 +1,42 @@
1
+ /* eslint-disable max-params */
1
2
  import { CollectionReference, DocumentReference, DocumentSnapshot, Firestore } from "firebase-admin/firestore";
2
- import { RequestInstance } from "@hyper-fetch/core";
3
+ import { getAdapterBindings } from "@hyper-fetch/core";
3
4
 
4
5
  import { FirestoreMethodsUnion } from "adapter";
5
6
  import { getStatus } from "utils";
7
+ import { applyFireStoreAdminConstraints, getOrderedResultFirestore, getRef } from "./utils";
6
8
  import {
7
9
  FirestoreConstraintsUnion,
8
10
  FirestorePermittedMethods,
9
11
  PermittedConstraints,
10
12
  SharedQueryConstraints,
11
13
  } from "constraints";
12
- import { applyFireStoreAdminConstraints, getOrderedResultFirestore, getRef } from "./utils";
13
14
 
14
- export const getFirestoreAdminMethods = <R extends RequestInstance>(
15
- request: R,
16
- database: Firestore,
17
- url: string,
15
+ type DataType = {
16
+ constraints?: PermittedConstraints<FirestorePermittedMethods, FirestoreConstraintsUnion | SharedQueryConstraints>[];
17
+ payload?: any;
18
+ options?: Record<string, any>;
19
+ };
20
+
21
+ export const getFirestoreAdminMethods = ({
22
+ database,
23
+ url,
18
24
  onSuccess,
19
25
  onError,
20
- resolve,
21
- events: { onRequestStart; onResponseEnd; onResponseStart; onRequestEnd },
22
- ): ((
23
- methodName: FirestoreMethodsUnion,
24
- data: {
25
- constraints?: PermittedConstraints<FirestorePermittedMethods, FirestoreConstraintsUnion | SharedQueryConstraints>[];
26
- data?: any;
27
- options?: Record<string, any>;
28
- },
29
- ) => Promise<void>) => {
26
+ onResponseStart,
27
+ onRequestStart,
28
+ onRequestEnd,
29
+ onResponseEnd,
30
+ }: {
31
+ database: Firestore;
32
+ url: string;
33
+ onSuccess: Awaited<ReturnType<typeof getAdapterBindings>>["onSuccess"];
34
+ onError: Awaited<ReturnType<typeof getAdapterBindings>>["onError"];
35
+ onResponseStart: Awaited<ReturnType<typeof getAdapterBindings>>["onResponseStart"];
36
+ onRequestStart: Awaited<ReturnType<typeof getAdapterBindings>>["onRequestStart"];
37
+ onRequestEnd: Awaited<ReturnType<typeof getAdapterBindings>>["onRequestEnd"];
38
+ onResponseEnd: Awaited<ReturnType<typeof getAdapterBindings>>["onResponseEnd"];
39
+ }): ((methodName: FirestoreMethodsUnion, data: DataType) => Promise<void>) => {
30
40
  const [cleanUrl] = url.split("?");
31
41
  const methods = {
32
42
  getDoc: async () => {
@@ -36,7 +46,14 @@ export const getFirestoreAdminMethods = <R extends RequestInstance>(
36
46
  const status = result ? "success" : "emptyResource";
37
47
  return { result, status, extra: { ref: path, snapshot } };
38
48
  },
39
- getDocs: async ({ constraints = [] }) => {
49
+ getDocs: async ({
50
+ constraints = [],
51
+ }: {
52
+ constraints?: PermittedConstraints<
53
+ FirestorePermittedMethods,
54
+ FirestoreConstraintsUnion | SharedQueryConstraints
55
+ >[];
56
+ }) => {
40
57
  const path = getRef(database, cleanUrl) as CollectionReference;
41
58
  const query = applyFireStoreAdminConstraints(path, constraints);
42
59
  const querySnapshot = await query.get();
@@ -45,7 +62,7 @@ export const getFirestoreAdminMethods = <R extends RequestInstance>(
45
62
 
46
63
  return { result, status, extra: { ref: path, snapshot: querySnapshot } };
47
64
  },
48
- setDoc: async ({ data, options }: { data?: any; options?: Record<string, any> }) => {
65
+ setDoc: async ({ data, options }: { data?: any; options?: any }) => {
49
66
  const path = getRef(database, cleanUrl) as DocumentReference;
50
67
  const merge = options?.merge === true;
51
68
  const res = await path.set(data, { merge });
@@ -68,19 +85,19 @@ export const getFirestoreAdminMethods = <R extends RequestInstance>(
68
85
  },
69
86
  };
70
87
 
71
- return async (methodName: FirestoreMethodsUnion, data) => {
88
+ return async (methodName: FirestoreMethodsUnion, data: DataType) => {
72
89
  try {
73
- events.onRequestStart();
90
+ onRequestStart();
74
91
  const { result, status, extra } = await methods[methodName](data);
75
- events.onRequestEnd();
76
- events.onResponseStart();
77
- onSuccess(result, status, extra, resolve);
78
- events.onResponseEnd();
79
- } catch (e) {
80
- events.onRequestEnd();
81
- events.onResponseStart();
82
- onError(e, "error", {}, resolve);
83
- events.onResponseEnd();
92
+ onRequestEnd();
93
+ onResponseStart();
94
+ onSuccess({ data: result, status, extra });
95
+ onResponseEnd();
96
+ } catch (error) {
97
+ onRequestEnd();
98
+ onResponseStart();
99
+ onError({ error, status: "error", extra: {} });
100
+ onResponseEnd();
84
101
  }
85
102
  };
86
103
  };