@lowerdeck/rpc-client 1.0.4 → 1.0.5
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 +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.module.js +1 -1
- package/dist/index.module.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/request.ts +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("@lowerdeck/canonicalize"),r=require("@lowerdeck/error"),n=require("@lowerdeck/serialize"),t=require("@lowerdeck/id"),o=require("@lowerdeck/memo"),i=require("@lowerdeck/proxy");function a(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},u.apply(null,arguments)}var c=0,l=o.memo(function(){return t.generatePlainId(10)}),s="undefined"==typeof window;function d(e,r,n){if(!e.s){if(n instanceof v){if(!n.s)return void(n.o=d.bind(null,e,r));1&r&&(r=n.s),n=n.v}if(n&&n.then)return void n.then(d.bind(null,e,r),d.bind(null,e,2));e.s=r,e.v=n;var t=e.o;t&&t(e)}}var f=function(){var e;s||(e=console).log.apply(e,[].slice.call(arguments))},v=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(r,n){var t=new e,o=this.s;if(o){var i=1&o?r:n;if(i){try{d(t,1,i(this.v))}catch(e){d(t,2,e)}return t}return this}return this.o=function(e){try{var o=e.v;1&e.s?d(t,1,r?r(o):o):n?d(t,1,n(o)):d(t,2,o)}catch(e){d(t,2,e)}},t},e}();function h(e){return e instanceof v&&1&e.s}var m,p,y={},w=(m=function(t){return Promise.resolve(function(t){try{var o,i=function(e){if(o)return e;if(w)throw w;throw new r.ServiceError(r.internalServerError({message:"undefined"
|
|
1
|
+
var e=require("@lowerdeck/canonicalize"),r=require("@lowerdeck/error"),n=require("@lowerdeck/serialize"),t=require("@lowerdeck/id"),o=require("@lowerdeck/memo"),i=require("@lowerdeck/proxy");function a(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},u.apply(null,arguments)}var c=0,l=o.memo(function(){return t.generatePlainId(10)}),s="undefined"==typeof window;function d(e,r,n){if(!e.s){if(n instanceof v){if(!n.s)return void(n.o=d.bind(null,e,r));1&r&&(r=n.s),n=n.v}if(n&&n.then)return void n.then(d.bind(null,e,r),d.bind(null,e,2));e.s=r,e.v=n;var t=e.o;t&&t(e)}}var f=function(){var e;s||(e=console).log.apply(e,[].slice.call(arguments))},v=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(r,n){var t=new e,o=this.s;if(o){var i=1&o?r:n;if(i){try{d(t,1,i(this.v))}catch(e){d(t,2,e)}return t}return this}return this.o=function(e){try{var o=e.v;1&e.s?d(t,1,r?r(o):o):n?d(t,1,n(o)):d(t,2,o)}catch(e){d(t,2,e)}},t},e}();function h(e){return e instanceof v&&1&e.s}var m,p,y={},w=(m=function(t){return Promise.resolve(function(t){try{var o,i=function(e){if(o)return e;if(w)throw w;throw new r.ServiceError(r.internalServerError({message:"undefined"!=typeof window?"Unable to reach server":"Unable to reach server "+t.endpoint}))},m=function(){var e="call_"+l()+"_"+c;return c+=1,e}();f("[call:"+t.name.replace(":","-")+":"+m+"] Queued",t);var p=0,w=null;for(var b in t.headers)void 0===t.headers[b]&&delete t.headers[b];if(t.query)for(var g in t.query)void 0===t.query[g]&&delete t.query[g];var q="undefined"==typeof window?6:3,P="undefined"==typeof window?20:1e3,S=function(e,r,n){for(var t;;){var o=e();if(h(o)&&(o=o.v),!o)return i;if(o.then){t=0;break}var i=n();if(i&&i.then){if(!h(i)){t=1;break}i=i.s}}var a=new v,u=d.bind(null,a,2);return(0===t?o.then(l):1===t?i.then(c):(void 0).then(function(){(o=e())?o.then?o.then(l).then(void 0,u):l(o):d(a,1,i)})).then(void 0,u),a;function c(r){i=r;do{if(!(o=e())||h(o)&&!o.v)return void d(a,1,i);if(o.then)return void o.then(l).then(void 0,u);h(i=n())&&(i=i.v)}while(!i||!i.then);i.then(c).then(void 0,u)}function l(e){e?(i=n())&&i.then?i.then(c).then(void 0,u):c(i):d(a,1,i)}}(function(){return!o&&p<q},0,function(){function i(e){return o?e:(p+=1,Promise.resolve(new Promise(function(e){return setTimeout(e,p*P)})).then(function(){}))}var c=function(i,c){try{var l=Promise.resolve(function(t){var o=""+e.canonicalize(t.headers)+e.canonicalize(t.query)+t.endpoint;y[o]||(y[o]={calls:[],to:null});var i=y[o],c=new Promise(function(e,r){i.calls.push({call:t,resolve:e,reject:r})});return i.to&&clearTimeout(i.to),i.to=setTimeout(function(){var e=y[o].calls;y[o].calls=[],y[o].to=null;var i=new URL(t.endpoint);i.search=new URLSearchParams(t.query).toString(),fetch(i.toString(),{method:"POST",headers:u({"Content-Type":"application/rpc+json"},e[0].call.headers),body:n.serialize.encode({calls:e.map(function(e){return{id:e.call.id,name:e.call.name,payload:e.call.payload}}).sort(function(e,r){return e.name.localeCompare(r.name)})}),credentials:"include",keepalive:!1}).then(function(e){try{var r=n.serialize.decode;return Promise.resolve(e.json()).then(function(t){return{res:r.call(n.serialize,t),headers:e.headers}})}catch(e){return Promise.reject(e)}}).then(function(n){var t=n.res,o=n.headers;if("error"!=t.__typename){for(var i,u,c=function(){var e=u.value,n=t.calls.find(function(r){return r.id==e.call.id});if(!n){var i=new r.ServiceError(r.internalServerError({message:"Call not returned"}));return e.reject(i),{v:void 0}}n.status>=200&&n.status<300&&e.resolve({data:n.result,status:n.status,headers:o});var a=r.ServiceError.fromResponse(n.result);e.reject(a)},l=function(e){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,r){if(e){if("string"==typeof e)return a(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,r):void 0}}(e))){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(u=l()).done;)if(i=c())return i.v}else{var s=r.ServiceError.fromResponse(t);e.forEach(function(e){return e.reject(s)})}}).catch(function(n){e.forEach(function(e){return e.reject(new r.ServiceError(r.internalServerError({message:"undefined"!=typeof window?"Unable to reach server":"Unable to reach server "+t.endpoint})))})})},s?0:10),c}(u({},t,{id:m})).then(function(e){return s||f("[call:"+t.name.replace(":","-")+":"+m+"] Success",e),e},function(e){throw s&&f("[call:"+t.name.replace(":","-")+":"+m+"] Queued",t),f("[call:"+t.name.replace(":","-")+":"+m+"] Error",e),e})).then(function(e){return o=1,e})}catch(e){return c(e)}return l&&l.then?l.then(void 0,c):l}(0,function(e){if(w=e,r.isServiceError(e)&&e.data.status<500)throw e});return c&&c.then?c.then(i):i(c)});return Promise.resolve(S&&S.then?S.then(i):i(S))}catch(e){return Promise.reject(e)}}(t))},void 0===p&&(p=function(e){return e({})}),function(e){return i.proxy(function(r,n,t){try{return Promise.resolve(p(function(o){try{return Promise.resolve(null==e.getHeaders?void 0:e.getHeaders()).then(function(i){var a;function c(i){return a?i:Promise.resolve(m({endpoint:e.endpoint,payload:n,name:r.join(":"),headers:l,query:null==t?void 0:t.query,context:o})).then(function(e){return e.data})}var l=u({},e.headers,i,null==t?void 0:t.headers);null==e.onRequest||e.onRequest({endpoint:e.endpoint,name:r.join(":"),payload:n,headers:l,query:null==t?void 0:t.query});var s=function(){if("getFull"==r[r.length-1])return Promise.resolve(m({endpoint:e.endpoint,payload:n,name:r.slice(0,-1).join(":"),headers:l,query:null==t?void 0:t.query,context:o})).then(function(e){return a=1,e})}();return s&&s.then?s.then(c):c(s)})}catch(e){return Promise.reject(e)}}))}catch(e){return Promise.reject(e)}})});exports.createClient=w;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/shared/requester.ts","../src/request.ts","../src/shared/clientBuilder.ts","../src/index.ts"],"sourcesContent":["import { generatePlainId } from '@lowerdeck/id';\nimport { memo } from '@lowerdeck/memo';\n\nlet index = 0;\nlet rootId = memo(() => generatePlainId(10));\n\nexport let generateRequestId = () => {\n let id = `call_${rootId()}_${index}`;\n index += 1;\n return id;\n};\n\nexport interface Call {\n id: string;\n name: string;\n payload: any;\n endpoint: string;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}\n\nexport type Requester = (\n call: Omit<Call, 'id' | 'headers' | 'query'> & {\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n context: any;\n }\n) => Promise<{\n data: any;\n status: number;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}>;\n","import { canonicalize } from '@lowerdeck/canonicalize';\nimport { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error';\nimport { serialize } from '@lowerdeck/serialize';\nimport { Call, generateRequestId, Requester } from './shared/requester';\n\n// @ts-ignore\nlet isServer = typeof window === 'undefined';\n\nlet log = (...args: any[]) => {\n if (!isServer) console.log(...args);\n};\n\nlet calls: {\n [key: string]: {\n calls: {\n call: Call;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }[];\n to: any;\n };\n} = {};\n\nlet performRequest = (call: Call) => {\n let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`;\n\n if (!calls[key]) calls[key] = { calls: [], to: null };\n let current = calls[key];\n\n let promise = new Promise((resolve, reject) => {\n current.calls.push({ call, resolve, reject });\n });\n\n if (current.to) clearTimeout(current.to);\n\n current.to = setTimeout(\n () => {\n let c = calls[key].calls;\n calls[key].calls = [];\n calls[key].to = null;\n\n let url = new URL(call.endpoint);\n url.search = new URLSearchParams(call.query).toString();\n\n fetch(url.toString(), {\n method: 'POST',\n\n headers: {\n 'Content-Type': 'application/rpc+json',\n ...c[0].call.headers\n },\n body: serialize.encode({\n calls: c\n .map(x => ({\n id: x.call.id,\n name: x.call.name,\n payload: x.call.payload\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n }),\n credentials: 'include',\n\n // @ts-ignore\n keepalive: false\n })\n .then(async res => ({\n res: serialize.decode(\n (await res.json()) as {\n calls: {\n id: string;\n status: number;\n result: any;\n }[];\n }\n ),\n\n headers: res.headers\n }))\n .then(({ res, headers }) => {\n if (res.__typename == 'error') {\n let err = ServiceError.fromResponse(res);\n c.forEach(x => x.reject(err));\n return;\n }\n\n for (let call of c) {\n let callRes = res.calls.find((x: any) => x.id == call.call.id);\n if (!callRes) {\n let err = new ServiceError(\n internalServerError({ message: 'Call not returned' })\n );\n call.reject(err);\n return;\n }\n\n if (callRes.status >= 200 && callRes.status < 300) {\n call.resolve({\n // data: O;\n // status: number;\n // headers: Record<string, string>;\n\n data: callRes.result,\n status: callRes.status,\n headers\n });\n }\n\n let err = ServiceError.fromResponse(callRes.result);\n call.reject(err);\n }\n })\n .catch(e => {\n c.forEach(x =>\n x.reject(\n new ServiceError(\n internalServerError({\n message:\n typeof window == 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n )\n )\n );\n });\n },\n isServer ? 0 : 10\n );\n\n return promise;\n};\n\nlet requesterInternal: Requester = async call => {\n let id = generateRequestId();\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n\n let tries = 0;\n let error: Error | null = null;\n\n for (let header in call.headers) {\n if (call.headers[header] === undefined) delete call.headers[header];\n }\n\n if (call.query) {\n for (let query in call.query) {\n if (call.query[query] === undefined) delete call.query[query];\n }\n }\n\n let maxTries = typeof window === 'undefined' ? 6 : 3;\n let retryDelay = typeof window === 'undefined' ? 20 : 1000;\n\n while (tries < maxTries) {\n try {\n return (await performRequest({\n ...(call as any),\n id\n }).then(\n res => {\n if (!isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res);\n }\n\n return res;\n },\n err => {\n if (isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n }\n\n log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err);\n\n throw err;\n }\n )) as any;\n } catch (e: any) {\n error = e;\n\n if (isServiceError(e)) {\n // 400 errors are not retried\n if (e.data.status < 500) throw e;\n }\n }\n\n tries += 1;\n await new Promise(r => setTimeout(r, tries * retryDelay));\n }\n\n if (error) throw error;\n\n throw new ServiceError(\n internalServerError({\n message:\n typeof window == 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n );\n};\n\nexport let request: Requester = async call => {\n // try {\n return await requesterInternal(call);\n // } catch (e: any) {\n // Sentry.captureException(e);\n // throw e;\n // }\n};\n","import { proxy } from '@lowerdeck/proxy';\nimport { Requester } from './requester';\n\nexport interface ClientOpts {\n endpoint: string;\n headers?: Record<string, string | undefined>;\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;\n onRequest?: (d: {\n endpoint: string;\n name: string;\n payload: any;\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }) => any;\n}\n\nlet noopWithContext = (cb: (ctx: any) => any) => cb({});\n\nexport let clientBuilder =\n (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) =>\n <T extends object>(clientOpts: ClientOpts) =>\n proxy<T>(\n async (\n path,\n data,\n requestOpts?: {\n headers?: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }\n ) =>\n await withContext(async context => {\n let headers = {\n ...clientOpts.headers,\n ...(await clientOpts.getHeaders?.()),\n ...requestOpts?.headers\n };\n\n clientOpts.onRequest?.({\n endpoint: clientOpts.endpoint,\n name: path.join(':'),\n payload: data,\n headers,\n query: requestOpts?.query\n });\n\n if (path[path.length - 1] == 'getFull') {\n return await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.slice(0, -1).join(':'),\n headers,\n query: requestOpts?.query,\n context\n });\n }\n\n return (\n await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.join(':'),\n headers,\n query: requestOpts?.query,\n context\n })\n ).data;\n })\n );\n","import { request } from './request';\nimport { clientBuilder } from './shared/clientBuilder';\n\nexport let createClient = clientBuilder(request);\n"],"names":["index","rootId","memo","generatePlainId","isServer","window","_settle","pact","state","value","s","_Pact","bind","v","then","o","observer","log","_console","console","apply","slice","call","arguments","prototype","onFulfilled","result","this","callback","onRejected","e","_this","thenable","request","withContext","calls","createClient","Promise","resolve","_temp4","_exit","_result2","error","ServiceError","internalServerError","message","endpoint","id","generateRequestId","name","replace","tries","header","headers","undefined","query","maxTries","retryDelay","_temp3","_for","_temp2","_result","r","setTimeout","_temp","key","canonicalize","to","current","promise","reject","push","clearTimeout","c","url","URL","search","URLSearchParams","toString","fetch","method","_extends","body","serialize","encode","map","x","payload","sort","a","b","localeCompare","credentials","keepalive","res","_decode","decode","json","_res$json","_ref","__typename","_ret","_step","_loop","callRes","find","err","status","data","fromResponse","_iterator","_createForOfIteratorHelperLoose","done","forEach","performRequest","_await$performRequest","_catch","isServiceError","requesterInternal","cb","clientOpts","proxy","path","requestOpts","context","getHeaders","_clientOpts$getHeader","join","_request","onRequest","length","_await$request"],"mappings":"6fAGA,IAAIA,EAAQ,EACRC,EAASC,OAAK,WAAA,OAAMC,EAAAA,gBAAgB,GAAG,GCEvCC,EAA6B,oBAAXC,OAmDT,SAAAC,EAAEC,EAAAC,EAAAC,GACF,IAAAF,EAAAG,EAAA,iBACHC,EAAA,CACF,IAAAF,EAAAC,EAiBC,gBADQJ,EAAKM,KAAQ,KAAAL,EAAAC,IAdT,MACbA,EAAAC,EAAAC,GAECD,EAAAA,EAAKI,CAcJ,SACMC,iBACJL,EAAAK,KAAAR,EAAEM,KAAS,KAAML,EAAMC,GAAOF,EAAAM,KAAA,KAAAL,EAAA,IAIhCA,EAAAG,EAAAF,cAEMD,EAAQQ,EACVC,GAGAA,EAAAT,GAIF,CAvFZ,IAAIU,EAAM,WAAmBC,IAAAA,EACtBd,IAAUc,EAAAC,SAAQF,IAAGG,MAAAF,EAAAG,GAAAA,MAAAC,KAAAC,WAC5B,iBAT8B,WAC9B,SAAAZ,IACAA,CAkDa,OAlDbA,EAAOa,UAAQV,KAAA,SAA8BW,KAEhC,IAAAC,EAAA,IAAAf,IACEgB,KAAAjB,EAEf,KAAc,CACZ,IAAKkB,EAAQ,EAAApB,EAAAiB,EAAAI,EAAE,GAAAD,EAAW,CAC1B,IAEEtB,EASAoB,EAAG,EAAAE,EAAAD,KAAAd,GAEH,CAAc,MAAAiB,GACZxB,IAAS,EAAAwB,EAEb,CAAiB,OAAAJ,CACjB,CAEA,OAAIC,IAEJ,CAoBM,YAlBFZ,EAAA,SAAUgB,GAAE,IAEhB,IAAAtB,EAAuBsB,EAAAlB,EAEN,EAAbkB,IACAzB,EAAKoB,EAAW,EAAAD,EAAMA,EAAAhB,GAAAA,GACboB,IAELH,EAAU,EAAAG,EAAiBpB,IAG/BH,EAAKoB,EAAK,EAAAjB,EAGR,CAAA,MAAAqB,GACExB,EAAAoB,EAAA,EAAAI,EACA,CACD,EACDJ,CACE,EACGf,CACC,CArDgB,cAgGHqB,uBACOrB,GAAA,EAAAqB,EAAAtB,MC/E/BuB,EAAoBC,EDPnBC,EASA,CAAA,EElBOC,GDgBRH,EDqLQ,SAA2BX,GAAOe,OAAAA,QAAAC,QApExB,SAAoBhB,GAAI,IAAGiB,IAiE5CC,EAjE4CD,EAAAA,SAAAE,GAAA,GAAAD,EAAA,OAAAC,EAwD9C,GAAIC,EAAO,MAAMA,EAEjB,MAAU,IAAAC,EAAYA,aACpBC,EAAmBA,oBAAC,CAClBC,QACmB,oBAAVxC,OACH,yBAC0BiB,0BAAAA,EAAKwB,WAEvC,EAhEEC,ED/HyB,WAC7B,IAAIA,EAAa9C,QAAAA,IAAYD,IAAAA,EAE7B,OADAA,GAAS,EACF+C,CACT,CC2HWC,GACT/B,EAAG,SAAUK,EAAK2B,KAAKC,QAAQ,IAAK,KAAI,IAAIH,EAAE,WAAYzB,GAE1D,IAAI6B,EAAQ,EACRT,EAAsB,KAE1B,IAAK,IAAIU,KAAU9B,EAAK+B,aACOC,IAAzBhC,EAAK+B,QAAQD,WAA8B9B,EAAK+B,QAAQD,GAG9D,GAAI9B,EAAKiC,MACP,IAAK,IAAIA,KAASjC,EAAKiC,WACKD,IAAtBhC,EAAKiC,MAAMA,WAA6BjC,EAAKiC,MAAMA,GAI3D,IAAIC,EAA6B,oBAAXnD,OAAyB,EAAI,EAC/CoD,EAA+B,oBAAXpD,OAAyB,GAAK,IAAKqD,8iBAAAC,CAAA,WAAA,OAAAnB,GAEpDW,EAAQK,CAAQ,EAAE,EAAA,WAAA,SAAAI,EAAAC,GAAArB,OAAAA,EAAAqB,GAgCvBV,GAAS,EAAEd,QAAAC,QACL,IAAID,QAAQ,SAAAyB,GAAK,OAAAC,WAAWD,EAAGX,EAAQM,EAAW,IAAC3C,KAAA,WAAA,GAAA,CAAA,IAAAkD,0BAhCrD3B,QAAAC,QAlIa,SAAChB,GACpB,IAAI2C,EAAG,GAAMC,EAAYA,aAAC5C,EAAK+B,SAAWa,EAAAA,aAAa5C,EAAKiC,OAASjC,EAAKwB,SAErEX,EAAM8B,KAAM9B,EAAM8B,GAAO,CAAE9B,MAAO,GAAIgC,GAAI,OAC/C,IAAIC,EAAUjC,EAAM8B,GAEhBI,EAAU,IAAIhC,QAAQ,SAACC,EAASgC,GAClCF,EAAQjC,MAAMoC,KAAK,CAAEjD,KAAAA,EAAMgB,QAAAA,EAASgC,OAAAA,GACtC,GAkGA,OAhGIF,EAAQD,IAAIK,aAAaJ,EAAQD,IAErCC,EAAQD,GAAKJ,WACX,WACE,IAAIU,EAAItC,EAAM8B,GAAK9B,MACnBA,EAAM8B,GAAK9B,MAAQ,GACnBA,EAAM8B,GAAKE,GAAK,KAEhB,IAAIO,EAAM,IAAIC,IAAIrD,EAAKwB,UACvB4B,EAAIE,OAAS,IAAIC,gBAAgBvD,EAAKiC,OAAOuB,WAE7CC,MAAML,EAAII,WAAY,CACpBE,OAAQ,OAER3B,QAAO4B,EAAA,CACL,eAAgB,wBACbR,EAAE,GAAGnD,KAAK+B,SAEf6B,KAAMC,EAAAA,UAAUC,OAAO,CACrBjD,MAAOsC,EACJY,IAAI,SAAAC,GAAC,MAAK,CACTvC,GAAIuC,EAAEhE,KAAKyB,GACXE,KAAMqC,EAAEhE,KAAK2B,KACbsC,QAASD,EAAEhE,KAAKiE,QACjB,GACAC,KAAK,SAACC,EAAGC,GAAC,OAAKD,EAAExC,KAAK0C,cAAcD,EAAEzC,KAAK,KAEhD2C,YAAa,UAGbC,WAAW,IAEV/E,KAAWgF,SAAAA,GAAGC,IAAAA,IAAAA,EACRZ,EAAAA,UAAUa,OAAM3D,OAAAA,QAAAC,QACZwD,EAAIG,QAAMnF,KAAA,SAAAoF,GAAA,MAFD,CAClBJ,IAAGC,EAAAzE,KAAE6D,EAASA,UAAAe,GAUd7C,QAASyC,EAAIzC,QACd,EAAAvB,CAAAA,MAAAA,GAAAO,OAAAA,QAAAiC,OAAAxC,EAAC,CAAA,GACDhB,KAAK,SAAAqF,GAAG,IAAAL,EAAGK,EAAHL,IAAKzC,EAAO8C,EAAP9C,QACZ,GAAsB,SAAlByC,EAAIM,YAMR,IAFC,IA0BAC,EAxBiBC,EAFjBC,EAAAA,WAEmB,IAAXjF,EAAIgF,EAAA7F,MACP+F,EAAUV,EAAI3D,MAAMsE,KAAK,SAACnB,GAAM,OAAKA,EAAEvC,IAAMzB,EAAKA,KAAKyB,EAAE,GAC7D,IAAKyD,EAAS,CACZ,IAAIE,EAAM,IAAI/D,EAAYA,aACxBC,EAAmBA,oBAAC,CAAEC,QAAS,uBAEhB,OAAjBvB,EAAKgD,OAAOoC,GAAK,CAAA7F,OAAA,EAEnB,CAEI2F,EAAQG,QAAU,KAAOH,EAAQG,OAAS,KAC5CrF,EAAKgB,QAAQ,CAKXsE,KAAMJ,EAAQ9E,OACdiF,OAAQH,EAAQG,OAChBtD,QAAAA,IAIJ,IAAIqD,EAAM/D,EAAYA,aAACkE,aAAaL,EAAQ9E,QAC5CJ,EAAKgD,OAAOoC,EACd,EAxBAI,2pBAAAC,CAAiBtC,KAAC6B,EAAAQ,KAAAE,MAAAX,GAAAA,EAAAE,IAAAF,OAAAA,EAAAxF,MANlB,CACE,IAAI6F,EAAM/D,EAAAA,aAAakE,aAAaf,GACpCrB,EAAEwC,QAAQ,SAAA3B,GAAK,OAAAA,EAAEhB,OAAOoC,EAAI,EAE9B,CA2BF,GAAE,MACK,SAAA5E,GACL2C,EAAEwC,QAAQ,SAAA3B,GACR,OAAAA,EAAEhB,OACA,IAAI3B,EAAAA,aACFC,EAAAA,oBAAoB,CAClBC,QACmB,oBAAVxC,OACH,mDAC0BiB,EAAKwB,YAG1C,EAEL,EACJ,EACA1C,EAAW,EAAI,IAGViE,CACT,CAwBoB6C,CAAcjC,EACtB3D,CAAAA,EAAAA,EACJyB,CAAAA,GAAAA,KACCjC,KACD,SAAAgF,GAKE,OAJK1F,GACHa,EAAaK,SAAAA,EAAK2B,KAAKC,QAAQ,IAAK,KAAI,IAAIH,EAAE,YAAa+C,GAGtDA,CACT,EACA,SAAAY,GAOE,MANItG,GACFa,EAAG,SAAUK,EAAK2B,KAAKC,QAAQ,IAAK,KAAQH,IAAAA,EAAczB,WAAAA,GAG5DL,EAAG,SAAUK,EAAK2B,KAAKC,QAAQ,IAAK,KAAI,IAAIH,EAAE,UAAW2D,GAEnDA,CACR,IACD5F,KAAAqG,SAAAA,GAAAA,OAAA3E,EAAA2E,EAAAA,CAAA,4DAWsDC,CAAA,EAVhDtF,SAAAA,GACG,GAAVY,EAAQZ,EAEJuF,EAAAA,eAAevF,IAEbA,EAAE8E,KAAKD,OAAS,IAAK,MAAM7E,CAEnC,GAACkC,OAAAA,GAAAA,EAAAlD,KAAAkD,EAAAlD,KAAA8C,GAAAA,EAAAI,EAIH,GAAC,OAAA3B,QAAAC,QAAAoB,GAAAA,EAAA5C,KAAA4C,EAAA5C,KAAAyB,GAAAA,EAAAmB,GAYH,CAAC,MAAA5B,GAAA,OAAAO,QAAAiC,OAAAxC,EAAA,CAAA,CAIcwF,CAAkBhG,GAKjC,OC5LuBY,IAAAA,IAAAA,EAHD,SAACqF,GAAqB,OAAKA,EAAG,CAAE,EAAC,GAIrD,SAAmBC,GAAsB,OACvCC,EAAKA,MAAA,SAEDC,EACAd,EACAe,GAGCtF,IAAAA,OAAAA,QAAAC,QAEKJ,EAAW,SAAO0F,GAAU,IAAA,OAAAvF,QAAAC,cAGpBkF,EAAWK,kBAAXL,EAAWK,cAAc/G,KAAAgH,SAAAA,GAAAtF,IAAAA,EAAAoB,SAAAA,EAAAC,GAAArB,OAAAA,EAAAqB,EAAAxB,QAAAC,QAwB7BL,EAAQ,CACZa,SAAU0E,EAAW1E,SACrByC,QAASqB,EACT3D,KAAMyE,EAAKK,KAAK,KAChB1E,QAAAA,EACAE,MAAkB,MAAXoE,OAAW,EAAXA,EAAapE,MACpBqE,QAAAA,KACA9G,KAAAkH,SAAAA,GARJ,OAAOA,EASLpB,IAAK,EAAA,CAlCP,IAAIvD,EAAO4B,KACNuC,EAAWnE,QAAOyE,EAElBH,MAAAA,OAAAA,EAAAA,EAAatE,SAGlBmE,MAAAA,EAAWS,WAAXT,EAAWS,UAAY,CACrBnF,SAAU0E,EAAW1E,SACrBG,KAAMyE,EAAKK,KAAK,KAChBxC,QAASqB,EACTvD,QAAAA,EACAE,YAAOoE,SAAAA,EAAapE,QACnB,IAAAS,EAAA,WAAA,GAE0B,WAAzB0D,EAAKA,EAAKQ,OAAS,UAAe7F,QAAAC,QACvBL,EAAQ,CACnBa,SAAU0E,EAAW1E,SACrByC,QAASqB,EACT3D,KAAMyE,EAAKrG,MAAM,GAAI,GAAG0G,KAAK,KAC7B1E,QAAAA,EACAE,MAAOoE,MAAAA,OAAAA,EAAAA,EAAapE,MACpBqE,QAAAA,KACA9G,cAAAqH,GAAA,OAAA3F,EAAA,EAAA2F,CAAA,EAAAnE,CAVD,GAUCA,OAAAA,GAAAA,EAAAlD,KAAAkD,EAAAlD,KAAA8C,GAAAA,EAAAI,EAAA,EAaN,CAAC,MAAAlC,GAAAO,OAAAA,QAAAiC,OAAAxC,EAAA,CAAA,GAACA,CAAAA,MAAAA,UAAAO,QAAAiC,OAAAxC,EACL,CAAA,EAAA"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/shared/requester.ts","../src/request.ts","../src/shared/clientBuilder.ts","../src/index.ts"],"sourcesContent":["import { generatePlainId } from '@lowerdeck/id';\nimport { memo } from '@lowerdeck/memo';\n\nlet index = 0;\nlet rootId = memo(() => generatePlainId(10));\n\nexport let generateRequestId = () => {\n let id = `call_${rootId()}_${index}`;\n index += 1;\n return id;\n};\n\nexport interface Call {\n id: string;\n name: string;\n payload: any;\n endpoint: string;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}\n\nexport type Requester = (\n call: Omit<Call, 'id' | 'headers' | 'query'> & {\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n context: any;\n }\n) => Promise<{\n data: any;\n status: number;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}>;\n","import { canonicalize } from '@lowerdeck/canonicalize';\nimport { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error';\nimport { serialize } from '@lowerdeck/serialize';\nimport { Call, generateRequestId, Requester } from './shared/requester';\n\n// @ts-ignore\nlet isServer = typeof window === 'undefined';\n\nlet log = (...args: any[]) => {\n if (!isServer) console.log(...args);\n};\n\nlet calls: {\n [key: string]: {\n calls: {\n call: Call;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }[];\n to: any;\n };\n} = {};\n\nlet performRequest = (call: Call) => {\n let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`;\n\n if (!calls[key]) calls[key] = { calls: [], to: null };\n let current = calls[key];\n\n let promise = new Promise((resolve, reject) => {\n current.calls.push({ call, resolve, reject });\n });\n\n if (current.to) clearTimeout(current.to);\n\n current.to = setTimeout(\n () => {\n let c = calls[key].calls;\n calls[key].calls = [];\n calls[key].to = null;\n\n let url = new URL(call.endpoint);\n url.search = new URLSearchParams(call.query).toString();\n\n fetch(url.toString(), {\n method: 'POST',\n\n headers: {\n 'Content-Type': 'application/rpc+json',\n ...c[0].call.headers\n },\n body: serialize.encode({\n calls: c\n .map(x => ({\n id: x.call.id,\n name: x.call.name,\n payload: x.call.payload\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n }),\n credentials: 'include',\n\n // @ts-ignore\n keepalive: false\n })\n .then(async res => ({\n res: serialize.decode(\n (await res.json()) as {\n calls: {\n id: string;\n status: number;\n result: any;\n }[];\n }\n ),\n\n headers: res.headers\n }))\n .then(({ res, headers }) => {\n if (res.__typename == 'error') {\n let err = ServiceError.fromResponse(res);\n c.forEach(x => x.reject(err));\n return;\n }\n\n for (let call of c) {\n let callRes = res.calls.find((x: any) => x.id == call.call.id);\n if (!callRes) {\n let err = new ServiceError(\n internalServerError({ message: 'Call not returned' })\n );\n call.reject(err);\n return;\n }\n\n if (callRes.status >= 200 && callRes.status < 300) {\n call.resolve({\n // data: O;\n // status: number;\n // headers: Record<string, string>;\n\n data: callRes.result,\n status: callRes.status,\n headers\n });\n }\n\n let err = ServiceError.fromResponse(callRes.result);\n call.reject(err);\n }\n })\n .catch(e => {\n c.forEach(x =>\n x.reject(\n new ServiceError(\n internalServerError({\n message:\n typeof window != 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n )\n )\n );\n });\n },\n isServer ? 0 : 10\n );\n\n return promise;\n};\n\nlet requesterInternal: Requester = async call => {\n let id = generateRequestId();\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n\n let tries = 0;\n let error: Error | null = null;\n\n for (let header in call.headers) {\n if (call.headers[header] === undefined) delete call.headers[header];\n }\n\n if (call.query) {\n for (let query in call.query) {\n if (call.query[query] === undefined) delete call.query[query];\n }\n }\n\n let maxTries = typeof window === 'undefined' ? 6 : 3;\n let retryDelay = typeof window === 'undefined' ? 20 : 1000;\n\n while (tries < maxTries) {\n try {\n return (await performRequest({\n ...(call as any),\n id\n }).then(\n res => {\n if (!isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res);\n }\n\n return res;\n },\n err => {\n if (isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n }\n\n log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err);\n\n throw err;\n }\n )) as any;\n } catch (e: any) {\n error = e;\n\n if (isServiceError(e)) {\n // 400 errors are not retried\n if (e.data.status < 500) throw e;\n }\n }\n\n tries += 1;\n await new Promise(r => setTimeout(r, tries * retryDelay));\n }\n\n if (error) throw error;\n\n throw new ServiceError(\n internalServerError({\n message:\n typeof window != 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n );\n};\n\nexport let request: Requester = async call => {\n // try {\n return await requesterInternal(call);\n // } catch (e: any) {\n // Sentry.captureException(e);\n // throw e;\n // }\n};\n","import { proxy } from '@lowerdeck/proxy';\nimport { Requester } from './requester';\n\nexport interface ClientOpts {\n endpoint: string;\n headers?: Record<string, string | undefined>;\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;\n onRequest?: (d: {\n endpoint: string;\n name: string;\n payload: any;\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }) => any;\n}\n\nlet noopWithContext = (cb: (ctx: any) => any) => cb({});\n\nexport let clientBuilder =\n (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) =>\n <T extends object>(clientOpts: ClientOpts) =>\n proxy<T>(\n async (\n path,\n data,\n requestOpts?: {\n headers?: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }\n ) =>\n await withContext(async context => {\n let headers = {\n ...clientOpts.headers,\n ...(await clientOpts.getHeaders?.()),\n ...requestOpts?.headers\n };\n\n clientOpts.onRequest?.({\n endpoint: clientOpts.endpoint,\n name: path.join(':'),\n payload: data,\n headers,\n query: requestOpts?.query\n });\n\n if (path[path.length - 1] == 'getFull') {\n return await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.slice(0, -1).join(':'),\n headers,\n query: requestOpts?.query,\n context\n });\n }\n\n return (\n await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.join(':'),\n headers,\n query: requestOpts?.query,\n context\n })\n ).data;\n })\n );\n","import { request } from './request';\nimport { clientBuilder } from './shared/clientBuilder';\n\nexport let createClient = clientBuilder(request);\n"],"names":["index","rootId","memo","generatePlainId","isServer","window","_settle","pact","state","value","s","_Pact","bind","v","then","o","observer","log","_console","console","apply","slice","call","arguments","prototype","onFulfilled","result","this","callback","onRejected","e","_this","thenable","request","withContext","calls","createClient","Promise","resolve","_temp4","_exit","_result2","error","ServiceError","internalServerError","message","endpoint","id","generateRequestId","name","replace","tries","header","headers","undefined","query","maxTries","retryDelay","_temp3","_for","_temp2","_result","r","setTimeout","_temp","key","canonicalize","to","current","promise","reject","push","clearTimeout","c","url","URL","search","URLSearchParams","toString","fetch","method","_extends","body","serialize","encode","map","x","payload","sort","a","b","localeCompare","credentials","keepalive","res","_decode","decode","json","_res$json","_ref","__typename","_ret","_step","_loop","callRes","find","err","status","data","fromResponse","_iterator","_createForOfIteratorHelperLoose","done","forEach","performRequest","_await$performRequest","_catch","isServiceError","requesterInternal","cb","clientOpts","proxy","path","requestOpts","context","getHeaders","_clientOpts$getHeader","join","_request","onRequest","length","_await$request"],"mappings":"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"}
|
package/dist/index.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{canonicalize as e}from"@lowerdeck/canonicalize";import{ServiceError as n,internalServerError as r,isServiceError as t}from"@lowerdeck/error";import{serialize as o}from"@lowerdeck/serialize";import{generatePlainId as i}from"@lowerdeck/id";import{memo as a}from"@lowerdeck/memo";import{proxy as u}from"@lowerdeck/proxy";function c(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=Array(n);r<n;r++)t[r]=e[r];return t}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},l.apply(null,arguments)}var s=0,f=a(function(){return i(10)}),d="undefined"==typeof window;function v(e,n,r){if(!e.s){if(r instanceof m){if(!r.s)return void(r.o=v.bind(null,e,n));1&n&&(n=r.s),r=r.v}if(r&&r.then)return void r.then(v.bind(null,e,n),v.bind(null,e,2));e.s=n,e.v=r;var t=e.o;t&&t(e)}}var h=function(){var e;d||(e=console).log.apply(e,[].slice.call(arguments))},m=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(n,r){var t=new e,o=this.s;if(o){var i=1&o?n:r;if(i){try{v(t,1,i(this.v))}catch(e){v(t,2,e)}return t}return this}return this.o=function(e){try{var o=e.v;1&e.s?v(t,1,n?n(o):o):r?v(t,1,r(o)):v(t,2,o)}catch(e){v(t,2,e)}},t},e}();function p(e){return e instanceof m&&1&e.s}var y,w,b={},g=(y=function(i){return Promise.resolve(function(i){try{var a,u=function(e){if(a)return e;if(g)throw g;throw new n(r({message:"undefined"
|
|
1
|
+
import{canonicalize as e}from"@lowerdeck/canonicalize";import{ServiceError as n,internalServerError as r,isServiceError as t}from"@lowerdeck/error";import{serialize as o}from"@lowerdeck/serialize";import{generatePlainId as i}from"@lowerdeck/id";import{memo as a}from"@lowerdeck/memo";import{proxy as u}from"@lowerdeck/proxy";function c(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=Array(n);r<n;r++)t[r]=e[r];return t}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},l.apply(null,arguments)}var s=0,f=a(function(){return i(10)}),d="undefined"==typeof window;function v(e,n,r){if(!e.s){if(r instanceof m){if(!r.s)return void(r.o=v.bind(null,e,n));1&n&&(n=r.s),r=r.v}if(r&&r.then)return void r.then(v.bind(null,e,n),v.bind(null,e,2));e.s=n,e.v=r;var t=e.o;t&&t(e)}}var h=function(){var e;d||(e=console).log.apply(e,[].slice.call(arguments))},m=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(n,r){var t=new e,o=this.s;if(o){var i=1&o?n:r;if(i){try{v(t,1,i(this.v))}catch(e){v(t,2,e)}return t}return this}return this.o=function(e){try{var o=e.v;1&e.s?v(t,1,n?n(o):o):r?v(t,1,r(o)):v(t,2,o)}catch(e){v(t,2,e)}},t},e}();function p(e){return e instanceof m&&1&e.s}var y,w,b={},g=(y=function(i){return Promise.resolve(function(i){try{var a,u=function(e){if(a)return e;if(g)throw g;throw new n(r({message:"undefined"!=typeof window?"Unable to reach server":"Unable to reach server "+i.endpoint}))},y=function(){var e="call_"+f()+"_"+s;return s+=1,e}();h("[call:"+i.name.replace(":","-")+":"+y+"] Queued",i);var w=0,g=null;for(var j in i.headers)void 0===i.headers[j]&&delete i.headers[j];if(i.query)for(var P in i.query)void 0===i.query[P]&&delete i.query[P];var q="undefined"==typeof window?6:3,S="undefined"==typeof window?20:1e3,k=function(e,n,r){for(var t;;){var o=e();if(p(o)&&(o=o.v),!o)return i;if(o.then){t=0;break}var i=r();if(i&&i.then){if(!p(i)){t=1;break}i=i.s}}var a=new m,u=v.bind(null,a,2);return(0===t?o.then(l):1===t?i.then(c):(void 0).then(function(){(o=e())?o.then?o.then(l).then(void 0,u):l(o):v(a,1,i)})).then(void 0,u),a;function c(n){i=n;do{if(!(o=e())||p(o)&&!o.v)return void v(a,1,i);if(o.then)return void o.then(l).then(void 0,u);p(i=r())&&(i=i.v)}while(!i||!i.then);i.then(c).then(void 0,u)}function l(e){e?(i=r())&&i.then?i.then(c).then(void 0,u):c(i):v(a,1,i)}}(function(){return!a&&w<q},0,function(){function u(e){return a?e:(w+=1,Promise.resolve(new Promise(function(e){return setTimeout(e,w*S)})).then(function(){}))}var s=function(t,u){try{var s=Promise.resolve(function(t){var i=""+e(t.headers)+e(t.query)+t.endpoint;b[i]||(b[i]={calls:[],to:null});var a=b[i],u=new Promise(function(e,n){a.calls.push({call:t,resolve:e,reject:n})});return a.to&&clearTimeout(a.to),a.to=setTimeout(function(){var e=b[i].calls;b[i].calls=[],b[i].to=null;var a=new URL(t.endpoint);a.search=new URLSearchParams(t.query).toString(),fetch(a.toString(),{method:"POST",headers:l({"Content-Type":"application/rpc+json"},e[0].call.headers),body:o.encode({calls:e.map(function(e){return{id:e.call.id,name:e.call.name,payload:e.call.payload}}).sort(function(e,n){return e.name.localeCompare(n.name)})}),credentials:"include",keepalive:!1}).then(function(e){try{var n=o.decode;return Promise.resolve(e.json()).then(function(r){return{res:n.call(o,r),headers:e.headers}})}catch(e){return Promise.reject(e)}}).then(function(t){var o=t.res,i=t.headers;if("error"!=o.__typename){for(var a,u,l=function(){var e=u.value,t=o.calls.find(function(n){return n.id==e.call.id});if(!t){var a=new n(r({message:"Call not returned"}));return e.reject(a),{v:void 0}}t.status>=200&&t.status<300&&e.resolve({data:t.result,status:t.status,headers:i});var c=n.fromResponse(t.result);e.reject(c)},s=function(e){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,n){if(e){if("string"==typeof e)return c(e,n);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,n):void 0}}(e))){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(e);!(u=s()).done;)if(a=l())return a.v}else{var f=n.fromResponse(o);e.forEach(function(e){return e.reject(f)})}}).catch(function(o){e.forEach(function(e){return e.reject(new n(r({message:"undefined"!=typeof window?"Unable to reach server":"Unable to reach server "+t.endpoint})))})})},d?0:10),u}(l({},i,{id:y})).then(function(e){return d||h("[call:"+i.name.replace(":","-")+":"+y+"] Success",e),e},function(e){throw d&&h("[call:"+i.name.replace(":","-")+":"+y+"] Queued",i),h("[call:"+i.name.replace(":","-")+":"+y+"] Error",e),e})).then(function(e){return a=1,e})}catch(e){return u(e)}return s&&s.then?s.then(void 0,u):s}(0,function(e){if(g=e,t(e)&&e.data.status<500)throw e});return s&&s.then?s.then(u):u(s)});return Promise.resolve(k&&k.then?k.then(u):u(k))}catch(e){return Promise.reject(e)}}(i))},void 0===w&&(w=function(e){return e({})}),function(e){return u(function(n,r,t){try{return Promise.resolve(w(function(o){try{return Promise.resolve(null==e.getHeaders?void 0:e.getHeaders()).then(function(i){var a;function u(i){return a?i:Promise.resolve(y({endpoint:e.endpoint,payload:r,name:n.join(":"),headers:c,query:null==t?void 0:t.query,context:o})).then(function(e){return e.data})}var c=l({},e.headers,i,null==t?void 0:t.headers);null==e.onRequest||e.onRequest({endpoint:e.endpoint,name:n.join(":"),payload:r,headers:c,query:null==t?void 0:t.query});var s=function(){if("getFull"==n[n.length-1])return Promise.resolve(y({endpoint:e.endpoint,payload:r,name:n.slice(0,-1).join(":"),headers:c,query:null==t?void 0:t.query,context:o})).then(function(e){return a=1,e})}();return s&&s.then?s.then(u):u(s)})}catch(e){return Promise.reject(e)}}))}catch(e){return Promise.reject(e)}})});export{g as createClient};
|
|
2
2
|
//# sourceMappingURL=index.module.js.map
|
package/dist/index.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.js","sources":["../src/shared/requester.ts","../src/request.ts","../src/shared/clientBuilder.ts","../src/index.ts"],"sourcesContent":["import { generatePlainId } from '@lowerdeck/id';\nimport { memo } from '@lowerdeck/memo';\n\nlet index = 0;\nlet rootId = memo(() => generatePlainId(10));\n\nexport let generateRequestId = () => {\n let id = `call_${rootId()}_${index}`;\n index += 1;\n return id;\n};\n\nexport interface Call {\n id: string;\n name: string;\n payload: any;\n endpoint: string;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}\n\nexport type Requester = (\n call: Omit<Call, 'id' | 'headers' | 'query'> & {\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n context: any;\n }\n) => Promise<{\n data: any;\n status: number;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}>;\n","import { canonicalize } from '@lowerdeck/canonicalize';\nimport { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error';\nimport { serialize } from '@lowerdeck/serialize';\nimport { Call, generateRequestId, Requester } from './shared/requester';\n\n// @ts-ignore\nlet isServer = typeof window === 'undefined';\n\nlet log = (...args: any[]) => {\n if (!isServer) console.log(...args);\n};\n\nlet calls: {\n [key: string]: {\n calls: {\n call: Call;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }[];\n to: any;\n };\n} = {};\n\nlet performRequest = (call: Call) => {\n let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`;\n\n if (!calls[key]) calls[key] = { calls: [], to: null };\n let current = calls[key];\n\n let promise = new Promise((resolve, reject) => {\n current.calls.push({ call, resolve, reject });\n });\n\n if (current.to) clearTimeout(current.to);\n\n current.to = setTimeout(\n () => {\n let c = calls[key].calls;\n calls[key].calls = [];\n calls[key].to = null;\n\n let url = new URL(call.endpoint);\n url.search = new URLSearchParams(call.query).toString();\n\n fetch(url.toString(), {\n method: 'POST',\n\n headers: {\n 'Content-Type': 'application/rpc+json',\n ...c[0].call.headers\n },\n body: serialize.encode({\n calls: c\n .map(x => ({\n id: x.call.id,\n name: x.call.name,\n payload: x.call.payload\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n }),\n credentials: 'include',\n\n // @ts-ignore\n keepalive: false\n })\n .then(async res => ({\n res: serialize.decode(\n (await res.json()) as {\n calls: {\n id: string;\n status: number;\n result: any;\n }[];\n }\n ),\n\n headers: res.headers\n }))\n .then(({ res, headers }) => {\n if (res.__typename == 'error') {\n let err = ServiceError.fromResponse(res);\n c.forEach(x => x.reject(err));\n return;\n }\n\n for (let call of c) {\n let callRes = res.calls.find((x: any) => x.id == call.call.id);\n if (!callRes) {\n let err = new ServiceError(\n internalServerError({ message: 'Call not returned' })\n );\n call.reject(err);\n return;\n }\n\n if (callRes.status >= 200 && callRes.status < 300) {\n call.resolve({\n // data: O;\n // status: number;\n // headers: Record<string, string>;\n\n data: callRes.result,\n status: callRes.status,\n headers\n });\n }\n\n let err = ServiceError.fromResponse(callRes.result);\n call.reject(err);\n }\n })\n .catch(e => {\n c.forEach(x =>\n x.reject(\n new ServiceError(\n internalServerError({\n message:\n typeof window == 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n )\n )\n );\n });\n },\n isServer ? 0 : 10\n );\n\n return promise;\n};\n\nlet requesterInternal: Requester = async call => {\n let id = generateRequestId();\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n\n let tries = 0;\n let error: Error | null = null;\n\n for (let header in call.headers) {\n if (call.headers[header] === undefined) delete call.headers[header];\n }\n\n if (call.query) {\n for (let query in call.query) {\n if (call.query[query] === undefined) delete call.query[query];\n }\n }\n\n let maxTries = typeof window === 'undefined' ? 6 : 3;\n let retryDelay = typeof window === 'undefined' ? 20 : 1000;\n\n while (tries < maxTries) {\n try {\n return (await performRequest({\n ...(call as any),\n id\n }).then(\n res => {\n if (!isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res);\n }\n\n return res;\n },\n err => {\n if (isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n }\n\n log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err);\n\n throw err;\n }\n )) as any;\n } catch (e: any) {\n error = e;\n\n if (isServiceError(e)) {\n // 400 errors are not retried\n if (e.data.status < 500) throw e;\n }\n }\n\n tries += 1;\n await new Promise(r => setTimeout(r, tries * retryDelay));\n }\n\n if (error) throw error;\n\n throw new ServiceError(\n internalServerError({\n message:\n typeof window == 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n );\n};\n\nexport let request: Requester = async call => {\n // try {\n return await requesterInternal(call);\n // } catch (e: any) {\n // Sentry.captureException(e);\n // throw e;\n // }\n};\n","import { proxy } from '@lowerdeck/proxy';\nimport { Requester } from './requester';\n\nexport interface ClientOpts {\n endpoint: string;\n headers?: Record<string, string | undefined>;\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;\n onRequest?: (d: {\n endpoint: string;\n name: string;\n payload: any;\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }) => any;\n}\n\nlet noopWithContext = (cb: (ctx: any) => any) => cb({});\n\nexport let clientBuilder =\n (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) =>\n <T extends object>(clientOpts: ClientOpts) =>\n proxy<T>(\n async (\n path,\n data,\n requestOpts?: {\n headers?: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }\n ) =>\n await withContext(async context => {\n let headers = {\n ...clientOpts.headers,\n ...(await clientOpts.getHeaders?.()),\n ...requestOpts?.headers\n };\n\n clientOpts.onRequest?.({\n endpoint: clientOpts.endpoint,\n name: path.join(':'),\n payload: data,\n headers,\n query: requestOpts?.query\n });\n\n if (path[path.length - 1] == 'getFull') {\n return await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.slice(0, -1).join(':'),\n headers,\n query: requestOpts?.query,\n context\n });\n }\n\n return (\n await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.join(':'),\n headers,\n query: requestOpts?.query,\n context\n })\n ).data;\n })\n );\n","import { request } from './request';\nimport { clientBuilder } from './shared/clientBuilder';\n\nexport let createClient = clientBuilder(request);\n"],"names":["index","rootId","memo","generatePlainId","isServer","window","_settle","pact","state","value","s","_Pact","bind","v","then","o","observer","log","_console","console","apply","slice","call","arguments","prototype","onFulfilled","result","this","callback","onRejected","e","_this","thenable","request","withContext","calls","createClient","Promise","resolve","_temp4","_exit","_result2","error","ServiceError","internalServerError","message","endpoint","id","generateRequestId","name","replace","tries","header","headers","undefined","query","maxTries","retryDelay","_temp3","_for","_temp2","_result","r","setTimeout","_temp","key","canonicalize","to","current","promise","reject","push","clearTimeout","c","url","URL","search","URLSearchParams","toString","fetch","method","_extends","body","serialize","encode","map","x","payload","sort","a","b","localeCompare","credentials","keepalive","res","_decode","decode","json","_res$json","_ref","__typename","_ret","_step","_loop","callRes","find","err","status","data","fromResponse","_iterator","_createForOfIteratorHelperLoose","done","forEach","performRequest","_await$performRequest","_catch","isServiceError","requesterInternal","cb","clientOpts","proxy","path","requestOpts","context","getHeaders","_clientOpts$getHeader","join","_request","onRequest","length","_await$request"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.module.js","sources":["../src/shared/requester.ts","../src/request.ts","../src/shared/clientBuilder.ts","../src/index.ts"],"sourcesContent":["import { generatePlainId } from '@lowerdeck/id';\nimport { memo } from '@lowerdeck/memo';\n\nlet index = 0;\nlet rootId = memo(() => generatePlainId(10));\n\nexport let generateRequestId = () => {\n let id = `call_${rootId()}_${index}`;\n index += 1;\n return id;\n};\n\nexport interface Call {\n id: string;\n name: string;\n payload: any;\n endpoint: string;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}\n\nexport type Requester = (\n call: Omit<Call, 'id' | 'headers' | 'query'> & {\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n context: any;\n }\n) => Promise<{\n data: any;\n status: number;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}>;\n","import { canonicalize } from '@lowerdeck/canonicalize';\nimport { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error';\nimport { serialize } from '@lowerdeck/serialize';\nimport { Call, generateRequestId, Requester } from './shared/requester';\n\n// @ts-ignore\nlet isServer = typeof window === 'undefined';\n\nlet log = (...args: any[]) => {\n if (!isServer) console.log(...args);\n};\n\nlet calls: {\n [key: string]: {\n calls: {\n call: Call;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }[];\n to: any;\n };\n} = {};\n\nlet performRequest = (call: Call) => {\n let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`;\n\n if (!calls[key]) calls[key] = { calls: [], to: null };\n let current = calls[key];\n\n let promise = new Promise((resolve, reject) => {\n current.calls.push({ call, resolve, reject });\n });\n\n if (current.to) clearTimeout(current.to);\n\n current.to = setTimeout(\n () => {\n let c = calls[key].calls;\n calls[key].calls = [];\n calls[key].to = null;\n\n let url = new URL(call.endpoint);\n url.search = new URLSearchParams(call.query).toString();\n\n fetch(url.toString(), {\n method: 'POST',\n\n headers: {\n 'Content-Type': 'application/rpc+json',\n ...c[0].call.headers\n },\n body: serialize.encode({\n calls: c\n .map(x => ({\n id: x.call.id,\n name: x.call.name,\n payload: x.call.payload\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n }),\n credentials: 'include',\n\n // @ts-ignore\n keepalive: false\n })\n .then(async res => ({\n res: serialize.decode(\n (await res.json()) as {\n calls: {\n id: string;\n status: number;\n result: any;\n }[];\n }\n ),\n\n headers: res.headers\n }))\n .then(({ res, headers }) => {\n if (res.__typename == 'error') {\n let err = ServiceError.fromResponse(res);\n c.forEach(x => x.reject(err));\n return;\n }\n\n for (let call of c) {\n let callRes = res.calls.find((x: any) => x.id == call.call.id);\n if (!callRes) {\n let err = new ServiceError(\n internalServerError({ message: 'Call not returned' })\n );\n call.reject(err);\n return;\n }\n\n if (callRes.status >= 200 && callRes.status < 300) {\n call.resolve({\n // data: O;\n // status: number;\n // headers: Record<string, string>;\n\n data: callRes.result,\n status: callRes.status,\n headers\n });\n }\n\n let err = ServiceError.fromResponse(callRes.result);\n call.reject(err);\n }\n })\n .catch(e => {\n c.forEach(x =>\n x.reject(\n new ServiceError(\n internalServerError({\n message:\n typeof window != 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n )\n )\n );\n });\n },\n isServer ? 0 : 10\n );\n\n return promise;\n};\n\nlet requesterInternal: Requester = async call => {\n let id = generateRequestId();\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n\n let tries = 0;\n let error: Error | null = null;\n\n for (let header in call.headers) {\n if (call.headers[header] === undefined) delete call.headers[header];\n }\n\n if (call.query) {\n for (let query in call.query) {\n if (call.query[query] === undefined) delete call.query[query];\n }\n }\n\n let maxTries = typeof window === 'undefined' ? 6 : 3;\n let retryDelay = typeof window === 'undefined' ? 20 : 1000;\n\n while (tries < maxTries) {\n try {\n return (await performRequest({\n ...(call as any),\n id\n }).then(\n res => {\n if (!isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res);\n }\n\n return res;\n },\n err => {\n if (isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n }\n\n log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err);\n\n throw err;\n }\n )) as any;\n } catch (e: any) {\n error = e;\n\n if (isServiceError(e)) {\n // 400 errors are not retried\n if (e.data.status < 500) throw e;\n }\n }\n\n tries += 1;\n await new Promise(r => setTimeout(r, tries * retryDelay));\n }\n\n if (error) throw error;\n\n throw new ServiceError(\n internalServerError({\n message:\n typeof window != 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n );\n};\n\nexport let request: Requester = async call => {\n // try {\n return await requesterInternal(call);\n // } catch (e: any) {\n // Sentry.captureException(e);\n // throw e;\n // }\n};\n","import { proxy } from '@lowerdeck/proxy';\nimport { Requester } from './requester';\n\nexport interface ClientOpts {\n endpoint: string;\n headers?: Record<string, string | undefined>;\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;\n onRequest?: (d: {\n endpoint: string;\n name: string;\n payload: any;\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }) => any;\n}\n\nlet noopWithContext = (cb: (ctx: any) => any) => cb({});\n\nexport let clientBuilder =\n (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) =>\n <T extends object>(clientOpts: ClientOpts) =>\n proxy<T>(\n async (\n path,\n data,\n requestOpts?: {\n headers?: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }\n ) =>\n await withContext(async context => {\n let headers = {\n ...clientOpts.headers,\n ...(await clientOpts.getHeaders?.()),\n ...requestOpts?.headers\n };\n\n clientOpts.onRequest?.({\n endpoint: clientOpts.endpoint,\n name: path.join(':'),\n payload: data,\n headers,\n query: requestOpts?.query\n });\n\n if (path[path.length - 1] == 'getFull') {\n return await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.slice(0, -1).join(':'),\n headers,\n query: requestOpts?.query,\n context\n });\n }\n\n return (\n await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.join(':'),\n headers,\n query: requestOpts?.query,\n context\n })\n ).data;\n })\n );\n","import { request } from './request';\nimport { clientBuilder } from './shared/clientBuilder';\n\nexport let createClient = clientBuilder(request);\n"],"names":["index","rootId","memo","generatePlainId","isServer","window","_settle","pact","state","value","s","_Pact","bind","v","then","o","observer","log","_console","console","apply","slice","call","arguments","prototype","onFulfilled","result","this","callback","onRejected","e","_this","thenable","request","withContext","calls","createClient","Promise","resolve","_temp4","_exit","_result2","error","ServiceError","internalServerError","message","endpoint","id","generateRequestId","name","replace","tries","header","headers","undefined","query","maxTries","retryDelay","_temp3","_for","_temp2","_result","r","setTimeout","_temp","key","canonicalize","to","current","promise","reject","push","clearTimeout","c","url","URL","search","URLSearchParams","toString","fetch","method","_extends","body","serialize","encode","map","x","payload","sort","a","b","localeCompare","credentials","keepalive","res","_decode","decode","json","_res$json","_ref","__typename","_ret","_step","_loop","callRes","find","err","status","data","fromResponse","_iterator","_createForOfIteratorHelperLoose","done","forEach","performRequest","_await$performRequest","_catch","isServiceError","requesterInternal","cb","clientOpts","proxy","path","requestOpts","context","getHeaders","_clientOpts$getHeader","join","_request","onRequest","length","_await$request"],"mappings":"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"}
|
package/dist/index.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@lowerdeck/canonicalize"),require("@lowerdeck/error"),require("@lowerdeck/serialize"),require("@lowerdeck/id"),require("@lowerdeck/memo"),require("@lowerdeck/proxy")):"function"==typeof define&&define.amd?define(["exports","@lowerdeck/canonicalize","@lowerdeck/error","@lowerdeck/serialize","@lowerdeck/id","@lowerdeck/memo","@lowerdeck/proxy"],r):r((e||self).rpcClient={},e.canonicalize,e.error,e.serialize,e.id,e.memo,e.proxy)}(this,function(e,r,n,t,o,i,a){function u(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},c.apply(null,arguments)}var l=0,s=i.memo(function(){return o.generatePlainId(10)}),d="undefined"==typeof window;function f(e,r,n){if(!e.s){if(n instanceof h){if(!n.s)return void(n.o=f.bind(null,e,r));1&r&&(r=n.s),n=n.v}if(n&&n.then)return void n.then(f.bind(null,e,r),f.bind(null,e,2));e.s=r,e.v=n;var t=e.o;t&&t(e)}}var v=function(){var e;d||(e=console).log.apply(e,[].slice.call(arguments))},h=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(r,n){var t=new e,o=this.s;if(o){var i=1&o?r:n;if(i){try{f(t,1,i(this.v))}catch(e){f(t,2,e)}return t}return this}return this.o=function(e){try{var o=e.v;1&e.s?f(t,1,r?r(o):o):n?f(t,1,n(o)):f(t,2,o)}catch(e){f(t,2,e)}},t},e}();function p(e){return e instanceof h&&1&e.s}var m,y,w={},b=(m=function(e){return Promise.resolve(function(e){try{var o,i=function(r){if(o)return r;if(y)throw y;throw new n.ServiceError(n.internalServerError({message:"undefined"
|
|
1
|
+
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@lowerdeck/canonicalize"),require("@lowerdeck/error"),require("@lowerdeck/serialize"),require("@lowerdeck/id"),require("@lowerdeck/memo"),require("@lowerdeck/proxy")):"function"==typeof define&&define.amd?define(["exports","@lowerdeck/canonicalize","@lowerdeck/error","@lowerdeck/serialize","@lowerdeck/id","@lowerdeck/memo","@lowerdeck/proxy"],r):r((e||self).rpcClient={},e.canonicalize,e.error,e.serialize,e.id,e.memo,e.proxy)}(this,function(e,r,n,t,o,i,a){function u(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=Array(r);n<r;n++)t[n]=e[n];return t}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},c.apply(null,arguments)}var l=0,s=i.memo(function(){return o.generatePlainId(10)}),d="undefined"==typeof window;function f(e,r,n){if(!e.s){if(n instanceof h){if(!n.s)return void(n.o=f.bind(null,e,r));1&r&&(r=n.s),n=n.v}if(n&&n.then)return void n.then(f.bind(null,e,r),f.bind(null,e,2));e.s=r,e.v=n;var t=e.o;t&&t(e)}}var v=function(){var e;d||(e=console).log.apply(e,[].slice.call(arguments))},h=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(r,n){var t=new e,o=this.s;if(o){var i=1&o?r:n;if(i){try{f(t,1,i(this.v))}catch(e){f(t,2,e)}return t}return this}return this.o=function(e){try{var o=e.v;1&e.s?f(t,1,r?r(o):o):n?f(t,1,n(o)):f(t,2,o)}catch(e){f(t,2,e)}},t},e}();function p(e){return e instanceof h&&1&e.s}var m,y,w={},b=(m=function(e){return Promise.resolve(function(e){try{var o,i=function(r){if(o)return r;if(y)throw y;throw new n.ServiceError(n.internalServerError({message:"undefined"!=typeof window?"Unable to reach server":"Unable to reach server "+e.endpoint}))},a=function(){var e="call_"+s()+"_"+l;return l+=1,e}();v("[call:"+e.name.replace(":","-")+":"+a+"] Queued",e);var m=0,y=null;for(var b in e.headers)void 0===e.headers[b]&&delete e.headers[b];if(e.query)for(var g in e.query)void 0===e.query[g]&&delete e.query[g];var q="undefined"==typeof window?6:3,j="undefined"==typeof window?20:1e3,P=function(e,r,n){for(var t;;){var o=e();if(p(o)&&(o=o.v),!o)return i;if(o.then){t=0;break}var i=n();if(i&&i.then){if(!p(i)){t=1;break}i=i.s}}var a=new h,u=f.bind(null,a,2);return(0===t?o.then(l):1===t?i.then(c):(void 0).then(function(){(o=e())?o.then?o.then(l).then(void 0,u):l(o):f(a,1,i)})).then(void 0,u),a;function c(r){i=r;do{if(!(o=e())||p(o)&&!o.v)return void f(a,1,i);if(o.then)return void o.then(l).then(void 0,u);p(i=n())&&(i=i.v)}while(!i||!i.then);i.then(c).then(void 0,u)}function l(e){e?(i=n())&&i.then?i.then(c).then(void 0,u):c(i):f(a,1,i)}}(function(){return!o&&m<q},0,function(){function i(e){return o?e:(m+=1,Promise.resolve(new Promise(function(e){return setTimeout(e,m*j)})).then(function(){}))}var l=function(i,l){try{var s=Promise.resolve(function(e){var o=""+r.canonicalize(e.headers)+r.canonicalize(e.query)+e.endpoint;w[o]||(w[o]={calls:[],to:null});var i=w[o],a=new Promise(function(r,n){i.calls.push({call:e,resolve:r,reject:n})});return i.to&&clearTimeout(i.to),i.to=setTimeout(function(){var r=w[o].calls;w[o].calls=[],w[o].to=null;var i=new URL(e.endpoint);i.search=new URLSearchParams(e.query).toString(),fetch(i.toString(),{method:"POST",headers:c({"Content-Type":"application/rpc+json"},r[0].call.headers),body:t.serialize.encode({calls:r.map(function(e){return{id:e.call.id,name:e.call.name,payload:e.call.payload}}).sort(function(e,r){return e.name.localeCompare(r.name)})}),credentials:"include",keepalive:!1}).then(function(e){try{var r=t.serialize.decode;return Promise.resolve(e.json()).then(function(n){return{res:r.call(t.serialize,n),headers:e.headers}})}catch(e){return Promise.reject(e)}}).then(function(e){var t=e.res,o=e.headers;if("error"!=t.__typename){for(var i,a,c=function(){var e=a.value,r=t.calls.find(function(r){return r.id==e.call.id});if(!r){var i=new n.ServiceError(n.internalServerError({message:"Call not returned"}));return e.reject(i),{v:void 0}}r.status>=200&&r.status<300&&e.resolve({data:r.result,status:r.status,headers:o});var u=n.ServiceError.fromResponse(r.result);e.reject(u)},l=function(e){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,r){if(e){if("string"==typeof e)return u(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,r):void 0}}(e))){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(r);!(a=l()).done;)if(i=c())return i.v}else{var s=n.ServiceError.fromResponse(t);r.forEach(function(e){return e.reject(s)})}}).catch(function(t){r.forEach(function(r){return r.reject(new n.ServiceError(n.internalServerError({message:"undefined"!=typeof window?"Unable to reach server":"Unable to reach server "+e.endpoint})))})})},d?0:10),a}(c({},e,{id:a})).then(function(r){return d||v("[call:"+e.name.replace(":","-")+":"+a+"] Success",r),r},function(r){throw d&&v("[call:"+e.name.replace(":","-")+":"+a+"] Queued",e),v("[call:"+e.name.replace(":","-")+":"+a+"] Error",r),r})).then(function(e){return o=1,e})}catch(e){return l(e)}return s&&s.then?s.then(void 0,l):s}(0,function(e){if(y=e,n.isServiceError(e)&&e.data.status<500)throw e});return l&&l.then?l.then(i):i(l)});return Promise.resolve(P&&P.then?P.then(i):i(P))}catch(e){return Promise.reject(e)}}(e))},void 0===y&&(y=function(e){return e({})}),function(e){return a.proxy(function(r,n,t){try{return Promise.resolve(y(function(o){try{return Promise.resolve(null==e.getHeaders?void 0:e.getHeaders()).then(function(i){var a;function u(i){return a?i:Promise.resolve(m({endpoint:e.endpoint,payload:n,name:r.join(":"),headers:l,query:null==t?void 0:t.query,context:o})).then(function(e){return e.data})}var l=c({},e.headers,i,null==t?void 0:t.headers);null==e.onRequest||e.onRequest({endpoint:e.endpoint,name:r.join(":"),payload:n,headers:l,query:null==t?void 0:t.query});var s=function(){if("getFull"==r[r.length-1])return Promise.resolve(m({endpoint:e.endpoint,payload:n,name:r.slice(0,-1).join(":"),headers:l,query:null==t?void 0:t.query,context:o})).then(function(e){return a=1,e})}();return s&&s.then?s.then(u):u(s)})}catch(e){return Promise.reject(e)}}))}catch(e){return Promise.reject(e)}})});e.createClient=b});
|
|
2
2
|
//# sourceMappingURL=index.umd.js.map
|
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/shared/requester.ts","../src/request.ts","../src/shared/clientBuilder.ts","../src/index.ts"],"sourcesContent":["import { generatePlainId } from '@lowerdeck/id';\nimport { memo } from '@lowerdeck/memo';\n\nlet index = 0;\nlet rootId = memo(() => generatePlainId(10));\n\nexport let generateRequestId = () => {\n let id = `call_${rootId()}_${index}`;\n index += 1;\n return id;\n};\n\nexport interface Call {\n id: string;\n name: string;\n payload: any;\n endpoint: string;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}\n\nexport type Requester = (\n call: Omit<Call, 'id' | 'headers' | 'query'> & {\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n context: any;\n }\n) => Promise<{\n data: any;\n status: number;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}>;\n","import { canonicalize } from '@lowerdeck/canonicalize';\nimport { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error';\nimport { serialize } from '@lowerdeck/serialize';\nimport { Call, generateRequestId, Requester } from './shared/requester';\n\n// @ts-ignore\nlet isServer = typeof window === 'undefined';\n\nlet log = (...args: any[]) => {\n if (!isServer) console.log(...args);\n};\n\nlet calls: {\n [key: string]: {\n calls: {\n call: Call;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }[];\n to: any;\n };\n} = {};\n\nlet performRequest = (call: Call) => {\n let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`;\n\n if (!calls[key]) calls[key] = { calls: [], to: null };\n let current = calls[key];\n\n let promise = new Promise((resolve, reject) => {\n current.calls.push({ call, resolve, reject });\n });\n\n if (current.to) clearTimeout(current.to);\n\n current.to = setTimeout(\n () => {\n let c = calls[key].calls;\n calls[key].calls = [];\n calls[key].to = null;\n\n let url = new URL(call.endpoint);\n url.search = new URLSearchParams(call.query).toString();\n\n fetch(url.toString(), {\n method: 'POST',\n\n headers: {\n 'Content-Type': 'application/rpc+json',\n ...c[0].call.headers\n },\n body: serialize.encode({\n calls: c\n .map(x => ({\n id: x.call.id,\n name: x.call.name,\n payload: x.call.payload\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n }),\n credentials: 'include',\n\n // @ts-ignore\n keepalive: false\n })\n .then(async res => ({\n res: serialize.decode(\n (await res.json()) as {\n calls: {\n id: string;\n status: number;\n result: any;\n }[];\n }\n ),\n\n headers: res.headers\n }))\n .then(({ res, headers }) => {\n if (res.__typename == 'error') {\n let err = ServiceError.fromResponse(res);\n c.forEach(x => x.reject(err));\n return;\n }\n\n for (let call of c) {\n let callRes = res.calls.find((x: any) => x.id == call.call.id);\n if (!callRes) {\n let err = new ServiceError(\n internalServerError({ message: 'Call not returned' })\n );\n call.reject(err);\n return;\n }\n\n if (callRes.status >= 200 && callRes.status < 300) {\n call.resolve({\n // data: O;\n // status: number;\n // headers: Record<string, string>;\n\n data: callRes.result,\n status: callRes.status,\n headers\n });\n }\n\n let err = ServiceError.fromResponse(callRes.result);\n call.reject(err);\n }\n })\n .catch(e => {\n c.forEach(x =>\n x.reject(\n new ServiceError(\n internalServerError({\n message:\n typeof window == 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n )\n )\n );\n });\n },\n isServer ? 0 : 10\n );\n\n return promise;\n};\n\nlet requesterInternal: Requester = async call => {\n let id = generateRequestId();\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n\n let tries = 0;\n let error: Error | null = null;\n\n for (let header in call.headers) {\n if (call.headers[header] === undefined) delete call.headers[header];\n }\n\n if (call.query) {\n for (let query in call.query) {\n if (call.query[query] === undefined) delete call.query[query];\n }\n }\n\n let maxTries = typeof window === 'undefined' ? 6 : 3;\n let retryDelay = typeof window === 'undefined' ? 20 : 1000;\n\n while (tries < maxTries) {\n try {\n return (await performRequest({\n ...(call as any),\n id\n }).then(\n res => {\n if (!isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res);\n }\n\n return res;\n },\n err => {\n if (isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n }\n\n log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err);\n\n throw err;\n }\n )) as any;\n } catch (e: any) {\n error = e;\n\n if (isServiceError(e)) {\n // 400 errors are not retried\n if (e.data.status < 500) throw e;\n }\n }\n\n tries += 1;\n await new Promise(r => setTimeout(r, tries * retryDelay));\n }\n\n if (error) throw error;\n\n throw new ServiceError(\n internalServerError({\n message:\n typeof window == 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n );\n};\n\nexport let request: Requester = async call => {\n // try {\n return await requesterInternal(call);\n // } catch (e: any) {\n // Sentry.captureException(e);\n // throw e;\n // }\n};\n","import { proxy } from '@lowerdeck/proxy';\nimport { Requester } from './requester';\n\nexport interface ClientOpts {\n endpoint: string;\n headers?: Record<string, string | undefined>;\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;\n onRequest?: (d: {\n endpoint: string;\n name: string;\n payload: any;\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }) => any;\n}\n\nlet noopWithContext = (cb: (ctx: any) => any) => cb({});\n\nexport let clientBuilder =\n (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) =>\n <T extends object>(clientOpts: ClientOpts) =>\n proxy<T>(\n async (\n path,\n data,\n requestOpts?: {\n headers?: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }\n ) =>\n await withContext(async context => {\n let headers = {\n ...clientOpts.headers,\n ...(await clientOpts.getHeaders?.()),\n ...requestOpts?.headers\n };\n\n clientOpts.onRequest?.({\n endpoint: clientOpts.endpoint,\n name: path.join(':'),\n payload: data,\n headers,\n query: requestOpts?.query\n });\n\n if (path[path.length - 1] == 'getFull') {\n return await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.slice(0, -1).join(':'),\n headers,\n query: requestOpts?.query,\n context\n });\n }\n\n return (\n await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.join(':'),\n headers,\n query: requestOpts?.query,\n context\n })\n ).data;\n })\n );\n","import { request } from './request';\nimport { clientBuilder } from './shared/clientBuilder';\n\nexport let createClient = clientBuilder(request);\n"],"names":["index","rootId","memo","generatePlainId","isServer","window","_settle","pact","state","value","s","_Pact","bind","v","then","o","observer","log","_console","console","apply","slice","call","arguments","prototype","onFulfilled","result","this","callback","onRejected","e","_this","thenable","request","withContext","calls","createClient","Promise","resolve","_temp4","_exit","_result2","error","ServiceError","internalServerError","message","endpoint","id","generateRequestId","name","replace","tries","header","headers","undefined","query","maxTries","retryDelay","_temp3","_for","_temp2","_result","r","setTimeout","_temp","key","canonicalize","to","current","promise","reject","push","clearTimeout","c","url","URL","search","URLSearchParams","toString","fetch","method","_extends","body","serialize","encode","map","x","payload","sort","a","b","localeCompare","credentials","keepalive","res","_decode","decode","json","_res$json","_ref","__typename","_ret","_step","_loop","callRes","find","err","status","data","fromResponse","_iterator","_createForOfIteratorHelperLoose","done","forEach","performRequest","_await$performRequest","_catch","isServiceError","requesterInternal","cb","clientOpts","proxy","path","requestOpts","context","getHeaders","_clientOpts$getHeader","join","_request","onRequest","length","_await$request"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/shared/requester.ts","../src/request.ts","../src/shared/clientBuilder.ts","../src/index.ts"],"sourcesContent":["import { generatePlainId } from '@lowerdeck/id';\nimport { memo } from '@lowerdeck/memo';\n\nlet index = 0;\nlet rootId = memo(() => generatePlainId(10));\n\nexport let generateRequestId = () => {\n let id = `call_${rootId()}_${index}`;\n index += 1;\n return id;\n};\n\nexport interface Call {\n id: string;\n name: string;\n payload: any;\n endpoint: string;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}\n\nexport type Requester = (\n call: Omit<Call, 'id' | 'headers' | 'query'> & {\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n context: any;\n }\n) => Promise<{\n data: any;\n status: number;\n headers: Record<string, string>;\n query?: Record<string, string>;\n}>;\n","import { canonicalize } from '@lowerdeck/canonicalize';\nimport { internalServerError, isServiceError, ServiceError } from '@lowerdeck/error';\nimport { serialize } from '@lowerdeck/serialize';\nimport { Call, generateRequestId, Requester } from './shared/requester';\n\n// @ts-ignore\nlet isServer = typeof window === 'undefined';\n\nlet log = (...args: any[]) => {\n if (!isServer) console.log(...args);\n};\n\nlet calls: {\n [key: string]: {\n calls: {\n call: Call;\n resolve: (value: any) => void;\n reject: (error: any) => void;\n }[];\n to: any;\n };\n} = {};\n\nlet performRequest = (call: Call) => {\n let key = `${canonicalize(call.headers)}${canonicalize(call.query)}${call.endpoint}`;\n\n if (!calls[key]) calls[key] = { calls: [], to: null };\n let current = calls[key];\n\n let promise = new Promise((resolve, reject) => {\n current.calls.push({ call, resolve, reject });\n });\n\n if (current.to) clearTimeout(current.to);\n\n current.to = setTimeout(\n () => {\n let c = calls[key].calls;\n calls[key].calls = [];\n calls[key].to = null;\n\n let url = new URL(call.endpoint);\n url.search = new URLSearchParams(call.query).toString();\n\n fetch(url.toString(), {\n method: 'POST',\n\n headers: {\n 'Content-Type': 'application/rpc+json',\n ...c[0].call.headers\n },\n body: serialize.encode({\n calls: c\n .map(x => ({\n id: x.call.id,\n name: x.call.name,\n payload: x.call.payload\n }))\n .sort((a, b) => a.name.localeCompare(b.name))\n }),\n credentials: 'include',\n\n // @ts-ignore\n keepalive: false\n })\n .then(async res => ({\n res: serialize.decode(\n (await res.json()) as {\n calls: {\n id: string;\n status: number;\n result: any;\n }[];\n }\n ),\n\n headers: res.headers\n }))\n .then(({ res, headers }) => {\n if (res.__typename == 'error') {\n let err = ServiceError.fromResponse(res);\n c.forEach(x => x.reject(err));\n return;\n }\n\n for (let call of c) {\n let callRes = res.calls.find((x: any) => x.id == call.call.id);\n if (!callRes) {\n let err = new ServiceError(\n internalServerError({ message: 'Call not returned' })\n );\n call.reject(err);\n return;\n }\n\n if (callRes.status >= 200 && callRes.status < 300) {\n call.resolve({\n // data: O;\n // status: number;\n // headers: Record<string, string>;\n\n data: callRes.result,\n status: callRes.status,\n headers\n });\n }\n\n let err = ServiceError.fromResponse(callRes.result);\n call.reject(err);\n }\n })\n .catch(e => {\n c.forEach(x =>\n x.reject(\n new ServiceError(\n internalServerError({\n message:\n typeof window != 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n )\n )\n );\n });\n },\n isServer ? 0 : 10\n );\n\n return promise;\n};\n\nlet requesterInternal: Requester = async call => {\n let id = generateRequestId();\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n\n let tries = 0;\n let error: Error | null = null;\n\n for (let header in call.headers) {\n if (call.headers[header] === undefined) delete call.headers[header];\n }\n\n if (call.query) {\n for (let query in call.query) {\n if (call.query[query] === undefined) delete call.query[query];\n }\n }\n\n let maxTries = typeof window === 'undefined' ? 6 : 3;\n let retryDelay = typeof window === 'undefined' ? 20 : 1000;\n\n while (tries < maxTries) {\n try {\n return (await performRequest({\n ...(call as any),\n id\n }).then(\n res => {\n if (!isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Success`, res);\n }\n\n return res;\n },\n err => {\n if (isServer) {\n log(`[call:${call.name.replace(':', '-')}:${id}] Queued`, call);\n }\n\n log(`[call:${call.name.replace(':', '-')}:${id}] Error`, err);\n\n throw err;\n }\n )) as any;\n } catch (e: any) {\n error = e;\n\n if (isServiceError(e)) {\n // 400 errors are not retried\n if (e.data.status < 500) throw e;\n }\n }\n\n tries += 1;\n await new Promise(r => setTimeout(r, tries * retryDelay));\n }\n\n if (error) throw error;\n\n throw new ServiceError(\n internalServerError({\n message:\n typeof window != 'undefined'\n ? 'Unable to reach server'\n : `Unable to reach server ${call.endpoint}`\n })\n );\n};\n\nexport let request: Requester = async call => {\n // try {\n return await requesterInternal(call);\n // } catch (e: any) {\n // Sentry.captureException(e);\n // throw e;\n // }\n};\n","import { proxy } from '@lowerdeck/proxy';\nimport { Requester } from './requester';\n\nexport interface ClientOpts {\n endpoint: string;\n headers?: Record<string, string | undefined>;\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;\n onRequest?: (d: {\n endpoint: string;\n name: string;\n payload: any;\n headers: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }) => any;\n}\n\nlet noopWithContext = (cb: (ctx: any) => any) => cb({});\n\nexport let clientBuilder =\n (request: Requester, withContext: (cb: (ctx: any) => any) => any = noopWithContext) =>\n <T extends object>(clientOpts: ClientOpts) =>\n proxy<T>(\n async (\n path,\n data,\n requestOpts?: {\n headers?: Record<string, string | undefined>;\n query?: Record<string, string | undefined>;\n }\n ) =>\n await withContext(async context => {\n let headers = {\n ...clientOpts.headers,\n ...(await clientOpts.getHeaders?.()),\n ...requestOpts?.headers\n };\n\n clientOpts.onRequest?.({\n endpoint: clientOpts.endpoint,\n name: path.join(':'),\n payload: data,\n headers,\n query: requestOpts?.query\n });\n\n if (path[path.length - 1] == 'getFull') {\n return await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.slice(0, -1).join(':'),\n headers,\n query: requestOpts?.query,\n context\n });\n }\n\n return (\n await request({\n endpoint: clientOpts.endpoint,\n payload: data,\n name: path.join(':'),\n headers,\n query: requestOpts?.query,\n context\n })\n ).data;\n })\n );\n","import { request } from './request';\nimport { clientBuilder } from './shared/clientBuilder';\n\nexport let createClient = clientBuilder(request);\n"],"names":["index","rootId","memo","generatePlainId","isServer","window","_settle","pact","state","value","s","_Pact","bind","v","then","o","observer","log","_console","console","apply","slice","call","arguments","prototype","onFulfilled","result","this","callback","onRejected","e","_this","thenable","request","withContext","calls","createClient","Promise","resolve","_temp4","_exit","_result2","error","ServiceError","internalServerError","message","endpoint","id","generateRequestId","name","replace","tries","header","headers","undefined","query","maxTries","retryDelay","_temp3","_for","_temp2","_result","r","setTimeout","_temp","key","canonicalize","to","current","promise","reject","push","clearTimeout","c","url","URL","search","URLSearchParams","toString","fetch","method","_extends","body","serialize","encode","map","x","payload","sort","a","b","localeCompare","credentials","keepalive","res","_decode","decode","json","_res$json","_ref","__typename","_ret","_step","_loop","callRes","find","err","status","data","fromResponse","_iterator","_createForOfIteratorHelperLoose","done","forEach","performRequest","_await$performRequest","_catch","isServiceError","requesterInternal","cb","clientOpts","proxy","path","requestOpts","context","getHeaders","_clientOpts$getHeader","join","_request","onRequest","length","_await$request"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/request.ts
CHANGED
|
@@ -115,7 +115,7 @@ let performRequest = (call: Call) => {
|
|
|
115
115
|
new ServiceError(
|
|
116
116
|
internalServerError({
|
|
117
117
|
message:
|
|
118
|
-
typeof window
|
|
118
|
+
typeof window != 'undefined'
|
|
119
119
|
? 'Unable to reach server'
|
|
120
120
|
: `Unable to reach server ${call.endpoint}`
|
|
121
121
|
})
|
|
@@ -191,7 +191,7 @@ let requesterInternal: Requester = async call => {
|
|
|
191
191
|
throw new ServiceError(
|
|
192
192
|
internalServerError({
|
|
193
193
|
message:
|
|
194
|
-
typeof window
|
|
194
|
+
typeof window != 'undefined'
|
|
195
195
|
? 'Unable to reach server'
|
|
196
196
|
: `Unable to reach server ${call.endpoint}`
|
|
197
197
|
})
|