UNPKG

@interopio/gateway

Version:

[![npm version](https://img.shields.io/npm/v/@interopio/gateway.svg)](https://www.npmjs.com/package/@interopio/gateway)

4 lines 139 kB
var Pc=Object.defineProperty;var ge=(t,e)=>()=>(t&&(e=t(t=0)),e);var xt=(t,e)=>{for(var r in e)Pc(t,r,{get:e[r],enumerable:!0})};var vt={};xt(vt,{configure:()=>Dc,getLogger:()=>y,logEvent:()=>Br});function Br(t){let{name:e,level:r}=t;Hi(e),Li(r,e)&&Ft(t)}function $i(t,e,r,...n){this.enabledFor(e)&&Ft({time:new Date,level:e,name:t,message:r,data:n})}function Li(t,e){let r=Rt[t];return Oe[e]<=r}function Mc(t){Hi(t);let e=function(n,i,...o){$i.call(e,t,n,i,...o)};function r(n){return isNaN(Number(n))}for(let n of Object.keys(Rt).filter(r))e[n]=function(i,...o){$i.call(e,t,n,i,...o)};return e.enabledFor=function(n){return Li(n,t)},e.child=function(n){return y(`${t}.${n}`)},e}function Hi(t){if(!t.startsWith(St))throw new Error(`Logger name must start with ${St}`);if(!Oe[t]){let e=Object.entries(Oe).sort(([n],[i])=>i.localeCompare(n)),[,r]=e.find(([n])=>t.startsWith(n));Oe[t]=r}}function y(t){let e=Gi[t];return e===void 0&&(e=Mc(t),Gi[t]=e),e}function Dc(t){function e(n,i){for(let o of Object.keys(Oe).filter(s=>s.startsWith(n)))Oe[o]=Rt[i]}let r=t.level;if(typeof r=="string")Oe[St]=Rt[r],e(St,r);else if(typeof r=="object"){let n=Object.entries(r).sort(([i],[o])=>i.localeCompare(o));for(let[i,o]of n)e(i,o)}Ft=t.appender??Ft}var Rt,Gi,Oe,St,Ft,q=ge(()=>{"use strict";Rt=(o=>(o[o.trace=0]="trace",o[o.debug=1]="debug",o[o.info=2]="info",o[o.warn=3]="warn",o[o.error=4]="error",o))(Rt||{}),Gi=Object.create(null),Oe={},St="gateway";Oe[St]=0;Ft=t=>{console[t.level](`${t.time.toISOString()} ${t.level.toUpperCase()} [${t.name}] - ${t.message}`,...t.data)}});var Vr={};xt(Vr,{regexify:()=>Jt,valueMatches:()=>Le,valuesMatch:()=>Kr});function _c(t){return typeof t=="string"}function Le(t,e){return _c(t)?t===e:typeof e=="string"?t.test(e):!1}function Kr(t,e){for(let r of t)if(Le(r,e))return!0;return!1}function Jt(t){if(typeof t=="string"){let e=Nc.exec(t)?.groups;if(e??=Oc.exec(t)?.groups,e?.pattern)return new RegExp(e.pattern,e.flags??"")}return t}var Oc,Nc,jt=ge(()=>{"use strict";Oc=/^#(\(\?(?<flags>[im]*)\))?(?<pattern>.*)$/,Nc=/^\/(?<pattern>(?:[^/\\]|\\.)+)\/(?<flags>[gimsuyd]*)$/});import{produce as id}from"immer";function Zi(t,e){return e.reduce((r,n)=>n===t?r:r.concat(n),[])}function eo(t,e){return t[e]?t:id(t,r=>{r[e]={}})}function ke(t){return t instanceof Set?Array.from(t).map(ke):t instanceof Array?t.map(ke):t instanceof Map?ke(Object.fromEntries(t)):t instanceof Object?Object.keys(t).reduce((e,r)=>(e[r]=ke(t[r]),e),{}):t}function od(t){let e=new Map;return function(r,n){let i=e.get(this)+(Array.isArray(this)?`[${r}]`:`.${r}`);return n===Object(n)&&e.set(n,i),n instanceof RegExp&&(n=`#${n.source}`),t.call(this,r,n,i.replace(/undefined\.\.?/,""))}}function rt(...t){return od((e,r,n)=>t.indexOf(n)!==-1?"******":r)}function nt(t){return JSON.stringify(t,Object.keys(t).sort(sd))}function ce(t){return!!t}var sd,de=ge(()=>{"use strict";sd=(t,e)=>t.localeCompare(e)});function rm(t,e){for(let[r,n]of Object.entries(t)){let i=e[r];if(!Le(n,i))return!1}return!0}function ka(t,e){return Kr(t,e)}function Ut(t,e,r){let n=r?.publishers?.reduce((o,s)=>{if(rm(s.identity,t)){let a=s.metrics.block??s.metrics.blacklist??[];if(a.length>0&&ka(a,e))return!1;{let c=s.metrics.allow??s.metrics.whitelist??[];return o||ka(c,e)}}return o},void 0);if(n!==void 0)return n;let i=r?.non_matched??"allow";return i==="allow"||i==="whitelist"}var di=ge(()=>{"use strict";jt()});function lm(t){if(t&&Object.keys(t).length>0)return t}function Ga(t){return typeof t=="object"?{value:Object.entries(t).reduce((r,[n,i])=>(r[n]=Ga(i),r),{})}:typeof t=="string"?{value:t}:{value:t}}function fm(t){return{timestamp:t.timestamp??Date.now(),value:Ga(t.value)}}function ym(t,e){return Array.from(t).reduce((r,n)=>{let i=e(n),o=r.get(i)??[];return o.length===0&&r.set(i,o),o.push(n),r},new Map)}function*Ar(t,e){Ua.enabledFor("trace")&&Ua.debug(`conflating ${JSON.stringify(e)}`);let r=ym(e,i=>nt(i.identity)),n;for(let[,i]of r){for(let o of i)if(o.status){let{identity:s,status:a,metadata:c}=o;n&&(yield n),yield{identity:s,status:a,metrics:void 0,metadata:lm(c)},n=void 0}else{let{metric:s,identity:a,datapoint:c}=o,d=s?.name;n||(n={identity:a}),n.metrics=n.metrics??{},n.metrics[d]=n.metrics[d]??{definition:{...s},datapoints:[]},delete n.metrics[d].definition.name,n.metrics[d].datapoints.push(fm(c))}n&&(yield n)}}var Ua,mi=ge(()=>{"use strict";q();de();Ua=y("gateway.metrics.common")});var gm={};var $a=ge(()=>{"use strict";throw new Error("File [/worker/nodeWorker.ts] is not to be bundled")});async function hm(t,e,r){let{NodeWorker:n}=await Promise.resolve().then(()=>($a(),gm)),i=Object.entries(e??{}).map(([o,s])=>`--${o}=${s}`);return new n(t,i,r)}async function bm(t,e,r){return Object.entries(e??{}).forEach(([n,i])=>t.searchParams.append(n,i)),new Worker(t,r)}function La({url:t,parameters:e,options:r}){return typeof process<"u"?hm(t,e,r):bm(t,e,r)}var Ha=ge(()=>{"use strict"});import{deserializeError as Fa}from"serialize-error";function li(t,e,r){let n={identity:t,status:{...e,"updated-at":e.updated,"expires-at":e.expires}};return r&&(n.metadata=r),n}async function Cr(t,e,r){te.info(`creating publisher with configuration ${JSON.stringify(t,rt("authentication.password"))}`);let n=t?.worker;if(n===void 0)throw new Error("in proc publishing is not supported. please provide worker configuration");let i=t?Object.fromEntries(Object.entries(t).filter(([o])=>o!=="worker")):{};try{return await xm(r,i,e,n)}catch(o){throw te.error("Failed to create basic publisher",o),o}}async function xm(t,e,r,n){let i=new gi(await La(n),e);await i.start(t);let o=s=>{for(let a of r([s]))i.next(a)};return o.close=async()=>{await i.stop()},o.on=s=>{i.on(s)},o}function Pr(t,e){return new yi(t,e)}var te,fi,yi,gi,hi=ge(()=>{"use strict";Ha();q();de();di();te=y("gateway.metrics.publisher");fi=class{constructor(e,r,n,i,o){this.publisher=e;this.filters=r;this.repoId=n;this.heartbeatInterval=i;this.metadata=o}running=!0;latestStatus={initial:!0,stopped:!1,status:{state:0,updated:Date.now(),description:"Running"}};heartbeatCleanup;metrics=new Map;start(){te.info(`starting repository for ${JSON.stringify(this.repoId)} with heartbeat interval ${this.heartbeatInterval}ms`);let e=Date.now();if(this.latestStatus.stopped&&(this.latestStatus.status.state=0,this.latestStatus.status.description="Running",this.latestStatus.status.updated=e,this.latestStatus.initial=!0,this.latestStatus.stopped=!1),this.heartbeatInterval>=0){let n={...this.latestStatus.status,timestamp:e,expires:e+3*this.heartbeatInterval},i=li(this.repoId,n,this.metadata);this.publisher(i)}this.running=!0,this.heartbeatInterval>0&&(this.heartbeatCleanup=setInterval(()=>{if(!this.running)return;let r=Date.now(),i={...this.latestStatus.status,timestamp:r,expires:r+3*this.heartbeatInterval},o=li(this.repoId,i,this.metadata);this.publisher(o)},this.heartbeatInterval))}stop(){te.info(`stopping repository for ${JSON.stringify(this.repoId)}`),this.running=!1,this.heartbeatCleanup&&clearInterval(this.heartbeatCleanup);let e=Date.now();this.latestStatus.stopped=!0,this.status({state:-1,timestamp:e,updated:e,expires:e,description:"Repository Stopped"})}add(e){for(let r of e){let n=r.name;this.metrics.has(n)||!(this.filters===void 0||Ut(this.repoId,n,this.filters))||this.metrics.set(n,r)}}publish(e){if(this.running&&e.length>0)for(let r of e){let n=this.metrics.get(r.name);if(n){let i={identity:this.repoId,metric:n,datapoint:{...r}};delete i.datapoint.name,this.publisher(i)}}}status(e){let r={...this.latestStatus};Object.assign(r.status,e),r.timestamp=e.timestamp,r.expires=e.expires;let n=r.status.state!==this.latestStatus.status.state;if((this.latestStatus.initial||n)&&(r.status.updated=e.timestamp),r.initial=!1,Object.assign(this.latestStatus,r),this.running||r.stopped){let i=li(this.repoId,e,this.metadata);this.publisher(i)}}},yi=class{constructor(e,r){this.config=e;this.publisher=r}repository(e,r){let n=r?.metadata,i=this.config?.heartbeats??0;return new fi(this.publisher,this.config?.filters,e,i,n)}async shutdown(){await this.publisher.close()}on(e){this.publisher.on(e)}};gi=class{maxQueueSize;cfg;worker;lastId;processing;promises;listeners;constructor(e,r){let{buffer_size:n}=r;this.maxQueueSize=n??1e3,this.cfg=r,this.lastId=0,this.worker=e,this.processing=new Map,this.promises=new Map,this.listeners=[]}async start(e){await new Promise(r=>{this.worker.onerror=n=>{te.error(`error from worker: ${n.message}`)},this.worker.onmessageerror=n=>{te.error(`error receiving message: ${n.data}`)},this.worker.onmessage=n=>{if(n.data.ready){r();return}if(n.data.id){let{id:i,result:o,error:s}=n.data,a=this.processing.get(i);if(a){let{resolver:c}=a;try{s?c.reject(Fa(s)):c.resolve(o)}finally{this.processing.delete(i)}}else te.error(`unknown message id: ${i}`)}else if(n.data.log){let{level:i,time:o,name:s,message:a,data:c}=n.data.log;Br({level:i,time:new Date(o),name:s,message:a,data:c.map(d=>Fa(d))})}else n.data.event&&this.listeners.forEach(i=>i(n.data.event))}});try{await this.enqueue("start",{cfg:this.cfg,publishFn:e})[1],te.info(`publisher worker [${e}] started`)}catch(r){throw te.error(`error starting publisher worker [${e}]: ${r}`),this.worker.terminate(),r}}enqueue(e,r){this.processing.size>=this.maxQueueSize&&te.warn(`processing queue is full. dropping cmd: ${JSON.stringify(e)}`);let n=++this.lastId;return[n,new Promise((i,o)=>{this.processing.set(n,{resolver:{resolve:i,reject:o}});let s={id:n,cmd:e,arg:r};this.worker.postMessage(s)})]}next(e){let[r,n]=this.enqueue("update",e);n.catch(i=>{te.warn(`update [${r}] error`,i)}).finally(()=>{this.promises.delete(r)})}async stop(e=!1,r=1e3){te.info(`stopping publisher worker rejectProcessing: ${e}, timeout: ${r}, promises: ${this.promises.size}`);let n=i=>{this.processing.forEach(({resolver:o})=>{o.reject(new Error(`reject on stop: ${i}`))})};try{e&&n("now");let i=Promise.allSettled(this.promises),o=this.enqueue("stop",void 0)[1];await new Promise((s,a)=>{let c=setTimeout(()=>{n("timeout"),a(new Error("timeout"))},r);i.then(d=>{clearTimeout(c);for(let u of d)u.status==="rejected"&&te.error(`Pending future failed with ${u.reason} on stop`);s()})}),await o,this.promises.size>0&&te.error(`uncleared promises: ${this.promises.size}`),te.info("publisher worker stopped")}finally{this.worker.terminate()}}on(e){this.listeners.push(e)}}});var Wa={};xt(Wa,{restPublisher:()=>ja,restRepositoryFactory:()=>Rm});async function ja(t){let e=t?.conflation?.["max-datapoints-repo"]??50;return await Cr(t,r=>Ar(e,r),t?.publishFn??"@interopio/gateway/metrics/publisher/rest")}async function Rm(t){return Pr(t,await ja(t))}var Ba=ge(()=>{"use strict";hi();mi()});var Sm={};var Ka=ge(()=>{"use strict";throw new Error("File [/metrics/file.ts] is not to be bundled")});var Ac={};xt(Ac,{Encoding:()=>Xe,Factory:()=>ht,Filtering:()=>Vr,Logging:()=>vt});var Xe={};xt(Xe,{direct:()=>Wr,json:()=>jr,transit:()=>Jr});import Ie from"transit-js";var Lr=class{map;reverse=new Map;constructor(e){if(e)for(let[r,n]of e)this.reverse.set(n,r);else e=this.reverse;this.map=e}get(e){return this.map.get(e)}rev(e){return this.reverse.get(e)}};function ki(t,e){let r=t.indexOf("/");if(r===-1)return Ie.keyword(t);let n=t.substring(0,r),i=e?.get(n)??n;return Ie.keyword(i+t.substring(r))}function qi(t,e){let r=t.name(),n=t.namespace();return n===null?r:(e.rev(n)??n)+"/"+r}function Ui(t,e,r,n=""){if(t instanceof Array)return t.map(i=>i);if(t instanceof Object){let i=Ie.map();for(let o in t){let s=r?.get(n),a=s===null?o:ki(o,e),c=t[o],d=`${n}/${o}`,u=r?.get(d);if(u!==void 0&&typeof c=="string"&&(u==="*"||u?.has(c)))i.set(a,ki(c,e));else{s===null&&!r?.has(d)&&r?.set(d,null);let m=Ui(c,e,r,d);i.set(a,m)}}return i}else return t}function Hr(t,e){if(Ie.isKeyword(t))return qi(t,e);if(Ie.isMap(t)){let r={};for(let[n,i]of t){let o=Ie.isKeyword(n)?qi(n,e):n;r[o]=Hr(i,e)}return r}else if(Ie.isList(t)||t instanceof Array){let r=[];for(let n of t)r.push(Hr(n,e));return r}return t}function Jr(t){let e=t?.verbose?"json-verbose":"json",r=new Lr(t?.namespaces);return{encode:n=>{let i=Ui(n,r,t?.keywordize);return Ie.writer(e).write(i)},decode:n=>{let i;try{i=Ie.reader(e).read(n)}catch(o){throw new Error(`"${n}" is not valid TRANSIT`,{cause:o})}return Hr(i,r)}}}function jr(){return{encode:JSON.stringify,decode:JSON.parse}}function Ei(t){return t}function Fr(t){return t instanceof Array||Array.isArray(t)?t.map(Fr):t?.constructor===Object?Object.keys(t).reduce((e,r)=>(e[r]=Fr(t[r]),e),{}):t===void 0?null:t}function Wr(t){return{encode:Ei,decode:t?.cljs??!1?Fr:Ei}}q();jt();q();var he="global",Ze="context",Ne=`${he}.errors.failure`;q();function b(t,e){return{receiver:t,body:e}}function G(t,e){return{...b({type:"cluster"},e),source:t}}function j(t,e,r){return{...b(e,r),source:t}}function kc(t,e,r,n,i){let o={type:"error",request_id:e,reason_uri:n.uri,reason:n.message};return t&&(o.domain=t),r&&(o.peer_id=r),i&&(o.context=i),o}function g(t,e,r,n,i,o){return b(e,kc(t,r,n,i,o))}function qc(t,e,r){return{type:"success",request_id:e,domain:t,peer_id:r}}function I(t,e,r,n){return b(e,qc(t,r,n))}function T(t){let e=t.type;return e&&e==="local"}function $(t){return!T(t)}function Ec(t,e,r,n){return{domain:t,type:"token",request_id:e,peer_id:r,token:n}}function Ji(t,e,r,n,i){return b(e,Ec(t,r,n,i))}function Uc(t,e,r,n,i){return{domain:t,type:"peer-added",peer_id:e,new_peer_id:r,identity:n,meta:i}}function He(t,e,r,n,i,o){return b(e,Uc(t,r,n,i,o))}function Gc(t,e,r,n){return{domain:t,type:"peer-removed",peer_id:e,removed_id:r,reason_uri:n.uri,reason:n.message}}function Fe(t,e,r,n,i){return b(e,Gc(t,r,n,i))}var be=class extends Error{constructor(r,n,i){super(r);this.data=n;this.cause=i;this.name="ExceptionInfo",this.data=n,this.cause=i}};function W(t,e,r){return new be(t,e,r)}function Je(t){if(t instanceof be)return t.data}function je(t){if(t instanceof Error)return t.message}function x(t,e){return{uri:t,message:e}}function L(t,e){let r=Je(t);return{uri:r?.uri??e,message:r?.message??je(t)??""}}function k(t,e){let r={uri:t,message:e};throw new be(e,r)}function B(t){return{uri:t.reason_uri,message:t.reason}}import{CharStreams as Zc,CommonTokenStream as ed}from"antlr4";import{ATN as Wi,ATNDeserializer as $c,DFA as Lc,FailedPredicateException as Hc,RecognitionException as xe,Parser as Fc,ParserATNSimulator as Jc,ParserRuleContext as Re,PredictionContextCache as jc,Token as Wc}from"antlr4";var P=class t extends Fc{static OR=1;static AND=2;static EQ=3;static NEQ=4;static MATCH=5;static LPAREN=6;static RPAREN=7;static DOLLAR=8;static POUND=9;static STR=10;static WORD=11;static NUMBER=12;static WS=13;static EOF=Wc.EOF;static RULE_parse=0;static RULE_expr=1;static RULE_andOr=2;static RULE_eqNeq=3;static RULE_term=4;static RULE_ident=5;static RULE_ownIdent=6;static RULE_str=7;static RULE_word=8;static RULE_number=9;static literalNames=[null,"'||'","'&&'","'=='","'!='","'?'","'('","')'","'$'","'#'"];static symbolicNames=[null,"OR","AND","EQ","NEQ","MATCH","LPAREN","RPAREN","DOLLAR","POUND","STR","WORD","NUMBER","WS"];static ruleNames=["parse","expr","andOr","eqNeq","term","ident","ownIdent","str","word","number"];get grammarFileName(){return"Restrictions.g4"}get literalNames(){return t.literalNames}get symbolicNames(){return t.symbolicNames}get ruleNames(){return t.ruleNames}get serializedATN(){return t._serializedATN}createFailedPredicateException(e,r){return new Hc(this,e,r)}constructor(e){super(e),this._interp=new Jc(this,t._ATN,t.DecisionsToDFA,new jc)}parse(){let e=new zr(this,this._ctx,this.state);this.enterRule(e,0,t.RULE_parse);try{this.enterOuterAlt(e,1),this.state=20,this.expr(),this.state=21,this.match(t.EOF)}catch(r){if(r instanceof xe)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}expr(){let e=new Wt(this,this._ctx,this.state);this.enterRule(e,2,t.RULE_expr);try{this.enterOuterAlt(e,1),this.state=23,this.andOr(0)}catch(r){if(r instanceof xe)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}andOr(e){e===void 0&&(e=0);let r=this._ctx,n=this.state,i=new pe(this,this._ctx,n),o=i,s=4;this.enterRecursionRule(i,4,t.RULE_andOr,e);try{let a;for(this.enterOuterAlt(i,1),i=new Qr(this,i),this._ctx=i,o=i,this.state=26,this.eqNeq(0),this._ctx.stop=this._input.LT(-1),this.state=36,this._errHandler.sync(this),a=this._interp.adaptivePredict(this._input,1,this._ctx);a!==2&&a!==Wi.INVALID_ALT_NUMBER;){if(a===1)switch(this._parseListeners!=null&&this.triggerExitRuleEvent(),o=i,this.state=34,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,0,this._ctx)){case 1:{if(i=new Xr(this,new pe(this,r,n)),this.pushNewRecursionContext(i,s,t.RULE_andOr),this.state=28,!this.precpred(this._ctx,2))throw this.createFailedPredicateException("this.precpred(this._ctx, 2)");this.state=29,this.match(t.AND),this.state=30,this.eqNeq(0)}break;case 2:{if(i=new Yr(this,new pe(this,r,n)),this.pushNewRecursionContext(i,s,t.RULE_andOr),this.state=31,!this.precpred(this._ctx,1))throw this.createFailedPredicateException("this.precpred(this._ctx, 1)");this.state=32,this.match(t.OR),this.state=33,this.eqNeq(0)}break}this.state=38,this._errHandler.sync(this),a=this._interp.adaptivePredict(this._input,1,this._ctx)}}catch(a){if(a instanceof xe)i.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.unrollRecursionContexts(r)}return i}eqNeq(e){e===void 0&&(e=0);let r=this._ctx,n=this.state,i=new V(this,this._ctx,n),o=i,s=6;this.enterRecursionRule(i,6,t.RULE_eqNeq,e);try{let a;for(this.enterOuterAlt(i,1),i=new rn(this,i),this._ctx=i,o=i,this.state=40,this.term(),this._ctx.stop=this._input.LT(-1),this.state=53,this._errHandler.sync(this),a=this._interp.adaptivePredict(this._input,3,this._ctx);a!==2&&a!==Wi.INVALID_ALT_NUMBER;){if(a===1)switch(this._parseListeners!=null&&this.triggerExitRuleEvent(),o=i,this.state=51,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,2,this._ctx)){case 1:{if(i=new tn(this,new V(this,r,n)),this.pushNewRecursionContext(i,s,t.RULE_eqNeq),this.state=42,!this.precpred(this._ctx,3))throw this.createFailedPredicateException("this.precpred(this._ctx, 3)");this.state=43,this.match(t.EQ),this.state=44,this.term()}break;case 2:{if(i=new en(this,new V(this,r,n)),this.pushNewRecursionContext(i,s,t.RULE_eqNeq),this.state=45,!this.precpred(this._ctx,2))throw this.createFailedPredicateException("this.precpred(this._ctx, 2)");this.state=46,this.match(t.NEQ),this.state=47,this.term()}break;case 3:{if(i=new Zr(this,new V(this,r,n)),this.pushNewRecursionContext(i,s,t.RULE_eqNeq),this.state=48,!this.precpred(this._ctx,1))throw this.createFailedPredicateException("this.precpred(this._ctx, 1)");this.state=49,this.match(t.MATCH),this.state=50,this.term()}break}this.state=55,this._errHandler.sync(this),a=this._interp.adaptivePredict(this._input,3,this._ctx)}}catch(a){if(a instanceof xe)i.exception=a,this._errHandler.reportError(this,a),this._errHandler.recover(this,a);else throw a}finally{this.unrollRecursionContexts(r)}return i}term(){let e=new We(this,this._ctx,this.state);this.enterRule(e,8,t.RULE_term);try{switch(this.enterOuterAlt(e,1),this.state=64,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,4,this._ctx)){case 1:this.state=56,this.ident();break;case 2:this.state=57,this.ownIdent();break;case 3:this.state=58,this.number_();break;case 4:this.state=59,this.str();break;case 5:this.state=60,this.match(t.LPAREN),this.state=61,this.andOr(0),this.state=62,this.match(t.RPAREN);break}}catch(r){if(r instanceof xe)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}ident(){let e=new Bt(this,this._ctx,this.state);this.enterRule(e,10,t.RULE_ident);try{this.enterOuterAlt(e,1),this.state=66,this.match(t.DOLLAR),this.state=67,this.word()}catch(r){if(r instanceof xe)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}ownIdent(){let e=new Kt(this,this._ctx,this.state);this.enterRule(e,12,t.RULE_ownIdent);try{this.enterOuterAlt(e,1),this.state=69,this.match(t.POUND),this.state=70,this.word()}catch(r){if(r instanceof xe)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}str(){let e=new Vt(this,this._ctx,this.state);this.enterRule(e,14,t.RULE_str);let r;try{this.enterOuterAlt(e,1);{for(this.state=75,this._errHandler.sync(this),r=this._input.LA(1);r===13;)this.state=72,this.match(t.WS),this.state=77,this._errHandler.sync(this),r=this._input.LA(1);this.state=78,this.match(t.STR)}}catch(n){if(n instanceof xe)e.exception=n,this._errHandler.reportError(this,n),this._errHandler.recover(this,n);else throw n}finally{this.exitRule()}return e}word(){let e=new wt(this,this._ctx,this.state);this.enterRule(e,16,t.RULE_word);try{this.enterOuterAlt(e,1),this.state=80,this.match(t.WORD)}catch(r){if(r instanceof xe)e.exception=r,this._errHandler.reportError(this,r),this._errHandler.recover(this,r);else throw r}finally{this.exitRule()}return e}number_(){let e=new zt(this,this._ctx,this.state);this.enterRule(e,18,t.RULE_number);let r;try{this.enterOuterAlt(e,1);{for(this.state=85,this._errHandler.sync(this),r=this._input.LA(1);r===13;)this.state=82,this.match(t.WS),this.state=87,this._errHandler.sync(this),r=this._input.LA(1);this.state=88,this.match(t.NUMBER)}}catch(n){if(n instanceof xe)e.exception=n,this._errHandler.reportError(this,n),this._errHandler.recover(this,n);else throw n}finally{this.exitRule()}return e}sempred(e,r,n){switch(r){case 2:return this.andOr_sempred(e,n);case 3:return this.eqNeq_sempred(e,n)}return!0}andOr_sempred(e,r){switch(r){case 0:return this.precpred(this._ctx,2);case 1:return this.precpred(this._ctx,1)}return!0}eqNeq_sempred(e,r){switch(r){case 2:return this.precpred(this._ctx,3);case 3:return this.precpred(this._ctx,2);case 4:return this.precpred(this._ctx,1)}return!0}static _serializedATN=[4,1,13,91,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,1,0,1,0,1,0,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,35,8,2,10,2,12,2,38,9,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,52,8,3,10,3,12,3,55,9,3,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,3,4,65,8,4,1,5,1,5,1,5,1,6,1,6,1,6,1,7,5,7,74,8,7,10,7,12,7,77,9,7,1,7,1,7,1,8,1,8,1,9,5,9,84,8,9,10,9,12,9,87,9,9,1,9,1,9,1,9,0,2,4,6,10,0,2,4,6,8,10,12,14,16,18,0,0,91,0,20,1,0,0,0,2,23,1,0,0,0,4,25,1,0,0,0,6,39,1,0,0,0,8,64,1,0,0,0,10,66,1,0,0,0,12,69,1,0,0,0,14,75,1,0,0,0,16,80,1,0,0,0,18,85,1,0,0,0,20,21,3,2,1,0,21,22,5,0,0,1,22,1,1,0,0,0,23,24,3,4,2,0,24,3,1,0,0,0,25,26,6,2,-1,0,26,27,3,6,3,0,27,36,1,0,0,0,28,29,10,2,0,0,29,30,5,2,0,0,30,35,3,6,3,0,31,32,10,1,0,0,32,33,5,1,0,0,33,35,3,6,3,0,34,28,1,0,0,0,34,31,1,0,0,0,35,38,1,0,0,0,36,34,1,0,0,0,36,37,1,0,0,0,37,5,1,0,0,0,38,36,1,0,0,0,39,40,6,3,-1,0,40,41,3,8,4,0,41,53,1,0,0,0,42,43,10,3,0,0,43,44,5,3,0,0,44,52,3,8,4,0,45,46,10,2,0,0,46,47,5,4,0,0,47,52,3,8,4,0,48,49,10,1,0,0,49,50,5,5,0,0,50,52,3,8,4,0,51,42,1,0,0,0,51,45,1,0,0,0,51,48,1,0,0,0,52,55,1,0,0,0,53,51,1,0,0,0,53,54,1,0,0,0,54,7,1,0,0,0,55,53,1,0,0,0,56,65,3,10,5,0,57,65,3,12,6,0,58,65,3,18,9,0,59,65,3,14,7,0,60,61,5,6,0,0,61,62,3,4,2,0,62,63,5,7,0,0,63,65,1,0,0,0,64,56,1,0,0,0,64,57,1,0,0,0,64,58,1,0,0,0,64,59,1,0,0,0,64,60,1,0,0,0,65,9,1,0,0,0,66,67,5,8,0,0,67,68,3,16,8,0,68,11,1,0,0,0,69,70,5,9,0,0,70,71,3,16,8,0,71,13,1,0,0,0,72,74,5,13,0,0,73,72,1,0,0,0,74,77,1,0,0,0,75,73,1,0,0,0,75,76,1,0,0,0,76,78,1,0,0,0,77,75,1,0,0,0,78,79,5,10,0,0,79,15,1,0,0,0,80,81,5,11,0,0,81,17,1,0,0,0,82,84,5,13,0,0,83,82,1,0,0,0,84,87,1,0,0,0,85,83,1,0,0,0,85,86,1,0,0,0,86,88,1,0,0,0,87,85,1,0,0,0,88,89,5,12,0,0,89,19,1,0,0,0,7,34,36,51,53,64,75,85];static __ATN;static get _ATN(){return t.__ATN||(t.__ATN=new $c().deserialize(t._serializedATN)),t.__ATN}static DecisionsToDFA=t._ATN.decisionToState.map((e,r)=>new Lc(e,r))},zr=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}expr(){return this.getTypedRuleContext(Wt,0)}EOF(){return this.getToken(P.EOF,0)}get ruleIndex(){return P.RULE_parse}enterRule(e){e.enterParse&&e.enterParse(this)}exitRule(e){e.exitParse&&e.exitParse(this)}accept(e){return e.visitParse?e.visitParse(this):e.visitChildren(this)}},Wt=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}andOr(){return this.getTypedRuleContext(pe,0)}get ruleIndex(){return P.RULE_expr}enterRule(e){e.enterExpr&&e.enterExpr(this)}exitRule(e){e.exitExpr&&e.exitExpr(this)}accept(e){return e.visitExpr?e.visitExpr(this):e.visitChildren(this)}},pe=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}get ruleIndex(){return P.RULE_andOr}copyFrom(e){super.copyFrom(e)}},Qr=class extends pe{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}eqNeq(){return this.getTypedRuleContext(V,0)}enterRule(e){e.enterAndOrEqNeq&&e.enterAndOrEqNeq(this)}exitRule(e){e.exitAndOrEqNeq&&e.exitAndOrEqNeq(this)}accept(e){return e.visitAndOrEqNeq?e.visitAndOrEqNeq(this):e.visitChildren(this)}},Yr=class extends pe{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}andOr(){return this.getTypedRuleContext(pe,0)}OR(){return this.getToken(P.OR,0)}eqNeq(){return this.getTypedRuleContext(V,0)}enterRule(e){e.enterOr&&e.enterOr(this)}exitRule(e){e.exitOr&&e.exitOr(this)}accept(e){return e.visitOr?e.visitOr(this):e.visitChildren(this)}},Xr=class extends pe{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}andOr(){return this.getTypedRuleContext(pe,0)}AND(){return this.getToken(P.AND,0)}eqNeq(){return this.getTypedRuleContext(V,0)}enterRule(e){e.enterAnd&&e.enterAnd(this)}exitRule(e){e.exitAnd&&e.exitAnd(this)}accept(e){return e.visitAnd?e.visitAnd(this):e.visitChildren(this)}},V=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}get ruleIndex(){return P.RULE_eqNeq}copyFrom(e){super.copyFrom(e)}},Zr=class extends V{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}eqNeq(){return this.getTypedRuleContext(V,0)}MATCH(){return this.getToken(P.MATCH,0)}term(){return this.getTypedRuleContext(We,0)}enterRule(e){e.enterMatch&&e.enterMatch(this)}exitRule(e){e.exitMatch&&e.exitMatch(this)}accept(e){return e.visitMatch?e.visitMatch(this):e.visitChildren(this)}},en=class extends V{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}eqNeq(){return this.getTypedRuleContext(V,0)}NEQ(){return this.getToken(P.NEQ,0)}term(){return this.getTypedRuleContext(We,0)}enterRule(e){e.enterNeq&&e.enterNeq(this)}exitRule(e){e.exitNeq&&e.exitNeq(this)}accept(e){return e.visitNeq?e.visitNeq(this):e.visitChildren(this)}},tn=class extends V{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}eqNeq(){return this.getTypedRuleContext(V,0)}EQ(){return this.getToken(P.EQ,0)}term(){return this.getTypedRuleContext(We,0)}enterRule(e){e.enterEq&&e.enterEq(this)}exitRule(e){e.exitEq&&e.exitEq(this)}accept(e){return e.visitEq?e.visitEq(this):e.visitChildren(this)}},rn=class extends V{constructor(e,r){super(e,r.parentCtx,r.invokingState),super.copyFrom(r)}term(){return this.getTypedRuleContext(We,0)}enterRule(e){e.enterEqNeqTerm&&e.enterEqNeqTerm(this)}exitRule(e){e.exitEqNeqTerm&&e.exitEqNeqTerm(this)}accept(e){return e.visitEqNeqTerm?e.visitEqNeqTerm(this):e.visitChildren(this)}},We=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}ident(){return this.getTypedRuleContext(Bt,0)}ownIdent(){return this.getTypedRuleContext(Kt,0)}number_(){return this.getTypedRuleContext(zt,0)}str(){return this.getTypedRuleContext(Vt,0)}LPAREN(){return this.getToken(P.LPAREN,0)}andOr(){return this.getTypedRuleContext(pe,0)}RPAREN(){return this.getToken(P.RPAREN,0)}get ruleIndex(){return P.RULE_term}enterRule(e){e.enterTerm&&e.enterTerm(this)}exitRule(e){e.exitTerm&&e.exitTerm(this)}accept(e){return e.visitTerm?e.visitTerm(this):e.visitChildren(this)}},Bt=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}DOLLAR(){return this.getToken(P.DOLLAR,0)}word(){return this.getTypedRuleContext(wt,0)}get ruleIndex(){return P.RULE_ident}enterRule(e){e.enterIdent&&e.enterIdent(this)}exitRule(e){e.exitIdent&&e.exitIdent(this)}accept(e){return e.visitIdent?e.visitIdent(this):e.visitChildren(this)}},Kt=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}POUND(){return this.getToken(P.POUND,0)}word(){return this.getTypedRuleContext(wt,0)}get ruleIndex(){return P.RULE_ownIdent}enterRule(e){e.enterOwnIdent&&e.enterOwnIdent(this)}exitRule(e){e.exitOwnIdent&&e.exitOwnIdent(this)}accept(e){return e.visitOwnIdent?e.visitOwnIdent(this):e.visitChildren(this)}},Vt=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}STR(){return this.getToken(P.STR,0)}WS_list(){return this.getTokens(P.WS)}WS(e){return this.getToken(P.WS,e)}get ruleIndex(){return P.RULE_str}enterRule(e){e.enterStr&&e.enterStr(this)}exitRule(e){e.exitStr&&e.exitStr(this)}accept(e){return e.visitStr?e.visitStr(this):e.visitChildren(this)}},wt=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}WORD(){return this.getToken(P.WORD,0)}get ruleIndex(){return P.RULE_word}enterRule(e){e.enterWord&&e.enterWord(this)}exitRule(e){e.exitWord&&e.exitWord(this)}accept(e){return e.visitWord?e.visitWord(this):e.visitChildren(this)}},zt=class extends Re{constructor(e,r,n){super(r,n),this.parser=e}NUMBER(){return this.getToken(P.NUMBER,0)}WS_list(){return this.getTokens(P.WS)}WS(e){return this.getToken(P.WS,e)}get ruleIndex(){return P.RULE_number}enterRule(e){e.enterNumber&&e.enterNumber(this)}exitRule(e){e.exitNumber&&e.exitNumber(this)}accept(e){return e.visitNumber?e.visitNumber(this):e.visitChildren(this)}};import{ATNDeserializer as Bc,DFA as Kc,Lexer as Vc,LexerATNSimulator as zc,PredictionContextCache as Qc,Token as Yc}from"antlr4";var It=class t extends Vc{static OR=1;static AND=2;static EQ=3;static NEQ=4;static MATCH=5;static LPAREN=6;static RPAREN=7;static DOLLAR=8;static POUND=9;static STR=10;static WORD=11;static NUMBER=12;static WS=13;static EOF=Yc.EOF;static channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"];static literalNames=[null,"'||'","'&&'","'=='","'!='","'?'","'('","')'","'$'","'#'"];static symbolicNames=[null,"OR","AND","EQ","NEQ","MATCH","LPAREN","RPAREN","DOLLAR","POUND","STR","WORD","NUMBER","WS"];static modeNames=["DEFAULT_MODE"];static ruleNames=["OR","AND","EQ","NEQ","MATCH","LPAREN","RPAREN","DOLLAR","POUND","STR","WORD","NUMBER","WS"];constructor(e){super(e),this._interp=new zc(this,t._ATN,t.DecisionsToDFA,new Qc)}get grammarFileName(){return"Restrictions.g4"}get literalNames(){return t.literalNames}get symbolicNames(){return t.symbolicNames}get ruleNames(){return t.ruleNames}get serializedATN(){return t._serializedATN}get channelNames(){return t.channelNames}get modeNames(){return t.modeNames}static _serializedATN=[4,0,13,86,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,3,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,4,9,52,8,9,11,9,12,9,53,1,9,1,9,1,10,4,10,59,8,10,11,10,12,10,60,1,11,3,11,64,8,11,1,11,5,11,67,8,11,10,11,12,11,70,9,11,1,11,3,11,73,8,11,1,11,4,11,76,8,11,11,11,12,11,77,1,12,4,12,81,8,12,11,12,12,12,82,1,12,1,12,0,0,13,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,1,0,5,1,0,39,39,4,0,45,45,65,90,95,95,97,122,2,0,43,43,45,45,1,0,48,57,2,0,9,9,32,32,92,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,1,27,1,0,0,0,3,30,1,0,0,0,5,33,1,0,0,0,7,36,1,0,0,0,9,39,1,0,0,0,11,41,1,0,0,0,13,43,1,0,0,0,15,45,1,0,0,0,17,47,1,0,0,0,19,49,1,0,0,0,21,58,1,0,0,0,23,63,1,0,0,0,25,80,1,0,0,0,27,28,5,124,0,0,28,29,5,124,0,0,29,2,1,0,0,0,30,31,5,38,0,0,31,32,5,38,0,0,32,4,1,0,0,0,33,34,5,61,0,0,34,35,5,61,0,0,35,6,1,0,0,0,36,37,5,33,0,0,37,38,5,61,0,0,38,8,1,0,0,0,39,40,5,63,0,0,40,10,1,0,0,0,41,42,5,40,0,0,42,12,1,0,0,0,43,44,5,41,0,0,44,14,1,0,0,0,45,46,5,36,0,0,46,16,1,0,0,0,47,48,5,35,0,0,48,18,1,0,0,0,49,51,7,0,0,0,50,52,8,0,0,0,51,50,1,0,0,0,52,53,1,0,0,0,53,51,1,0,0,0,53,54,1,0,0,0,54,55,1,0,0,0,55,56,7,0,0,0,56,20,1,0,0,0,57,59,7,1,0,0,58,57,1,0,0,0,59,60,1,0,0,0,60,58,1,0,0,0,60,61,1,0,0,0,61,22,1,0,0,0,62,64,7,2,0,0,63,62,1,0,0,0,63,64,1,0,0,0,64,68,1,0,0,0,65,67,7,3,0,0,66,65,1,0,0,0,67,70,1,0,0,0,68,66,1,0,0,0,68,69,1,0,0,0,69,72,1,0,0,0,70,68,1,0,0,0,71,73,9,0,0,0,72,71,1,0,0,0,72,73,1,0,0,0,73,75,1,0,0,0,74,76,7,3,0,0,75,74,1,0,0,0,76,77,1,0,0,0,77,75,1,0,0,0,77,78,1,0,0,0,78,24,1,0,0,0,79,81,7,4,0,0,80,79,1,0,0,0,81,82,1,0,0,0,82,80,1,0,0,0,82,83,1,0,0,0,83,84,1,0,0,0,84,85,6,12,0,0,85,26,1,0,0,0,8,0,53,60,63,68,72,77,82,1,6,0,0];static __ATN;static get _ATN(){return t.__ATN||(t.__ATN=new Bc().deserialize(t._serializedATN)),t.__ATN}static DecisionsToDFA=t._ATN.decisionToState.map((e,r)=>new Kc(e,r))};import{ParseTreeVisitor as Xc}from"antlr4";var Tt=class extends Xc{visitParse;visitExpr;visitAndOrEqNeq;visitOr;visitAnd;visitMatch;visitNeq;visitEq;visitEqNeqTerm;visitTerm;visitIdent;visitOwnIdent;visitStr;visitWord;visitNumber};var E=new Tt,et=t=>{let e=E.visitChildren(t);return e.length==1?e[0]:e};E.visitParse=t=>t.expr().accept(E);E.visitExpr=t=>["expr",et(t)];E.visitAndOrEqNeq=et;E.visitEqNeqTerm=et;E.visitTerm=t=>t.getChildCount()===3?E.visit(t.getChild(1)):et(t);E.visitEq=t=>{let e=et(t.eqNeq()),r=t.term().accept(E);return["eq",e,r]};E.visitNeq=t=>{let e=et(t.eqNeq()),r=t.term().accept(E);return["neq",e,r]};E.visitMatch=t=>["match",E.visitChildren(t.eqNeq())[0],t.term().accept(E)];E.visitAnd=t=>{let e=E.visitChildren(t.andOr()),r=E.visitChildren(t.eqNeq());return["and",e[0],r[0]]};E.visitIdent=t=>["ident",t.word().accept(E)];E.visitOwnIdent=t=>["own-ident",t.word().accept(E)];E.visitWord=t=>["word",t.WORD().symbol.text];E.visitNumber=t=>["number",t.NUMBER().symbol.text];E.visitStr=t=>["str",t.STR().symbol.text.slice(1,-1)];var Bi=E;function Ki(t){let e=Zc.fromString(t),r=new It(e),n=new ed(r);return new P(n).parse().accept(Bi)}function nn(t,e){if(Array.isArray(e)){let[r,...n]=e,i=t[r];if(i){let s=n.map(a=>nn(t,a));return i.apply(t,s)}let o=n.map(s=>nn(t,s));return[r].concat(o)}return e}function Vi(t,e,r){return(t?.length??0)>0?nn({and:(n,i)=>n&&i,or:(n,i)=>n||i,eq:(n,i)=>n===i,neq:(n,i)=>n!==i,match:(n,i)=>i&&n?new RegExp(i).test(n):n,str(n){return n},number:n=>JSON.parse(n),expr:n=>n,"own-ident":([n,i])=>e[i],ident([n,i]){return r[i]}},t):!0}function z(t){return typeof t=="string"?t==="cluster"||t==="local"?t:Ki(t):t}function ne(t,e,r){let[n,i]=e,[o,s]=r;switch(t){case"local":{if(n){if(n.type==="local")return o?.type==="local";if(n.type==="peer")return o?.type==="peer"?o?.node===n?.node:!1}else return o===void 0||o.type==="local";return!0}case"cluster":return!0;default:return o?.type==="cluster"?!0:!!Vi(t,i,s)}}if(globalThis.crypto===void 0)throw new Error("Crypto API is not available. If Running Node 18, try --experimental-global-webcrypto.");function Te(){return globalThis.crypto.randomUUID().replaceAll("-","")}function A(t){return t?t.nodeId:Te()}function Ae(t){let e=t.currentId??1,r=`r-${t.nodeId}-${e}`;return[{...t,currentId:e+1},r]}function zi(t){let e=t.currentId??1,r=`i-${t.nodeId}-${e}`;return[{...t,currentId:e+1},r]}function Qt(t){let e=t.currentId??1,r=`c-${t.nodeId}-${e}`;return[{...t,currentId:e+1},r]}function Qi(t){let e=t.currentId??1,r=`a-${t.nodeId}-${e}`;return[{...t,currentId:e+1},r]}function Yi(t){let e=t.currentId??1,r=`p-${t.nodeId}-${e}`;return[{...t,currentId:e+1},r]}import{enableMapSet as rd,produce as Yt}from"immer";rd();function Xt(t,e){let r=e??Te();return{ids:{nodeId:t,currentId:1},signatureKey:r}}function me(t,e,r,n){return Yt(t,i=>{i.peers[e][r]=n?{restrictions:n}:{},i.domains=i.domains||{},i.domains[r]=i.domains[r]||new Set,i.domains[r].add(e)})}function Q(t,e,r){return Yt(t,n=>{n.peers&&delete n.peers[e][r],n.domains&&n.domains[r]&&n.domains[r].delete(e)})}function se(t,e,r){return!!t.domains?.[r]?.has(e)}function Xi(t,e){return!!t[e]}function sn(t,e,r){return e?Yt(t,n=>{n.gatewayRequests=n.gatewayRequests||{},n.gatewayRequests[e]=r}):t}function tt(t,e){return Yt({state:t},r=>{r.state.gatewayRequests&&(r.removed=r.state.gatewayRequests[e],delete r.state.gatewayRequests[e],Object.keys(r.state.gatewayRequests).length===0&&delete r.state.gatewayRequests)})}function At(t,e){return t.registeredDomains?.[e]?.domain}function ae(t,...e){return e.reduce(([r,n],i)=>{let[o,s]=i(r);return[o,n.concat(s)]},[t,[]])}import{castDraft as an,produce as Be}from"immer";de();function ro(t,e){switch(e.type){case"node":return e.node===t.node;case"peer":return e.node===t.node&&e.peer===t.peer;case"local":return e.receive===t.receive;default:return!1}}function Se(t,e,r){return X(t,r).filter(n=>ro(n.source,e))}function no(t,e){return ad(t).filter(r=>ro(r.source,e))}function F(t,e,r){let n=f(t,e);if(n?.[r])return n}function f(t,e){return e?t.peers?.[e]:void 0}function O(t,e){if(e){let r=f(t,e);if(r)return r;throw W(`Unable to find peer ${e}`,{})}else throw W("Peer id is missing",{})}function h(t,e,r){if(e){let n=F(t,e,r);if(n)return n;throw W(`Unable to find peer ${e} in domain ${r}`,{})}else throw W("Peer id is missing",{})}function U(t){return t?.source.type==="local"}function Y(t,e,r){return ne(e?.[t]?.restrictions,[e?.source,e?.identity],[{type:"cluster"},r])}function io(t,e){let r=nt(e);return t.identities?.get(r)}function ad(t){return Object.values(t.peers||{})}function X(t,e){return Array.from(t.domains?.[e]??[],r=>F(t,r,e)).filter(ce)}function cn(t,e,r,n,i,o){let s=f(t,r);if(s)return[t,s];let a=Be({id:r,identity:n,source:e},c=>{o&&(c.options=o),i&&(c.creationRequest=i)});return[Be(t,c=>{if(c.users=c.users||{},n.user){c.users.byName=c.users.byName||new Map;let d=c.users.byName.get(n.user);d?d.add(r):c.users.byName.set(n.user,new Set([r]))}else c.users.noUser=c.users.noUser||new Set,c.users.noUser.add(r);c.identities=c.identities||new Map,c.identities.set(nt(n),r),c.peers=c.peers||{},c.peers[r]=an(a),o?.service&&(c.services=c.services||new Set,c.services.add(r))}),a]}function oo(t,e){let r=e.identity,n=e.id,i=r.user;return Be(t,o=>{if(o.identities&&o.identities.delete(nt(r)),o.users)if(i){let s=o.users.byName?.get(i);s&&(s.delete(n),s.size==0&&o.users.byName?.delete(i)),o.users.byName&&o.users.byName.size===0&&delete o.users.byName}else o.users.noUser?.delete(n),o.users.noUser?.size===0&&delete o.users.noUser;o.peers&&delete o.peers[n],o.services=o.services||new Set,o.services&&o.services.delete(n)})}function C(t,e,r){return Be(t,n=>{n.peers=n.peers||an({}),n.peers[e]=an(r)})}function qe(t,e,r){return Be(t,n=>{n.peers[e]=Be(n.peers[e],r)})}function Zt(t,e){let[r,n,i,o]=t,[s,a,c,d]=e;if(!i&&!c){let u=a?.user,p=n?.user;return d||o||u===p}else return ne(i,[r,n],[s,a])&&ne(c,[s,a],[r,n])}function it(t,e,r){return r.id!==e.id&&Zt([e.source,e.identity,e[t]?.restrictions,e.options?.service],[r.source,r.identity,r[t]?.restrictions,r.options?.service])}function to(t,e,r,n=!1){return X(t,e).concat(Array.from(t.services??[],i=>f(t,i)).filter(ce)).filter(i=>n&&r.id===i.id||it(e,r,i))}function Z(t,e,r,n){if(r.options?.service)return to(t,e,r,n);{let i=r.identity.user;return i?Array.from(t.users?.byName?.get(i)??[]).concat(Array.from(t.services??[])).map(o=>f(t,o)).filter(ce).filter(o=>Xi(o,e)&&it(e,r,o)||n&&o.id===r.id):to(t,e,r,n)}}function cd(t,e,r,n,i){let o=i.identity,s=i.id,a=n.id,c=U(n);return Be(e,d=>{c&&d.push(He(t,r,a,s,o,{local:c})),U(i)&&d.push(He(t,i.source,s,a,n.identity,{local:c}))})}function er(t,e,r,n,i){return Z(r,e,i).reduce((o,s)=>cd(t,o,n,i,s),[])}function tr(t,e,r,n,i,o){let s=n.id;return[Q(r,s,e),Z(r,e,n).filter(U).reduce((a,c)=>(a=a.concat(Fe(t,c.source,c.id,s,i)),o||(a=a.concat(Fe(t,n.source,s,c.id,i))),a),[])]}function dd(t,e){if(t===e)return!0;let r=Object.keys(t);if(r.length!==Object.keys(e).length)return!1;for(let n of r)if(t[n]!==e[n])return!1;return!0}function ud(t,e,r){let{peer_id:n}=r,i=f(t,n);if(i&&!dd(e,i.source))throw W(`The original source ${JSON.stringify(i.source)} of peer ${n} doesnt match the current source ${JSON.stringify(e)}`,{message:"Bad Source"})}var ot=y("gateway.node");function pd(t,e){let r=Object.values(e.registeredDomains).filter(n=>n.info.uri!==he).map(n=>n.domain);return e.registeredDomains[he]&&r.push(e.registeredDomains[he].domain),r.reduce(([n,i],o)=>{ot.enabledFor("debug")&&ot.debug(`About to remove source from domain ${JSON.stringify(o.info())}`);let s=o.handleMessage(n,t);if(s){ot.enabledFor("debug")&&ot.debug(`removed source from domain ${JSON.stringify(o.info())}`);let[a,c]=s;return[a,i.concat(c)]}else return[n,i]},[e,[]])}function Ke(t,e,r){if(e.body.type==="commands/source-removed")return pd(e,t);{let{body:n}=e,{registeredDomains:i}=t,o=n.domain??he,s=i[o]?.domain;if(s)return ot.enabledFor("debug")&&ot.debug(`Handling message with domain ${JSON.stringify(s.info())} message: ${JSON.stringify(e,null," ")}`),ud(t,r,n),s.handleMessage(t,e);{let a=n;return[t,[g(a.domain,r,a.request_id,a.peer_id,x(Ne,`Unable to find domain for message ${JSON.stringify(e)}`))]]}}}function rr(t){return t.reduce((e,r)=>{let n=r.info(),i={};return i[n.uri]={domain:r,info:n},Object.assign(e,i)},{})}q();de();var dn=class{constructor(e){this.handler=e}close(){}message(e){this.handler(e)}addSource(e){}removeSource(e){let r={origin:"local",source:e,body:{type:"commands/source-removed"}};return this.handler(r)}},Ce=y("gateway.node.local");function md(t,e){let{source:r,body:n,origin:i}=e;try{return n.dump?(Ce.info(`state dump: ${JSON.stringify(ke(t),null," ")}`),[t,[]]):i==="cluster"?[t,[]]:Ke(t,e,r)}catch(o){Ce.error(`Error handling message ${JSON.stringify(e)}`,o);let s=n;return[t,[g(void 0,r,s.request_id,s.peer_id,L(o,Ne))]]}}function ld(t){return"receive"in t&&t.receive}function fd(t){switch(t.receiver.type){case"cluster":return;case"node":return;case"peer":return;case"local":{let{receiver:e,body:r}=t;Ce.enabledFor("debug")&&Ce.debug(`Sending message ${JSON.stringify(r,null," ")} to ${JSON.stringify(e)}`),ld(e)&&e.receive(r);break}default:{Ce.error(`Unable to process response ${JSON.stringify(t)}`);break}}}function yd(t,e){try{Ce.enabledFor("trace")&&Ce.debug(`domain handler processing message ${JSON.stringify(e)}`);let[r,n]=md(t,e);if(n)for(let i of n)fd(i);return r??t}catch(r){return Ce.error(`error handling message ${JSON.stringify(e)}`,r),t}}function so(t,e){let r,n=o=>{try{r=yd(r,o)}catch(s){throw Ce.error(`Error processing internal message ${JSON.stringify(o)}`,s),s}},i=rr(t);return r=t.reduce((o,s)=>s.init(o),{...Xt(e?.nodeId??A(),e?.signingKey),registeredDomains:i,handler:n}),new dn(n)}var D=he,un=Ne,ao=`${D}.errors.unhandled_message`,pn=`${D}.errors.already_seen`,mn=`${D}.errors.invalid_domain`,yy=`${D}.errors.invalid_context`,ln=`${D}.errors.authentication.failure`,fn=`${D}.errors.invalid_peer`;q();function co(t,e,r,n,i,o){let s={domain:D,type:"welcome",request_id:e,peer_id:r,available_domains:n,resolved_identity:i};return o&&(s.options=o),b(t,s)}function uo(t,e,r,n,i){let o={domain:t,type:"authentication-request",request_id:r,authentication:i};return n&&(o.peer_id=n),b(e,o)}function st(t,e,r,n,i,o){let s={domain:D,type:"join",request_id:t,peer_id:e,destination:n,identity:i};return r&&(s.restrictions=r),o&&(s.options=o),s}function po(t){return b(t,{type:"ping"})}var yn={application:{required:!0},instance:{required:!1},region:{required:!1},environment:{required:!1},machine:{required:!1},user:{required:!1}};function hd(t){return Object.keys(yn).find(e=>yn[e]&&yn[e].required&&t[e]===void 0)}function mo(t){let e=hd(t);if(e)throw new be(`Identity ${JSON.stringify(t)} is missing required key: ${e}`,{})}function lo(t,e){let r=t;return r&&r.indexOf(":")!==-1&&(r=r.substring(0,r.indexOf(":"))),r&&r.indexOf("127.0.0.1")>=0?e??r:r??e}import{KJUR as gn}from"jsrsasign";function Ct(t,e){return gn.jws.JWS.sign(null,{alg:"HS256",typ:"JWT"},t,e)}function nr(t,e,r){let n;if(gn.jws.JWS.verifyJWT(t,e,{alg:["HS256"],verifyAt:r?.now}))n=gn.jws.JWS.parse(t);else throw new Error("invalid jwt token");return n.payloadObj}function hn(t,e,r,n){let i={type:"gw-request","impersonate-peer":e,"gw-request":r};return n&&(i.exp=Math.floor(n/1e3)),Ct(i,t.signatureKey)}function fo(t,e,r){let n={type:"authentication",user:e.user};return r&&(n.exp=Math.floor(r/1e3)),Ct(n,t.signatureKey)}function yo(t,e,r){r===void 0&&(r=r??Date.now());let n={};return r&&(n.now=Math.floor(r/1e3)),nr(e,t,n)}import{castDraft as bn,produce as at}from"immer";function ho(t){return Object.values(t.contexts||{})}function ir(t,e){return at(t,r=>{r.contexts=r.contexts||{},r.contexts[e.id]=bn(e)})}function or(t,e){return at(t,r=>{r.contexts&&(delete r.contexts[e],Object.values(r.contexts).length===0&&delete r.contexts)})}function Ve(t,e,r){let n=r.identity.user,i=r.options?.service,o=Object.values(t.contexts||{}),s;return s=o.find(a=>e===a.name&&a.identity.user===n),s||(s=o.find(a=>e===a.name&&(i||a.options?.service))),s}function Ee(t,e){if(e)return t.contexts?.[e]}function Pt(t,e){let r=t.contexts?.[e];if(r)return r;throw W(`Unable to find context with id ${e}`,{})}function ct(t,e,r){return e&&r?e.members.has(r)?t:at(t,i=>{i.contexts=i.contexts||{},i.contexts[e.id]=bn(at(e,o=>{o.members=o.members||new Set,o.members.add(r)}))}):t}function sr(t,e,r){return at([t,e],([n,i])=>{i.members.delete(r),r===i.owner&&delete i.owner,n.contexts=n.contexts||{},n.contexts[e.id]=i})}function bo(t,e,r){if(!e)return r;if(e.length===1)t[e[0]]=r;else{let n=t[e[0]];(n===void 0||Array.isArray(n)||typeof n=="number"||typeof n=="boolean")&&(n={}),t[e[0]]=bo(n,e.slice(1),r)}return t}function bd(t,e){return{...t,...e}}function xd(t,e){let[r,n]=e;switch(r){case"removed":{n.forEach(i=>{delete t?.[i]});break}case"added":{t=Object.entries(n).reduce((i,[o,s])=>(i[o]=s,i),t??{});break}case"updated":{t=Object.entries(n).reduce((i,[o,s])=>(Array.isArray(s)&&Array.isArray(i[o])?i[o]=s:s instanceof Object&&i[o]instanceof Object?i[o]=bd(i[o],s):i[o]=s,i),t??{});break}case"reset":{n&&(t=n);break}case"commands":{t=n.reduce((i,o)=>{switch(o.type){case"set":return bo(i??{},go(o.path),o.value);case"remove":{let s=go(o.path);if(s){let a=i;for(let c=0;c<s.length-1;c++){let d;if(typeof a!="object")return i;d=a?.[s[c]],a=d}a&&delete a[s[s.length-1]]}else return{};return i}}},t);break}}return t}function xo(t,e,r,n){return at(t,i=>{i.contexts[e].data=Object.entries(r).reduce((o,[s,a])=>xd(o,[s,a]),i.contexts[e].data),i.contexts[e].version=n})}function go(t){if(t)return t.split(".")}function ar(t,e,r,n,i,o,s,a){let c=t.identity,d=t.options,u={id:s,data:r??{},identity:c,lifetime:n,read_permissions:i,write_permissions:o,members:new Set,version:a,name:e,creator:t.id};return d&&(bn(u).options=d),u}function Ro(t){let e=t.version?.updates||0;e++;let r=Date.now();return{updates:e,timestamp:r}}function cr(){return{updates:0,timestamp:Date.now()}}function Pe(t){return ne(t.read_permissions,[{type:t.local?"local":"cluster"},t.identity],[{type:"cluster"},void 0])}function So(t,e,r,n,i,o){return b(e,{domain:t,type:"subscribed-context",request_id:r,peer_id:n,context_id:i,data:o})}function xn(t,e,r,n,i,o){return b(e,{domain:t,type:"context-added",peer_id:r,creator_id:n,context_id:i,name:o})}function Rn(t,e,r,n,i){let o={domain:t,type:"context-destroyed",peer_id:r,context_id:n,reason_uri:i.uri,reason:i.message};return b(e,o)}function vo(t,e,r,n,i){return b(e,{domain:t,type:"context-created",request_id:r,peer_id:n,context_id:i})}function wo(t,e,r,n,i,o){return b(e,{domain:t,type:"context-updated",peer_id:r,updater_id:n,context_id:i,delta:o})}function Mt(t){return`${t}.errors.not_authorized`}function Io(t){return`${t}.errors.bad_lifetime`}function Sn(t){return x(`${t}.destroyed`,"Context destroyed explicitly")}function To(t){return x(`${t}.peer-left`,"Context destroyed because its owner/last peer left")}function Ue(t){return`${t}.errors.failure`}import{produce as vd}from"immer";function v(t,e){return{type:"peer",peer:e,node:t}}function Me(t){return{type:"node",node:t}}q();import{castDraft as Ey,produce as Gy}from"immer";function vn(t){return Object.values(t.contexts||{})}de();function Ao(t,e){let r=t.version,n=e.version;return r.updates>n.updates||r.updates===n.updates&&r.timestamp>=n.timestamp}function dr(t,e,r=!1){let n=t.lifetime;return e.id===t.creator?!0:n==="activity"?t.members.has(e.id):e.id===t.creator||e.id===t.owner?!0:r?t.write_permissions?ne(t.write_permissions,[void 0,t.identity],[e.source,e.identity]):!1:ne(t.write_permissions,[void 0,t.identity],[e.source,e.identity])}function Co(t,e,r){e.lifetime==="activity"&&k(Mt(t),"Activity contexts cannot be explicitly destroyed");let n=e.lifetime==="ownership";n&&e.owner===r.id||!n&&dr(e,r)||k(Mt(t),"Not authorized to destroy context")}function ur(t,e){return e.id===t.creator||e.id===t.owner||ne(t.read_permissions,[void 0,t.identity],[e.source,e.identity])||dr(t,e,!0)}function wd(t,e){return U(t)&&e.lifetime!=="activity"&&ur(e,t)}function pr(t,e,r){ur(e,r)||k(Mt(t),"Not authorized to read context")}function Id(t,e){if(!t&&!Pe(e))throw new Error(`cannot create remote context '${e.name}' locally`)}function Td(t,e,r,n){let{peer_id:i,name:o}=n;try{let s=O(e,i),a=Ve(e,o,s);return a?Tn(t,e,i,a):(ve.warn(`unable to find remote context ${o}`),[e,[]])}catch(s){return ve.warn(`unable to process remote unsubscribe ${n}`,s),[e,[]]}}function Ad(t,e,r,n){let{request_id:i,peer_id:o,context_id:s}=n;try{O(e,o);let a=Pt(e,s),[c,d]=Tn(t,e,o,a);if(d=d.concat([I(t,r,i,o)]),Pe(a)){let u={...n,type:"unsubscribe-context",name:a.name};d=d.concat([G(v(A(c.ids),o),u)])}return[c,d]}catch(a){return[e,[g(t,r,i,o,L(a,Ue(t)))]]}}function mr(t,e,r,n){return $(r)?Td(t,e,r,n):Ad(t,e,r,n)}function Po(t,e,r){let{source:n,id:i}=r;return vn(e).filter(o=>wd(r,o)).map(o=>{let{creator:s,id:a,name:c}=o;return xn(t,n,i,s,a,c)})}function Dt(t){return t.options?.["context-compatibility-mode?"]?he:Ze}function wn(t,e,r,n,i,o){let s=e.id,a=xo(t,e.id,n,i);return[a,Array.from(e.members).filter(c=>c!==r).map