@interopio/gateway-server
Version:
[](https://www.npmjs.com/package/@interopio/gateway-server)
4 lines (3 loc) • 7.77 kB
JavaScript
var S=Object.defineProperty;var g=(e,t)=>()=>(e&&(t=e(e=0)),t);var L=(e,t)=>{for(var r in t)S(e,r,{get:t[r],enumerable:!0})};import*as m from"@interopio/gateway/logging/core";function f(e){return m.getLogger(`gateway.server.${e}`)}var h=g(()=>{"use strict"});var w={};L(w,{default:()=>R});import{IOGateway as I}from"@interopio/gateway";function x(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 y(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 $(e,t){a.info(`${t}connection accepted`)}function E(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)y(e,s)}}function P(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.`),x(e,t,n);break}case"bye":{let n=i["node-id"];delete e[n],a.info(`[${r}] node ${n} removed.`),y(e,n);break}case"data":{let n=i.from,s=i.to;if(s==="all")Object.entries(e.nodes).forEach(([o,k])=>{o!==n&&k.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 z(e,t,r,i){try{let n=d.decode(i);a.enabledFor("debug")&&a.debug(`${r}processing msg ${JSON.stringify(n)}`),P(e,t,r,n)}catch(n){a.error(`${r}unable to process message`,n)}}async function A(e){let t={nodes:{},sockets:{}};return a.info("mesh server is listening"),async({socket:r,handshake:i})=>{let n=i.logPrefix;$(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)),z(t,r,n,s)}),r.on("close",(s,o)=>{E(t,n,s,o)})}}var M,a,d,R,b=g(()=>{"use strict";h();M=I.Encoding,a=f("mesh.ws.broker");d=M.transit({keywordize:new Map([["/type","*"],["/message/body/type","*"],["/message/origin","*"],["/message/receiver/type","*"],["/message/source/type","*"],["/message/body/type","*"]])});R=A});import{format as _}from"node:util";var u=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=_(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 p(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 u(n))}),r}import{GatewayServer as O}from"@interopio/gateway-server";var c=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 O.Factory(this.config)),this}async stop(){return await this.server?.close(),delete this.server,this}};function C(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 l(e){let t=C(e?.filters),r=F(e?.conflation),i={...e,filters:t,conflation:r};return t||delete i.filters,r||delete i.conflation,i}function F(e){if(e)return{interval:e.interval}}function W(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,...l(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,...l(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,...l(i)};o.split_size===void 0&&delete o.split_size,t.publishers.push(o)}}),e?.filters&&(t.filters=C(e?.filters)),t}function v(e){return e?.endsWith("/")?e.slice(0,-1):e}function T(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=v(t.config?.directory_uri):i={uri:v(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 j(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=T(e.p2p);r&&(t.cluster=r)}return t}function B(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 G(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=B(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=j(e.cluster)),e.metrics?.publishers&&(t.metrics=W(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(()=>(b(),w))).default;return await n(i)}})},gateway:t}}import{configure as N}from"@interopio/gateway/logging/core";function re(e){return new c(G(e))}function ie(e){N(p(e))}export{ie as configure_logging,re as create};
//# sourceMappingURL=gateway-ent.js.map