@interopio/gateway-server
Version:
[](https://www.npmjs.com/package/@interopio/gateway-server)
4 lines (3 loc) • 8.32 kB
JavaScript
;var $=Object.create;var c=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var p=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>{for(var r in t)c(e,r,{get:t[r],enumerable:!0})},h=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of P(t))!A.call(e,n)&&n!==r&&c(e,n,{get:()=>t[n],enumerable:!(i=E(t,n))||i.enumerable});return e};var R=(e,t,r)=>(r=e!=null?$(z(e)):{},h(t||!e||!e.__esModule?c(r,"default",{value:e,enumerable:!0}):r,e)),F=e=>h(c({},"__esModule",{value:!0}),e);function l(e){return v.getLogger(`gateway.server.${e}`)}var v,C=p(()=>{"use strict";v=R(require("@interopio/gateway/logging/core"),1)});var S={};m(S,{default:()=>q});function T(e,t,r){Object.entries(e.nodes).forEach(([i,n])=>{i!==r&&(t.send(d.encode({type:"node-added","node-id":r,"new-node":i})),n.send(d.encode({type:"node-added","node-id":i,"new-node":r})))})}function k(e,t){Object.entries(e.nodes).forEach(([r,i])=>{r!==t&&i.send(d.encode({type:"node-removed","node-id":r,"removed-node":t}))})}function j(e,t){a.info(`${t}connection accepted`)}function B(e,t,r,i){a.info(`${t}connection closed [${r}](${i})`);let n=e.sockets[t];if(n){delete e.sockets[t];for(let s of n)delete e.nodes[s];for(let s of n)k(e,s)}}function N(e,t,r,i){switch(i.type){case"hello":{let n=i["node-id"];e.nodes[n]=t,e.sockets[r]=e.sockets[r]??[],e.sockets[r].push(n),a.info(`[${r}] node ${n} added.`),T(e,t,n);break}case"bye":{let n=i["node-id"];delete e[n],a.info(`[${r}] node ${n} removed.`),k(e,n);break}case"data":{let n=i.from,s=i.to;if(s==="all")Object.entries(e.nodes).forEach(([o,x])=>{o!==n&&x.send(d.encode(i))});else{let o=e.nodes[s];o?o.send(d.encode(i)):a.warn(`unable to send to node ${s} message ${JSON.stringify(i)}`)}break}default:{a.warn(`[${r}] ignoring unknown message ${JSON.stringify(i)}`);break}}}function D(e,t,r,i){try{let n=d.decode(i);a.enabledFor("debug")&&a.debug(`${r}processing msg ${JSON.stringify(n)}`),N(e,t,r,n)}catch(n){a.error(`${r}unable to process message`,n)}}async function J(e){let t={nodes:{},sockets:{}};return a.info("mesh server is listening"),async({socket:r,handshake:i})=>{let n=i.logPrefix;j(t,n),r.on("error",s=>{a.error(`${n}websocket error: ${s}`,s)}),r.on("message",(s,o)=>{Array.isArray(s)&&(s=Buffer.concat(s)),D(t,r,n,s)}),r.on("close",(s,o)=>{B(t,n,s,o)})}}var G,W,a,d,q,L=p(()=>{"use strict";C();G=require("@interopio/gateway"),W=G.IOGateway.Encoding,a=l("mesh.ws.broker");d=W.transit({keywordize:new Map([["/type","*"],["/message/body/type","*"],["/message/origin","*"],["/message/receiver/type","*"],["/message/source/type","*"],["/message/body/type","*"]])});q=J});var Z={};m(Z,{configure_logging:()=>Y,create:()=>X});module.exports=F(Z);var y=require("node:util"),f=class{#e;#t;#r;#i;constructor(t){this.#e=t}parsed(){if(this.#t===void 0){let t,r=this.#e.data;this.#e.data[0]instanceof Error&&(t=this.#e.data[0],r=r.slice(1));let i=(0,y.format)(this.#e.message,...r);this.#t={err:t,msg:i}}return this.#t}get time(){return this.#e.time}get level(){return this.#e.level}get namespace(){return this.#e.name}get file(){}get line(){}get message(){return this.parsed().msg}get stacktrace(){return this.parsed().err}get timestamp(){return this.#r===void 0&&(this.#r=this.time.toISOString()),this.#r}get output(){if(this.#i===void 0){let t=this.parsed().err,r=t?`
${t.stack??t}`:"";this.#i=`${this.timestamp} ${this.level.toUpperCase()} [${this.namespace}] - ${this.message}${r}`}return this.#i}};function w(e){let t="info";e?.level&&(e.level==="fatal"?t="error":e.level!=="report"&&(t=e.level));let r={level:typeof t=="string"?{gateway:t}:t};e?.disabled_action_groups&&e.disabled_action_groups.forEach(n=>{r.level[`gateway.action.${n}`]="off"});let i=e?.appender;return i&&(r.appender=n=>{i(new f(n))}),r}var b=require("@interopio/gateway-server"),u=class{constructor(t){this.config=t}server;async connect(t){if(!this.server)throw new Error("not started");return await this.server.gateway.connect((i,n)=>t(i,n))}info(){return this.server?.gateway.info()}async start(){return this.server||(this.server=await b.GatewayServer.Factory(this.config)),this}async stop(){return await this.server?.close(),delete this.server,this}};function O(e){if(e){let t=e.publishers.map(i=>({identity:i.publisher,metrics:i.metrics})),r=e["non-matched"];return{publishers:t,non_matched:r}}}function g(e){let t=O(e?.filters),r=H(e?.conflation),i={...e,filters:t,conflation:r};return t||delete i.filters,r||delete i.conflation,i}function H(e){if(e)return{interval:e.interval}}function K(e){let t={publishers:[]};return e?.publishers?.forEach(r=>{if(typeof r=="string"){if(r==="rest"){if(t.publishers.push("rest"),e.rest){let i={...e.rest},n=i["user-agent"];delete i["user-agent"];let s={...i.headers,...n?{"user-agent":n}:{}};delete i.headers,t.rest={endpoint:i.endpoint,headers:s,...g(i)},t.rest.publishFn??="@interopio/gateway-server/metrics/publisher/rest"}}else if(r==="file"&&(t.publishers.push("file"),e.file)){let i={...e.file},n=i["skip-status"]===void 0?!0:!i["skip-status"];delete i["skip-status"],t.file={location:i.location,status:n,...g(i)},t.file.publishFn??="@interopio/gateway/metrics/publisher/file"}}else{let i={...r},n=i["split-size"];delete i["split-size"];let s=r.publisher?.file,o={split_size:n,publisher:{file:s,configuration:r.publisher?.configuration},context:r.context,...g(i)};o.split_size===void 0&&delete o.split_size,t.publishers.push(o)}}),e?.filters&&(t.filters=O(e?.filters)),t}function _(e){return e?.endsWith("/")?e.slice(0,-1):e}function U(e){if(e?.directory){let t=e.directory,r={endpoint:e?.endpoint};if(t.type==="rest"){let i;if(r.endpoint===void 0?r.endpoint=_(t.config?.directory_uri):i={uri:_(t.config?.directory_uri)},t.config?.announce_interval&&(i??={},i.interval=Number(t.config.announce_interval)),i!==void 0&&(r.directory=i,r.directory.metadata??=t.config?.metadata),t.config){let n={...t.config};delete n.directory_uri,delete n.announce_interval,Object.keys(n).length>0&&(r.opts=n)}return r}else if(t.type==="static")return r.directory={members:t.members??[]},r}}function Q(e){let t={auth:{user:null}};if(e?.configuration?.node_id&&(t.node=e.configuration.node_id),e?.configuration?.user&&(t.auth.user=e.configuration?.user),e?.type==="broker"&&(t.broker={endpoint:e.broker?.endpoint??"<unresolved>"}),e?.type==="p2p"){let r=U(e.p2p);r&&(t.cluster=r)}return t}function V(e){let t={available:[]};return e?.default&&(t.default=e.default),(e?.available).forEach(i=>{(i==="basic"||i==="oauth2"||e?.[i]?.authenticator!==void 0)&&(t.available.push(i),e?.[i]!==void 0&&(t[i]=e[i]))}),t}function I(e){let t={route:e.route,maxConnections:e.limits?.max_connections,origins:e.security?.origin_filters,authorize:e.authorize??{access:"permitted"},ping:e.ping,clients:e.clients??{inactive_seconds:0,buffer_size:100},contexts:{lifetime:"retained",visibility:[{context:/___channel___.+/,restrictions:"cluster"},{context:/T42\..+/,restrictions:"local"}]},methods:{visibility:[{method:/T42\..+/,restrictions:"local"}]},peers:{visibility:[{domain:"context",restrictions:"cluster"},{domain:"agm",restrictions:"local"}]},metrics:{publishers:[]}};if(e.authentication!==void 0){let r=e.authentication.token_ttl??e.authentication["token-ttl"];r!==void 0&&(t.token={ttl:r}),(e.authentication.available||e.authentication.default)&&(t.authentication=V(e.authentication))}return e.globals&&(t.globals=e.globals),e.contexts&&(t.contexts=e.contexts),e.methods&&(t.methods=e.methods),e.peers&&(t.peers=e.peers),e.cluster?.enabled&&(t.mesh=Q(e.cluster)),e.metrics?.publishers&&(t.metrics=K(e.metrics)),{port:e.port??3434,host:e.ip??e.host,cors:e.cors===null?void 0:e.cors??!1,memory:e.memory,app:async r=>{e.cluster?.embedded_broker?.enabled===!0&&r.socket({path:e.cluster.embedded_broker.route??"/mesh-broker",options:{authorize:e.cluster.embedded_broker.authorize??{access:"permitted"}},factory:async i=>{t.mesh?.broker?.endpoint==="<unresolved>"&&(t.mesh.broker.endpoint=i.endpoint);let n=(await Promise.resolve().then(()=>(L(),S))).default;return await n(i)}})},gateway:t}}var M=require("@interopio/gateway/logging/core");function X(e){return new u(I(e))}function Y(e){(0,M.configure)(w(e))}0&&(module.exports={configure_logging,create});
//# sourceMappingURL=gateway-ent.cjs.map