UNPKG

@ananay-nag/universal-client

Version:

Universal multi-server-type client for gRPC, HTTP(S), and Socket.IO services with security middleware support.

2 lines (1 loc) 2.99 kB
"use strict";var $=Object.create;var l=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var D=(r,t)=>{for(var o in t)l(r,o,{get:t[o],enumerable:!0})},k=(r,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of U(t))!N.call(r,e)&&e!==o&&l(r,e,{get:()=>t[e],enumerable:!(n=M(t,e))||n.enumerable});return r};var m=(r,t,o)=>(o=r!=null?$(O(r)):{},k(t||!r||!r.__esModule?l(o,"default",{value:r,enumerable:!0}):o,r)),R=r=>k(l({},"__esModule",{value:!0}),r);var G={};D(G,{UniversalClient:()=>S,callGrpc:()=>h,callHttp:()=>y,callSocket:()=>v,getGrpcClient:()=>u,getSocket:()=>C});module.exports=R(G);var d=m(require("@grpc/grpc-js")),x=m(require("@grpc/proto-loader")),f={};function u(r,t,o,n){let e=`${r}:${n}:${o}`;if(!f[e]){let a=x.loadSync(r,{keepCase:!0,longs:String,enums:String,defaults:!0,oneofs:!0}),c=d.loadPackageDefinition(a),i=t.split(".").reduce((p,g)=>p[g],c)[o],s=new i(n,d.credentials.createInsecure());f[e]={client:s,packageDef:c}}return f[e].client}function h(r,t,o,n,e){return new Promise((a,c)=>{let i=[o];if(e&&i.push(e),n){let s=Date.now()+n;i.push({deadline:s})}i.push((s,p)=>{if(s)return c(s);a(p)}),r[t](...i)})}var E=m(require("axios"));async function y(r,t,o,n,e={}){return(await(0,E.default)({url:r,method:t.toLowerCase(),data:o,timeout:n!=null?n:1e4,headers:e})).data}var P=require("socket.io-client"),w={};function C(r,t){return w[r]||(w[r]=(0,P.io)(r,{autoConnect:!0,reconnection:!0,transports:["websocket","polling"],auth:t})),w[r]}function v(r,t,o,n=1e4){return new Promise((e,a)=>{let c;r.emit(t,o,i=>{if(clearTimeout(c),i&&i.error)return a(new Error(i.error));e(i)}),c=setTimeout(()=>a(new Error("Socket timeout")),n)})}var S=class{constructor(t){this.config=t;this.middlewares=[]}use(t){this.middlewares.push(t)}async runMiddlewares(t){for(let o of this.middlewares)await o(t)}async call(t,o,n={}){var c;let e=this.config.endpoints[t];if(!e)throw new Error(`No configuration found for endpoint key: "${t}"`);let a={endpointKey:t,serverType:e.serverType,endpoint:e,payload:o};switch(await this.runMiddlewares(a),e.serverType){case"http":{let i=e.path?`${e.host.replace(/\/$/,"")}${e.path}`:e.host,s=e.methodName||"POST",p=((c=a.httpOptions)==null?void 0:c.headers)||{};return y(i,s,a.payload,n.timeoutMs,p)}case"grpc":{let i=e.port?`${e.host}:${e.port}`:e.host,s=(e.serviceName||"").split(".");if(s.length<2)throw new Error('Invalid gRPC serviceName config. Expected "package.Service"');let[p,g]=[s[0],s[1]];if(!e.protoFile)throw new Error("gRPC endpoint missing protoFile");let T=u(e.protoFile,p,g,i);return h(T,e.methodName,a.payload,n.timeoutMs,a.grpcMetadata)}case"socket":{let i=e.port?`${e.host}:${e.port}`:e.host,s=C(i,a.socketAuth);return v(s,e.event,a.payload,n.timeoutMs)}default:throw new Error(`Unsupported protocol: ${e.serverType}`)}}};0&&(module.exports={UniversalClient,callGrpc,callHttp,callSocket,getGrpcClient,getSocket});