UNPKG

@aimee-blue/ab-service-kit

Version:
1 lines 4.38 kB
{"version":3,"sources":["../../../src/shared/api/index.ts"],"names":["CLOUD_FUNCTION_ROOT_ENDPOINT","constructEndpointUri","rootEndpoint","functionName","defaultApiParams","fetchFn","init","params","callFn","data","opts","method","body","JSON","stringify","headers","authToken","Authorization","redirect","then","res","ok","json","message","Errors","errorMessageFromFetchResponse","Error","wrapped","result","apiOf","name","param"],"mappings":";;;;;;;;AAAA;;AACA;;AAEA;;;;AAEO,MAAMA,4BAA4B,GAAG,8BAArC;;;AAEP,MAAMC,oBAAoB,GAAG,CAACC,YAAD,EAAuBC,YAAvB,KAC3BD,YAAY,GAAGC,YADjB;;AAGO,MAAMC,gBAAgB,GAAG,OAAO;AACrCF,EAAAA,YAAY,EAAE,iBAAOF,4BAAP;AADuB,CAAP,CAAzB;;;;AAQA,MAAMK,OAAO,GAAG,CACrBF,YADqB,EAErBG,IAFqB,EAGrBC,MAAkB,GAAGH,gBAAgB,EAHhB,KAIlB;AACH,SAAO,wBAAMH,oBAAoB,CAACM,MAAM,CAACL,YAAR,EAAsBC,YAAtB,CAA1B,EAA+DG,IAA/D,CAAP;AACD,CANM;AAQP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAME,MAAM,GAAG,CACpBL,YADoB,EAEpBI,MAAkB,GAAGH,gBAAgB,EAFjB,KAGjB,CAACK,IAAD,EAAUC,IAAe,GAAG,EAA5B,KACHL,OAAO,CACLF,YADK,EAEL;AACEQ,EAAAA,MAAM,EAAE,MADV;AAEEC,EAAAA,IAAI,EAAEC,IAAI,CAACC,SAAL,CAAe;AAAEL,IAAAA;AAAF,GAAf,CAFR;AAGEM,EAAAA,OAAO,EAAE;AACP,oBAAgB,kBADT;AAEP,qBAAiB,UAFV;AAGP,QAAIL,IAAI,CAACM,SAAL,IAAkB;AAAEC,MAAAA,aAAa,EAAE,YAAYP,IAAI,CAACM;AAAlC,KAAtB;AAHO,GAHX;AAQEE,EAAAA,QAAQ,EAAE;AARZ,CAFK,EAYLX,MAZK,CAAP,CAcGY,IAdH,CAcQ,MAAMC,GAAN,IAAa;AACjB,MAAIA,GAAG,CAACC,EAAR,EAAY;AACV,WAAOD,GAAG,CAACE,IAAJ,EAAP;AACD;;AAED,QAAMC,OAAO,GAAG,MAAMC,iBAAOC,6BAAP,CAAqCL,GAArC,CAAtB;AAEA,QAAM,IAAIM,KAAJ,CAAUH,OAAV,CAAN;AACD,CAtBH,EAuBGJ,IAvBH,CAwBIQ,OAAO,IACJ,YAAYA,OAAZ,IAAuBA,OAAO,CAACC,MAA/B,GAAwCD,OAAO,CAACC,MAAhD,GAAyDD,OAzBhE,CAJK;;;;AA8CA,SAASE,KAAT,CAAkBtB,MAAkB,GAAGH,gBAAgB,EAAvD,EAA2D;AAChE,SAAO;AACLI,IAAAA,MAAM,EAAE,CACNsB,IADM,EAENC,KAFM,EAGNrB,IAAe,GAAG,EAHZ,KAIH;AACH,aAAOF,MAAM,CAAoCsB,IAApC,EAAoDvB,MAApD,CAAN,CACLwB,KADK,EAELrB,IAFK,CAAP;AAID;AAVI,GAAP;AAYD","sourcesContent":["import fetch, { RequestInit } from 'node-fetch';\nimport { Errors } from '@aimee-blue/ab-shared';\nimport { PromiseType } from 'utility-types';\nimport { envVar } from '../env';\n\nexport const CLOUD_FUNCTION_ROOT_ENDPOINT = 'CLOUD_FUNCTION_ROOT_ENDPOINT';\n\nconst constructEndpointUri = (rootEndpoint: string, functionName: string) =>\n rootEndpoint + functionName;\n\nexport const defaultApiParams = () => ({\n rootEndpoint: envVar(CLOUD_FUNCTION_ROOT_ENDPOINT),\n});\n\nexport interface IApiParams {\n rootEndpoint: string;\n}\n\nexport const fetchFn = (\n functionName: string,\n init?: RequestInit | undefined,\n params: IApiParams = defaultApiParams()\n) => {\n return fetch(constructEndpointUri(params.rootEndpoint, functionName), init);\n};\n\n/**\n * Call function using Firebase HTTP call conventions\n * @param functionName Name of the function\n * @param authToken Authentication token\n * @param rootEndpoint Functions root endpoint\n */\nexport const callFn = <T, P = unknown>(\n functionName: string,\n params: IApiParams = defaultApiParams()\n) => (data: P, opts: ICallOpts = {}) =>\n fetchFn(\n functionName,\n {\n method: 'post',\n body: JSON.stringify({ data }),\n headers: {\n 'Content-Type': 'application/json',\n 'cache-control': 'no-cache',\n ...(opts.authToken && { Authorization: 'Bearer ' + opts.authToken }),\n },\n redirect: 'error',\n },\n params\n )\n .then(async res => {\n if (res.ok) {\n return res.json() as Promise<{ result?: T } | T>;\n }\n\n const message = await Errors.errorMessageFromFetchResponse(res);\n\n throw new Error(message);\n })\n .then(\n wrapped =>\n ('result' in wrapped && wrapped.result ? wrapped.result : wrapped) as T\n );\n\ninterface ICallOpts {\n authToken?: string;\n}\n\ntype ParametersIf<T> = T extends (...args: unknown[]) => unknown\n ? Parameters<T>\n : [never];\n\ntype ReturnTypeIf<T> = T extends (...args: unknown[]) => unknown\n ? ReturnType<T>\n : never;\n\ntype PromiseTypeIf<T> = T extends Promise<unknown> ? PromiseType<T> : never;\n\nexport function apiOf<T>(params: IApiParams = defaultApiParams()) {\n return {\n callFn: <K extends keyof T>(\n name: K,\n param: ParametersIf<T[K]>[0],\n opts: ICallOpts = {}\n ) => {\n return callFn<PromiseTypeIf<ReturnTypeIf<T[K]>>>(name as string, params)(\n param,\n opts\n );\n },\n };\n}\n"],"file":"index.js"}