@niledatabase/server 2.2.0-alpha.2 → 2.2.0
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.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("dotenv/config");var t=require("lodash/isEmpty"),e=require("lodash/isObject"),n=require("jose"),r=require("pg");function o(){o=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",u=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function f(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{f({},"")}catch(t){f=function(t,e,n){return t[e]=n}}function p(t,e,n,r){var o=Object.create((e&&e.prototype instanceof y?e:y).prototype),i=new T(r||[]);return a(o,"_invoke",{value:_(t,n,i)}),o}function l(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=p;var d="suspendedStart",h="suspendedYield",v="executing",g="completed",b={};function y(){}function w(){}function I(){}var m={};f(m,s,(function(){return this}));var k=Object.getPrototypeOf,x=k&&k(k(R([])));x&&x!==n&&r.call(x,s)&&(m=x);var E=I.prototype=y.prototype=Object.create(m);function N(t){["next","throw","return"].forEach((function(e){f(t,e,(function(t){return this._invoke(e,t)}))}))}function U(t,e){function n(o,a,i,s){var u=l(t[o],t,a);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){n("next",t,i,s)}),(function(t){n("throw",t,i,s)})):e.resolve(f).then((function(t){c.value=t,i(c)}),(function(t){return n("throw",t,i,s)}))}s(u.arg)}var o;a(this,"_invoke",{value:function(t,r){function a(){return new e((function(e,o){n(t,r,e,o)}))}return o=o?o.then(a,a):a()}})}function _(e,n,r){var o=d;return function(a,i){if(o===v)throw Error("Generator is already running");if(o===g){if("throw"===a)throw i;return{value:t,done:!0}}for(r.method=a,r.arg=i;;){var s=r.delegate;if(s){var u=L(s,r);if(u){if(u===b)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===d)throw o=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=v;var c=l(e,n,r);if("normal"===c.type){if(o=r.done?g:h,c.arg===b)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(o=g,r.method="throw",r.arg=c.arg)}}}function L(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,L(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var a=l(o,e.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,b;var i=a.arg;return i?i.done?(n[e.resultName]=i.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,b):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,b)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function R(e){if(e||""===e){var n=e[s];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}throw new TypeError(typeof e+" is not iterable")}return w.prototype=I,a(E,"constructor",{value:I,configurable:!0}),a(I,"constructor",{value:w,configurable:!0}),w.displayName=f(I,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===w||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,I):(t.__proto__=I,f(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},N(U.prototype),f(U.prototype,u,(function(){return this})),e.AsyncIterator=U,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new U(p(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},N(E),f(E,c,"Generator"),f(E,s,(function(){return this})),f(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),n=[];for(var r in e)n.push(r);return n.reverse(),function t(){for(;n.length;){var r=n.pop();if(r in e)return t.value=r,t.done=!1,t}return t.done=!0,t}},e.values=R,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(O),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return s.type="throw",s.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===t||"continue"===t)&&a.tryLoc<=e&&e<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=t,i.arg=e,a?(this.method="next",this.next=a.finallyLoc,b):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),b},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),O(n),b}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:R(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),b}},e}function a(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}function i(t,e,n,r,o,a,i){try{var s=t[a](i),u=s.value}catch(t){return void n(t)}s.done?e(u):Promise.resolve(u).then(r,o)}function s(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function s(t){i(a,r,o,s,u,"next",t)}function u(t){i(a,r,o,s,u,"throw",t)}s(void 0)}))}}function u(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,a(r.key),r)}}function c(t,e,n){return e&&u(t.prototype,e),n&&u(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function f(){return f=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},f.apply(this,arguments)}function p(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,l(t,e)}function l(t,e){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},l(t,e)}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function h(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return d(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[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.")}function v(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return{info:function(){if(null!=t&&t.debug){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];(e=console).info.apply(e,["[niledb]"].concat(n,o))}},warn:function(){if(null!=t&&t.debug){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];(e=console).warn.apply(e,["[niledb]"].concat(n,o))}},error:function(){if(null!=t&&t.debug){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];(e=console).error.apply(e,["[niledb]","[ERROR]"].concat(n,o))}}}}var g=function(t){var e=t.config,n=t.logger,r=v(e,"[username]").info;return null!=e&&e.user?(n&&r(n,"config",e.user),String(null==e?void 0:e.user)):(n&&r(n,".env",process.env.NILEDB_USER),process.env.NILEDB_USER)},b=function(t){var e=t.config;return v(e,"[password]"),null!=e&&e.password?String(e.password):process.env.NILEDB_PASSWORD},y=function(t){var e,n,r,o=t.config,a=t.logger,i=v(o,"[token]").info;return null!=o&&null!=(e=o.api)&&e.token?(a&&i(a,"config",null==(n=o.api)?void 0:n.token),String(null==(r=o.api)?void 0:r.token)):process.env.NILEDB_TOKEN?(a&&i(a,".env",process.env.NILEDB_TOKEN),process.env.NILEDB_TOKEN):void 0},w=function(t){var e=t.config,n=t.logger,r=v(e,"[databaseName]").info;return null!=e&&e.databaseName?(n&&r(n,"config",e.databaseName),String(e.databaseName)):process.env.NILEDB_NAME?(n&&r(n,"config",process.env.NILEDB_NAME),process.env.NILEDB_NAME):null},I=function(t){var e,n,r=t.config,o=t.logger,a=v(r,"[basePath]").info,i=null==r||null==(e=r.api)?void 0:e.basePath;return i?(o&&a(o,"config",null==r||null==(n=r.api)?void 0:n.basePath),i):process.env.NILEDB_API?(o&&a(o,".env",process.env.NILEDB_API),"https://"+process.env.NILEDB_API):(o&&a(o,"default",process.env.NILEDB_API),"https://api.thenile.dev")};function m(t){var e=t.config,n=t.logger,r=v(e,"[db.host]").info;return null!=e&&e.db&&e.db.host?(n&&r(n,"config",null==e?void 0:e.db.host),e.db.host):process.env.NILEDB_HOST?(n&&r(n,".env",process.env.NILEDB_HOST),process.env.NILEDB_HOST):(n&&r(n,"default","db.thenile.dev"),"db.thenile.dev")}function k(t){var e,n,r=t.config,o=t.logger,a=v(r,"[db.port]").info;return null!=r&&null!=(e=r.db)&&e.port&&null!=r.db.port?(o&&a(o,"config",null==r?void 0:r.db.port),Number(null==(n=r.db)?void 0:n.port)):process.env.NILEDB_PORT?(o&&a(o,"config",process.env.NILEDB_PORT),Number(process.env.NILEDB_PORT)):(o&&a(o,"default",5432),5432)}var x,E=function(){return c((function(t){var e=t.basePath,n=t.cookieKey,r=t.token;this.cookieKey=void 0,this.basePath=void 0,this._token=void 0,this.basePath=e,this.cookieKey=n,this._token=r}),[{key:"token",get:function(){return this._token},set:function(t){this._token=t}}])}(),N=function(){return c((function(t){var e,n,r=this;this.user=void 0,this.password=void 0,this.databaseId=void 0,this.databaseName=void 0,this.debug=void 0,this.db=void 0,this.api=void 0,this._tenantId=void 0,this._userId=void 0,this.configure=function(){var t=s(o().mark((function t(e){var n,a,i,s,u,c,p,l,d,h,x,N,U,_,L,P,O,T,R,j,S,D;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=v(e,"[init]"),s=i.info,u=i.error,p=I(c={config:e}),l=m(c),d=k(c),h=w({config:e,logger:"getInfo"}),x=new URL(p+"/databases/configure"),h&&x.searchParams.set("databaseName",h),s(x.href),t.next=11,fetch(x,{headers:{Authorization:"Bearer "+(o={config:e},g(o)+":"+b(o))}});case 11:return _=(N=t.sent).clone(),t.prev=13,t.next=16,N.json();case 16:L=t.sent,404===N.status&&s("is the configured databaseName correct?"),U=L.status&&"READY"!==L.status?{message:"Database is not ready yet"}:L,t.next=28;break;case 21:return t.prev=21,t.t0=t.catch(13),t.next=25,_.text();case 25:u(P=t.sent),U={message:P};case 28:if(l&&r.databaseName&&r.databaseId){t.next=39;break}if(s("[fetched database]",U),!("message"in U)){t.next=38;break}if(!("statusCode"in U)){t.next=37;break}throw u(U),new Error("HTTP error has occured");case 37:throw new Error("Unable to auto-configure. Please set or remove NILEDB_API, NILEDB_NAME, and NILEDB_HOST in your .env file.");case 38:"object"==typeof U&&(T=(O=U).apiHost,R=O.dbHost,j=O.name,r.databaseId=O.id,r.databaseName=j,S=new URL(R),D=new URL(T),l=S.host,p=D.origin);case 39:return r.api=new E({basePath:p,cookieKey:null!=(n=null==e||null==(a=e.api)?void 0:a.cookieKey)?n:"token",token:y({config:e})}),r.db=f({user:r.user,password:r.password,host:l,port:d,database:r.databaseName},"object"==typeof(null==e?void 0:e.db)?e.db:{}),s("[config set]",r),t.abrupt("return",r);case 43:case"end":return t.stop()}var o}),t,null,[[13,21]])})));return function(e){return t.apply(this,arguments)}}();var a,i,u,c,p={config:t};this.databaseId=(u=(a=p).logger,c=v(i=a.config,"[databaseId]").info,null!=i&&i.databaseId?(u&&c(u,"config",i.databaseId),String(null==i?void 0:i.databaseId)):(u&&c(u,"env",process.env.NILEDB_ID),process.env.NILEDB_ID)),this.user=g(p),this.password=b(p),this.databaseName=w(p),this._tenantId=function(t){var e=t.config,n=t.logger,r=v(e,"[tenantId]").info;return null!=e&&e.tenantId?(n&&r(n,"config",e.tenantId),e.tenantId):process.env.NILEDB_TENANT?(n&&r(n,".env",process.env.NILEDB_TENANT),process.env.NILEDB_TENANT):null}(p),this.debug=Boolean(null==t?void 0:t.debug),this._userId=null==t?void 0:t.userId;var l=I(p),d=m(p),h=k(p);this.api=new E({basePath:l,cookieKey:null!=(e=null==t||null==(n=t.api)?void 0:n.cookieKey)?e:"token",token:y({config:t})}),this.db=f({user:this.user,password:this.password,host:d,port:h,database:this.databaseName},"object"==typeof(null==t?void 0:t.db)?t.db:{})}),[{key:"tenantId",get:function(){return this._tenantId},set:function(t){this._tenantId=t}},{key:"userId",get:function(){return this._userId},set:function(t){this._userId=t}}])}(),U=function(t,e){this.response=void 0,this.response=new Response(t,e)};!function(t){t.User="userId",t.Tenant="tenantId",t.Token="token",t.EvictPool="EvictPool"}(x||(x={}));var _=new(function(){function t(){this.events=void 0,this.events={}}var e=t.prototype;return e.publish=function(t,e){var n=this.events[t];if(n)for(var r,o=h(n);!(r=o()).done;)(0,r.value)(e)},e.subscribe=function(t,e){this.events[t]||(this.events[t]=[]),this.events[t].push(e)},t}()),L=function(t){_.publish(x.Tenant,t)},P=function(t){_.publish(x.User,t)},O=function(t){_.publish(x.Token,t)},T="x-nile-tenantId",R="x-nile-userId";function j(t,e){var n,r=null==(n=t.get("cookie"))?void 0:n.split("; "),o={};if(r)for(var a,i=h(r);!(a=i()).done;){var s=a.value.split("="),u=s.slice(1).join("=");o[s[0]]=u}if(r)for(var c,f=h(r);!(c=f()).done;){var p=c.value.split("="),l=p.slice(1).join("=");o[p[0]]=l}return e?o[e]:null}function S(t,e){var n,r=j(t,"tenantId");return null!=(n=null!=r?r:null==t?void 0:t.get(T))?n:e.tenantId}function D(t,e){var r,o=j(t,e.api.cookieKey);return o?n.decodeJwt(o).sub:null!=(r=null==t?void 0:t.get(R))?r:e.userId}function B(t,e,n){return A.apply(this,arguments)}function A(){return(A=s(o().mark((function t(e,n,r){var a,i,s,u,c,p,l,d,h,g,b,w,I,m,k,x,E,N,_,O;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(u=v(e,"[server]"),c=u.info,p=u.error,l=""+(null==(a=e.api)?void 0:a.basePath)+n,d=null==(i=e.api)?void 0:i.cookieKey,h=new Headers(null==r?void 0:r.headers),(g=new Headers).set("content-type","application/json; charset=utf-8"),h.get("Authorization")||((b=j(h,d))?g.set("Authorization","Bearer "+b):y({config:e})&&g.set("Authorization","Bearer "+y({config:e}))),w=S(h,e),L(w),I=D(h,e),P(I),!l.includes("{tenantId}")||w){t.next=14;break}return t.abrupt("return",new U("tenantId is not set for request",{status:400}));case 14:return m=l.replace("{tenantId}",encodeURIComponent(String(w))).replace("{userId}",encodeURIComponent(String(I))),c("[fetch]",m),t.next=18,fetch(m,f({},r,{headers:g})).catch((function(t){p("[fetch]","[response]",t)}));case 18:if(!((k=t.sent)&&k.status>=200&&k.status<300)){t.next=27;break}if("function"!=typeof k.clone){t.next=26;break}return t.t0=c,t.next=24,k.clone().json();case 24:t.t1=t.sent,(0,t.t0)("[fetch]","[response]",t.t1);case 26:return t.abrupt("return",k);case 27:return E="function"==typeof(null==k?void 0:k.clone)?k.clone():null,N="",t.prev=29,t.next=32,null==k?void 0:k.json();case 32:x=t.sent,t.next=43;break;case 35:if(t.prev=35,t.t2=t.catch(29),!E){t.next=42;break}return t.next=40,E.text();case 40:(N=t.sent)&&p("[fetch]","[response]","[status: "+E.status+"]",N);case 42:N||p("[fetch]","[response]",t.t2);case 43:if(!N){t.next=45;break}return t.abrupt("return",new U(N,{status:null==E?void 0:E.status}));case 45:if(!x||!("message"in x)){t.next=49;break}return p("[fetch]","[response]","[status: "+(null==E?void 0:E.status)+"]",_=x.message),t.abrupt("return",new U(_,{status:400}));case 49:if(!x||!("errors"in x)){t.next=53;break}return p("[fetch]","[response]","[status: "+(null==E?void 0:E.status)+"]",O=x.errors[0]),t.abrupt("return",new U(O,{status:400}));case 53:return p("[fetch]","[response]","[status: "+(null==E?void 0:E.status)+"]","UNHANDLED ERROR"),t.abrupt("return",new U(null,{status:null!=(s=null==k?void 0:k.status)?s:500}));case 55:case"end":return t.stop()}}),t,null,[[29,35]])})))).apply(this,arguments)}var C=function(n){function r(t){var e;return(e=n.call(this,t)||this).post=function(){var t=s(o().mark((function t(n,r,a){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request("POST",r,n,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),e.get=function(){var t=s(o().mark((function t(n,r,a){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request("GET",r,n,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),e.put=function(){var t=s(o().mark((function t(n,r,a){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request("PUT",r,n,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),e}p(r,n);var a=r.prototype;return a.rawRequest=function(){var t=s(o().mark((function t(e,n,r,a){var i,s;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=f({},r,{body:a,method:e}),t.next=3,B(this,n,i);case 3:if(!((s=t.sent)instanceof U)){t.next=6;break}return t.abrupt("return",s.response);case 6:return t.abrupt("return",s);case 7:case"end":return t.stop()}}),t,this)})));return function(e,n,r,o){return t.apply(this,arguments)}}(),a.request=function(){var n=s(o().mark((function n(r,a,i,s){var u,c,p,l,d,h,v,g;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(u=new Headers(s?null==s?void 0:s.headers:{}),i instanceof Headers?(c=i.get(T),p=i.get("cookie"),c&&u.set(T,c),p&&u.set("cookie",p)):i instanceof Request&&(l=new Headers(null==i?void 0:i.headers),d=l.get(T),h=l.get("cookie"),d&&u.set(T,d),h&&u.set("cookie",h)),v=JSON.stringify(i),"GET"!==r){n.next=7;break}v=void 0,n.next=14;break;case 7:if(!(i instanceof Request)){n.next=13;break}return n.next=10,new Response(i.body).text();case 10:v=n.sent,n.next=14;break;case 13:(i instanceof Headers||t(i)||e(i)&&0===Object.values(i).length)&&(v=void 0);case 14:return g=f({},s,{headers:u}),n.next=17,this.rawRequest(r,a,g,v);case 17:return n.abrupt("return",n.sent);case 18:case"end":return n.stop()}}),n,this)})));return function(t,e,r,o){return n.apply(this,arguments)}}(),r}(N),H=function(t){function e(e){var n;return(n=t.call(this,e)||this).login=function(){var t=s(o().mark((function t(e,r){var a,i,s,u,c,f,p,l,d,h,v;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=new Headers({"content-type":"application/json"}),i=new C(n),"true"!==(e instanceof Request?new URL(e.url).searchParams:new URLSearchParams).get("sso")){t.next=18;break}return t.next=7,n.listProviders(e.clone(),r);case 7:if(!((s=t.sent)&&s.status>=200&&s.status<300)){t.next=18;break}return t.next=11,new Response(s.body).json();case 11:if(!((u=t.sent).length>0)){t.next=18;break}if(!(u.length>1)){t.next=15;break}return t.abrupt("return",new Response(JSON.stringify(u),{status:200}));case 15:return a.set(T,u[0].tenantId),a.append("set-cookie","tenantId="+u[0].tenantId+"; path=/; httponly;"),t.abrupt("return",new Response(JSON.stringify({redirectURI:""+n.api.basePath+n.loginSSOUrl("okta")}),{status:200}));case 18:return t.next=20,i.post(e,n.loginUrl,r).catch((function(t){return console.error(t),t}));case 20:if(!((c=t.sent)instanceof U)){t.next=23;break}return t.abrupt("return",c.response);case 23:if(!(c&&c.status>=200&&c.status<300)){t.next=36;break}return t.next=26,c.json();case 26:return l=(null==(f=n.api)?void 0:f.cookieKey)+"="+(p=t.sent).token.jwt+"; path=/; samesite=lax; httponly;",a.append("set-cookie",l),h=null==(d=p.tenants)?void 0:d.values(),v=null==h?void 0:h.next().value,a.set(T,v),a.append("set-cookie","tenantId="+v+"; path=/; httponly;"),O(p.token.jwt),t.abrupt("return",new Response(JSON.stringify(p),{status:200,headers:a}));case 36:return t.next=38,c.text();case 38:return t.abrupt("return",new Response(t.sent,{status:c.status}));case 40:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.loginSSO=function(t){var e=function(){var e=s(o().mark((function e(r){var a,i,s,u,c,f;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new Headers,e.next=3,r.formData();case 3:return s=e.sent,e.next=6,s.get("access_token");case 6:return u=e.sent,e.next=9,s.get("tenantId");case 9:return c=e.sent,f=(null==(a=n.api)?void 0:a.cookieKey)+"="+u+"; path=/; samesite=lax; httponly;",O(u),i.append("set-cookie",f),i.set(T,c),i.append("set-cookie","tenantId="+c+"; path=/; httponly;"),i.set("Location",t),e.abrupt("return",new Response(null,{headers:i,status:303}));case 17:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return e},n.loginSSOUrl=function(t){var e;return"/databases/"+encodeURIComponent(n.databaseId)+"/tenants/"+(null!=(e=n.tenantId)?e:"{tenantId}")+"/auth/oidc/providers/"+t+"/login"},n.signUp=function(){var t=s(o().mark((function t(e,r){var a,i,s,u,c,f,p,l,d;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new Headers,i=new C(n),t.next=4,i.post(e,n.signUpUrl,r).catch((function(t){return console.error(t),t}));case 4:if(!((s=t.sent)instanceof U)){t.next=7;break}return t.abrupt("return",s.response);case 7:if(!(s&&s.status>=200&&s.status<300)){t.next=19;break}return t.next=10,s.json();case 10:return l=(null==(u=n.api)?void 0:u.cookieKey)+"="+(null==(c=(p=t.sent).token)?void 0:c.jwt)+"; path=/; samesite=lax; httponly;",a.append("set-cookie",l),d=p.id,O(null==(f=p.token)?void 0:f.jwt),P(d),a.set(R,d),a.append("set-cookie","userId="+d+"; path=/; httponly;"),t.abrupt("return",new Response(JSON.stringify(p),{status:201,headers:a}));case 19:return t.next=21,s.text();case 21:return t.abrupt("return",new Response(t.sent,{status:s.status}));case 23:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.listTenantProviders=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.get(e,n.listTenantProvidersUrl,r));case 2:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.createProvider=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.post(e,n.updateProviderUrl("okta"),r));case 3:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.updateProvider=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.put(e,n.updateProviderUrl("okta"),r));case 3:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.listProviders=function(){var t=s(o().mark((function t(e,r){var a,i,s;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=new C(n),!e||!("body"in e)){t.next=5;break}return t.next=4,new Response(e.body).json();case 4:s=t.sent;case 5:return t.abrupt("return",i.get(e,n.providerUrl(null==(a=s)?void 0:a.email),r));case 6:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.getSSOCallbackUrl=function(t){var e;return"string"==typeof e?e=t:t instanceof Headers&&(e=S(t,n)),"/databases/"+n.databaseId+"/tenants/"+e+"/auth/oidc/callback"},n}p(e,t);var n=e.prototype;return n.updateProviderUrl=function(t){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/"+(this.tenantId?encodeURIComponent(this.tenantId):"{tenantId}")+"/auth/oidc/providers/"+encodeURIComponent(t)},n.providerUrl=function(t){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/auth/oidc/providers"+(t?"?email="+encodeURIComponent(t):"")},c(e,[{key:"loginUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/users/login"}},{key:"signUpUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/users"}},{key:"listTenantProvidersUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/"+(this.tenantId?encodeURIComponent(this.tenantId):"{tenantId}")+"/auth/oidc/providers"}}])}(N),q=function(t){function e(e){var n;return(n=t.call(this,e)||this).createTenantUser=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.post(e,n.tenantUsersUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.listUsers=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.get(e,n.usersUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.updateUser=function(){var t=s(o().mark((function t(e,r,a){var i;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=new C(n),t.next=3,i.put(r,n.usersUrl+"/"+e,a);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),n.listTenantUsers=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.get(e,n.tenantUsersUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.me=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.get(e,n.meUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n}return p(e,t),c(e,[{key:"baseUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)}},{key:"usersUrl",get:function(){return this.baseUrl+"/users"}},{key:"tenantUsersUrl",get:function(){var t;return this.baseUrl+"/tenants/"+(null!=(t=this.tenantId)?t:"{tenantId}")+"/users"}},{key:"meUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/users/me"}}])}(N),K=function(t){function e(e){var n;return(n=t.call(this,e)||this).createTenant=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.post(e,n.tenantsUrl,r));case 2:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.getTenant=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.get(e,n.tenantUrl,r));case 2:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n}return p(e,t),c(e,[{key:"tenantsUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants"}},{key:"tenantUrl",get:function(){var t;return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/"+(null!=(t=this.tenantId)?t:"{tenantId}")}}])}(N),M=["afterCreate"],G=function(){function t(t,e){var n=this;this.pool=void 0,this.tenantId=void 0,this.userId=void 0,this.id=void 0,this.config=void 0,this.timer=void 0;var a=v(t,"[NileInstance]"),i=a.warn,u=a.info;this.id=e;var c=f({min:0,max:10,idleTimeoutMillis:3e4},t.db),p=c.afterCreate,l=function(t,e){if(null==t)return{};var n,r,o={},a=Object.keys(t);for(r=0;r<a.length;r++)e.indexOf(n=a[r])>=0||(o[n]=t[n]);return o}(c,M);t.db=c,this.config=t,u(this.config),this.pool=new r.Pool(l),"function"==typeof p&&i("Providing an pool configuration will stop automatic tenant context setting."),this.startTimeout(),this.pool.on("connect",function(){var e=s(o().mark((function e(r){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:u("pool connected"),J(t)(r,(function(t,e){t&&e.release()})),n.startTimeout();case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),this.pool.on("error",function(){var t=s(o().mark((function t(e){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:u("pool failed",e);case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())}return t.prototype.startTimeout=function(){var t=this;this.timer&&clearTimeout(this.timer),this.timer=setTimeout(s(o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.pool.end();case 2:_.publish(x.EvictPool,t.id);case 3:case"end":return e.stop()}}),e)}))),this.config.db.idleTimeoutMillis)},t}();function J(t){var e=v(t,"[afterCreate]"),n=e.warn,r=e.info;return function(e,o){if(e.on("error",(function(t){n("Connection was terminated by server",t),o(t,e)})),t.tenantId){var a=["SET nile.tenant_id = '"+t.tenantId+"'"];t.userId&&(t.tenantId||n("A user id cannot be set in context without a tenant id"),a.push("SET nile.user_id = '"+t.userId+"'")),e.query(a.join(";"),(function(n){t.tenantId&&r("[tenant id]",t.tenantId),t.userId&&r("[user id]",t.userId),o(n,e)}))}o(null,e)}}var z=function(){function t(t){var e=this;this.connections=void 0;var n=v(t,"[DBManager]").info;this.connections=new Map;var r,o=this.makeId();n("constructor",o),this.connections.set(o,new G(new N(t),o)),r=function(t){t&&e.connections.has(t)&&e.connections.delete(t)},_.subscribe(x.EvictPool,r)}var e=t.prototype;return e.makeId=function(t,e){return t&&e?t+":"+e:t?""+t:"base"},e.getConnection=function(t){var e=v(t,"[DBManager]").info,n=this.makeId(t.tenantId,t.userId),r=this.connections.get(n);if(e("# of instances:",this.connections.size),r)return e("returning existing",n),r.pool;var o=new G(new N(t),n);return this.connections.set(n,o),e("created new",n),e("# of instances:",this.connections.size),o.pool},t}(),F=function(t){return Buffer.from(JSON.stringify(t),"base64").toString()},Y=function(t){return{auth:new H(t),users:new q(t),tenants:new K(t)}};exports.default=function(){function t(t){var e=this;this.config=void 0,this.api=void 0,this.manager=void 0,this.servers=void 0,this.config=new N(t),this.servers=new Map,this.api=Y(this.config),this.manager=new z(this.config),_.subscribe(x.Tenant,(function(t){e.tenantId=t})),_.subscribe(x.User,(function(t){e.userId=t})),_.subscribe(x.Token,(function(t){e.token=t}))}var e=t.prototype;return e.setConfig=function(t){this.config=new N(t)},e.init=function(){var t=s(o().mark((function t(e){var n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.config.configure(f({},this.config,e));case 2:this.setConfig(n=t.sent),this.manager=new z(this.config),this.api=Y(n);case 6:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getInstance=function(e){var n=f({},this.config,e),r=function(t){var e=new N(t);return F(e)}(n);if(r===F(this.config))return this;var o=this.servers.get(r);if(o){var a=new N(n);return o.setConfig(a),o.tenantId=a.tenantId,o.userId=a.userId,o.token=a.api.token,o.databaseId=a.databaseId,o}return this.servers.set(r,new t(n)),this.servers.get(r)},c(t,[{key:"databaseId",set:function(t){t&&(this.config.databaseId=t,this.api.auth.databaseId=t,this.api.users.databaseId=t,this.api.tenants.databaseId=t)}},{key:"userId",get:function(){return this.config.userId},set:function(t){this.databaseId=this.config.databaseId,this.config.userId=t,this.api&&(this.api.auth.userId=this.config.userId,this.api.users.userId=this.config.userId,this.api.tenants.userId=this.config.userId)}},{key:"tenantId",get:function(){return this.config.tenantId},set:function(t){this.databaseId=this.config.databaseId,this.config.tenantId=t,this.api&&(this.api.auth.tenantId=t,this.api.users.tenantId=t,this.api.tenants.tenantId=t)}},{key:"token",get:function(){var t;return null==(t=this.config)||null==(t=t.api)?void 0:t.token},set:function(t){t&&(this.config.api.token=t,this.api&&(this.api.auth.api.token=t,this.api.users.api.token=t,this.api.tenants.api.token=t))}},{key:"db",get:function(){return this.manager.getConnection(this.config)}}])}();
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("dotenv/config");var t=require("lodash/isEmpty"),e=require("lodash/isObject"),n=require("jose"),r=require("pg");function o(){o=function(){return e};var t,e={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(t,e,n){t[e]=n.value},i="function"==typeof Symbol?Symbol:{},s=i.iterator||"@@iterator",u=i.asyncIterator||"@@asyncIterator",c=i.toStringTag||"@@toStringTag";function f(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{f({},"")}catch(t){f=function(t,e,n){return t[e]=n}}function p(t,e,n,r){var o=Object.create((e&&e.prototype instanceof y?e:y).prototype),i=new T(r||[]);return a(o,"_invoke",{value:_(t,n,i)}),o}function l(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}e.wrap=p;var d="suspendedStart",h="suspendedYield",v="executing",b="completed",g={};function y(){}function w(){}function I(){}var m={};f(m,s,(function(){return this}));var k=Object.getPrototypeOf,x=k&&k(k(R([])));x&&x!==n&&r.call(x,s)&&(m=x);var E=I.prototype=y.prototype=Object.create(m);function N(t){["next","throw","return"].forEach((function(e){f(t,e,(function(t){return this._invoke(e,t)}))}))}function U(t,e){function n(o,a,i,s){var u=l(t[o],t,a);if("throw"!==u.type){var c=u.arg,f=c.value;return f&&"object"==typeof f&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){n("next",t,i,s)}),(function(t){n("throw",t,i,s)})):e.resolve(f).then((function(t){c.value=t,i(c)}),(function(t){return n("throw",t,i,s)}))}s(u.arg)}var o;a(this,"_invoke",{value:function(t,r){function a(){return new e((function(e,o){n(t,r,e,o)}))}return o=o?o.then(a,a):a()}})}function _(e,n,r){var o=d;return function(a,i){if(o===v)throw Error("Generator is already running");if(o===b){if("throw"===a)throw i;return{value:t,done:!0}}for(r.method=a,r.arg=i;;){var s=r.delegate;if(s){var u=L(s,r);if(u){if(u===g)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(o===d)throw o=b,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=v;var c=l(e,n,r);if("normal"===c.type){if(o=r.done?b:h,c.arg===g)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(o=b,r.method="throw",r.arg=c.arg)}}}function L(e,n){var r=n.method,o=e.iterator[r];if(o===t)return n.delegate=null,"throw"===r&&e.iterator.return&&(n.method="return",n.arg=t,L(e,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var a=l(o,e.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,g;var i=a.arg;return i?i.done?(n[e.resultName]=i.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,g):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function R(e){if(e||""===e){var n=e[s];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,a=function n(){for(;++o<e.length;)if(r.call(e,o))return n.value=e[o],n.done=!1,n;return n.value=t,n.done=!0,n};return a.next=a}}throw new TypeError(typeof e+" is not iterable")}return w.prototype=I,a(E,"constructor",{value:I,configurable:!0}),a(I,"constructor",{value:w,configurable:!0}),w.displayName=f(I,c,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===w||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,I):(t.__proto__=I,f(t,c,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},N(U.prototype),f(U.prototype,u,(function(){return this})),e.AsyncIterator=U,e.async=function(t,n,r,o,a){void 0===a&&(a=Promise);var i=new U(p(t,n,r,o),a);return e.isGeneratorFunction(n)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},N(E),f(E,c,"Generator"),f(E,s,(function(){return this})),f(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),n=[];for(var r in e)n.push(r);return n.reverse(),function t(){for(;n.length;){var r=n.pop();if(r in e)return t.value=r,t.done=!1,t}return t.done=!0,t}},e.values=R,T.prototype={constructor:T,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(O),!e)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var n=this;function o(r,o){return s.type="throw",s.arg=e,n.next=r,o&&(n.method="next",n.arg=t),!!o}for(var a=this.tryEntries.length-1;a>=0;--a){var i=this.tryEntries[a],s=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return o(i.catchLoc,!0);if(this.prev<i.finallyLoc)return o(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return o(i.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return o(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var a=o;break}}a&&("break"===t||"continue"===t)&&a.tryLoc<=e&&e<=a.finallyLoc&&(a=null);var i=a?a.completion:{};return i.type=t,i.arg=e,a?(this.method="next",this.next=a.finallyLoc,g):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),g},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),O(n),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:R(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}function a(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof e?e:e+""}function i(t,e,n,r,o,a,i){try{var s=t[a](i),u=s.value}catch(t){return void n(t)}s.done?e(u):Promise.resolve(u).then(r,o)}function s(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function s(t){i(a,r,o,s,u,"next",t)}function u(t){i(a,r,o,s,u,"throw",t)}s(void 0)}))}}function u(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,a(r.key),r)}}function c(t,e,n){return e&&u(t.prototype,e),n&&u(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function f(){return f=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},f.apply(this,arguments)}function p(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,l(t,e)}function l(t,e){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},l(t,e)}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function h(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return d(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[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.")}function v(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return{info:function(){if(null!=t&&t.debug){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];(e=console).info.apply(e,["[niledb]"].concat(n,o))}},warn:function(){for(var t,e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];(t=console).warn.apply(t,["[niledb]"].concat(n,r))},error:function(){if(null!=t&&t.debug){for(var e,r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];(e=console).error.apply(e,["[niledb]","[ERROR]"].concat(n,o))}}}}var b=function(t){var e=t.config,n=t.logger,r=v(e,"[username]").info;return null!=e&&e.user?(n&&r(n,"config",e.user),String(null==e?void 0:e.user)):(n&&r(n,".env",process.env.NILEDB_USER),process.env.NILEDB_USER)},g=function(t){var e=t.config;return v(e,"[password]"),null!=e&&e.password?String(e.password):process.env.NILEDB_PASSWORD},y=function(t){var e,n,r,o=t.config,a=t.logger,i=v(o,"[token]").info;return null!=o&&null!=(e=o.api)&&e.token?(a&&i(a,"config",null==(n=o.api)?void 0:n.token),String(null==(r=o.api)?void 0:r.token)):process.env.NILEDB_TOKEN?(a&&i(a,".env",process.env.NILEDB_TOKEN),process.env.NILEDB_TOKEN):void 0},w=function(t){var e=t.config,n=t.logger,r=v(e,"[databaseName]"),o=r.warn,a=r.info;return null!=e&&e.databaseName?(n&&a(n,"config",e.databaseName),String(e.databaseName)):process.env.NILEDB_NAME?(n&&a(n,"config",process.env.NILEDB_NAME),process.env.NILEDB_NAME):(o(n,"config","No database has been set. Set NILEDB_NAME in .env or call `nile.init()`"),null)},I=function(t){var e,n,r=t.config,o=t.logger,a=v(r,"[basePath]").info,i=null==r||null==(e=r.api)?void 0:e.basePath;return i?(o&&a(o,"config",null==r||null==(n=r.api)?void 0:n.basePath),i):process.env.NILEDB_API?(o&&a(o,".env",process.env.NILEDB_API),"https://"+process.env.NILEDB_API):(o&&a(o,"default",process.env.NILEDB_API),"https://api.thenile.dev")};function m(t){var e=t.config,n=t.logger,r=v(e,"[db.host]").info;return null!=e&&e.db&&e.db.host?(n&&r(n,"config",null==e?void 0:e.db.host),e.db.host):process.env.NILEDB_HOST?(n&&r(n,".env",process.env.NILEDB_HOST),process.env.NILEDB_HOST):(n&&r(n,"default","db.thenile.dev"),"db.thenile.dev")}function k(t){var e,n,r=t.config,o=t.logger,a=v(r,"[db.port]").info;return null!=r&&null!=(e=r.db)&&e.port&&null!=r.db.port?(o&&a(o,"config",null==r?void 0:r.db.port),Number(null==(n=r.db)?void 0:n.port)):process.env.NILEDB_PORT?(o&&a(o,"config",process.env.NILEDB_PORT),Number(process.env.NILEDB_PORT)):(o&&a(o,"default",5432),5432)}var x,E=function(){return c((function(t){var e=t.basePath,n=t.cookieKey,r=t.token;this.cookieKey=void 0,this.basePath=void 0,this._token=void 0,this.basePath=e,this.cookieKey=n,this._token=r}),[{key:"token",get:function(){return this._token},set:function(t){this._token=t}}])}(),N=function(){return c((function(t){var e,n,r=this;this.user=void 0,this.password=void 0,this.databaseId=void 0,this.databaseName=void 0,this.debug=void 0,this.db=void 0,this.api=void 0,this._tenantId=void 0,this._userId=void 0,this.configure=function(){var t=s(o().mark((function t(e){var n,a,i,s,u,c,p,l,d,h,x,N,U,_,L,P,O,T,R,j,S,D;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=v(e,"[init]"),s=i.info,u=i.error,p=I(c={config:e}),l=m(c),d=k(c),h=w({config:e,logger:"getInfo"}),x=new URL(p+"/databases/configure"),h&&x.searchParams.set("databaseName",h),s(x.href),t.next=11,fetch(x,{headers:{Authorization:"Bearer "+(o={config:e},b(o)+":"+g(o))}});case 11:return _=(N=t.sent).clone(),t.prev=13,t.next=16,N.json();case 16:L=t.sent,404===N.status&&s("is the configured databaseName correct?"),U=L.status&&"READY"!==L.status?{message:"Database is not ready yet"}:L,t.next=28;break;case 21:return t.prev=21,t.t0=t.catch(13),t.next=25,_.text();case 25:u(P=t.sent),U={message:P};case 28:if(l&&r.databaseName&&r.databaseId){t.next=39;break}if(s("[fetched database]",U),!("message"in U)){t.next=38;break}if(!("statusCode"in U)){t.next=37;break}throw u(U),new Error("HTTP error has occured");case 37:throw new Error("Unable to auto-configure. Please set or remove NILEDB_API, NILEDB_NAME, and NILEDB_HOST in your .env file.");case 38:"object"==typeof U&&(T=(O=U).apiHost,R=O.dbHost,j=O.name,r.databaseId=O.id,r.databaseName=j,S=new URL(R),D=new URL(T),l=S.host,p=D.origin);case 39:return r.api=new E({basePath:p,cookieKey:null!=(n=null==e||null==(a=e.api)?void 0:a.cookieKey)?n:"token",token:y({config:e})}),r.db=f({user:r.user,password:r.password,host:l,port:d,database:r.databaseName},"object"==typeof(null==e?void 0:e.db)?e.db:{}),s("[config set]",r),t.abrupt("return",r);case 43:case"end":return t.stop()}var o}),t,null,[[13,21]])})));return function(e){return t.apply(this,arguments)}}();var a,i,u,c,p={config:t};this.databaseId=(u=(a=p).logger,c=v(i=a.config,"[databaseId]").info,null!=i&&i.databaseId?(u&&c(u,"config",i.databaseId),String(null==i?void 0:i.databaseId)):(u&&c(u,"env",process.env.NILEDB_ID),process.env.NILEDB_ID)),this.user=b(p),this.password=g(p),this.databaseName=w(p),this._tenantId=function(t){var e=t.config,n=t.logger,r=v(e,"[tenantId]").info;return null!=e&&e.tenantId?(n&&r(n,"config",e.tenantId),e.tenantId):process.env.NILEDB_TENANT?(n&&r(n,".env",process.env.NILEDB_TENANT),process.env.NILEDB_TENANT):null}(p),this.debug=Boolean(null==t?void 0:t.debug),this._userId=null==t?void 0:t.userId;var l=I(p),d=m(p),h=k(p);this.api=new E({basePath:l,cookieKey:null!=(e=null==t||null==(n=t.api)?void 0:n.cookieKey)?e:"token",token:y({config:t})}),this.db=f({user:this.user,password:this.password,host:d,port:h,database:this.databaseName},"object"==typeof(null==t?void 0:t.db)?t.db:{})}),[{key:"tenantId",get:function(){return this._tenantId},set:function(t){this._tenantId=t}},{key:"userId",get:function(){return this._userId},set:function(t){this._userId=t}}])}(),U=function(t,e){this.response=void 0,this.response=new Response(t,e)};!function(t){t.User="userId",t.Tenant="tenantId",t.Token="token",t.EvictPool="EvictPool"}(x||(x={}));var _=new(function(){function t(){this.events=void 0,this.events={}}var e=t.prototype;return e.publish=function(t,e){var n=this.events[t];if(n)for(var r,o=h(n);!(r=o()).done;)(0,r.value)(e)},e.subscribe=function(t,e){this.events[t]||(this.events[t]=[]),this.events[t].push(e)},t}()),L=function(t){_.publish(x.Tenant,t)},P=function(t){_.publish(x.User,t)},O=function(t){_.publish(x.Token,t)},T="x-nile-tenantId",R="x-nile-userId";function j(t,e){var n,r=null==(n=t.get("cookie"))?void 0:n.split("; "),o={};if(r)for(var a,i=h(r);!(a=i()).done;){var s=a.value.split("="),u=s.slice(1).join("=");o[s[0]]=u}if(r)for(var c,f=h(r);!(c=f()).done;){var p=c.value.split("="),l=p.slice(1).join("=");o[p[0]]=l}return e?o[e]:null}function S(t,e){var n,r=j(t,"tenantId");return null!=(n=null!=r?r:null==t?void 0:t.get(T))?n:e.tenantId}function D(t,e){var r,o=j(t,e.api.cookieKey);return o?n.decodeJwt(o).sub:null!=(r=null==t?void 0:t.get(R))?r:e.userId}function B(t,e,n){return A.apply(this,arguments)}function A(){return(A=s(o().mark((function t(e,n,r){var a,i,s,u,c,p,l,d,h,b,g,w,I,m,k,x,E,N,_,O;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(u=v(e,"[server]"),c=u.info,p=u.error,l=""+(null==(a=e.api)?void 0:a.basePath)+n,d=null==(i=e.api)?void 0:i.cookieKey,h=new Headers(null==r?void 0:r.headers),(b=new Headers).set("content-type","application/json; charset=utf-8"),h.get("Authorization")||((g=j(h,d))?b.set("Authorization","Bearer "+g):y({config:e})&&b.set("Authorization","Bearer "+y({config:e}))),w=S(h,e),L(w),I=D(h,e),P(I),!l.includes("{tenantId}")||w){t.next=14;break}return t.abrupt("return",new U("tenantId is not set for request",{status:400}));case 14:return m=l.replace("{tenantId}",encodeURIComponent(String(w))).replace("{userId}",encodeURIComponent(String(I))),c("[fetch]",m),t.next=18,fetch(m,f({},r,{headers:b})).catch((function(t){p("[fetch]","[response]",t)}));case 18:if(!((k=t.sent)&&k.status>=200&&k.status<300)){t.next=27;break}if("function"!=typeof k.clone){t.next=26;break}return t.t0=c,t.next=24,k.clone().json();case 24:t.t1=t.sent,(0,t.t0)("[fetch]","[response]",t.t1);case 26:return t.abrupt("return",k);case 27:return E="function"==typeof(null==k?void 0:k.clone)?k.clone():null,N="",t.prev=29,t.next=32,null==k?void 0:k.json();case 32:x=t.sent,t.next=43;break;case 35:if(t.prev=35,t.t2=t.catch(29),!E){t.next=42;break}return t.next=40,E.text();case 40:(N=t.sent)&&p("[fetch]","[response]","[status: "+E.status+"]",N);case 42:N||p("[fetch]","[response]",t.t2);case 43:if(!N){t.next=45;break}return t.abrupt("return",new U(N,{status:null==E?void 0:E.status}));case 45:if(!x||!("message"in x)){t.next=49;break}return p("[fetch]","[response]","[status: "+(null==E?void 0:E.status)+"]",_=x.message),t.abrupt("return",new U(_,{status:400}));case 49:if(!x||!("errors"in x)){t.next=53;break}return p("[fetch]","[response]","[status: "+(null==E?void 0:E.status)+"]",O=x.errors[0]),t.abrupt("return",new U(O,{status:400}));case 53:return p("[fetch]","[response]","[status: "+(null==E?void 0:E.status)+"]","UNHANDLED ERROR"),t.abrupt("return",new U(null,{status:null!=(s=null==k?void 0:k.status)?s:500}));case 55:case"end":return t.stop()}}),t,null,[[29,35]])})))).apply(this,arguments)}var C=function(n){function r(t){var e;return(e=n.call(this,t)||this).post=function(){var t=s(o().mark((function t(n,r,a){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request("POST",r,n,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),e.get=function(){var t=s(o().mark((function t(n,r,a){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request("GET",r,n,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),e.put=function(){var t=s(o().mark((function t(n,r,a){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request("PUT",r,n,a);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),e}p(r,n);var a=r.prototype;return a.rawRequest=function(){var t=s(o().mark((function t(e,n,r,a){var i,s;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=f({},r,{body:a,method:e}),t.next=3,B(this,n,i);case 3:if(!((s=t.sent)instanceof U)){t.next=6;break}return t.abrupt("return",s.response);case 6:return t.abrupt("return",s);case 7:case"end":return t.stop()}}),t,this)})));return function(e,n,r,o){return t.apply(this,arguments)}}(),a.request=function(){var n=s(o().mark((function n(r,a,i,s){var u,c,p,l,d,h,v,b;return o().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(u=new Headers(s?null==s?void 0:s.headers:{}),i instanceof Headers?(c=i.get(T),p=i.get("cookie"),c&&u.set(T,c),p&&u.set("cookie",p)):i instanceof Request&&(l=new Headers(null==i?void 0:i.headers),d=l.get(T),h=l.get("cookie"),d&&u.set(T,d),h&&u.set("cookie",h)),v=JSON.stringify(i),"GET"!==r){n.next=7;break}v=void 0,n.next=14;break;case 7:if(!(i instanceof Request)){n.next=13;break}return n.next=10,new Response(i.body).text();case 10:v=n.sent,n.next=14;break;case 13:(i instanceof Headers||t(i)||e(i)&&0===Object.values(i).length)&&(v=void 0);case 14:return b=f({},s,{headers:u}),n.next=17,this.rawRequest(r,a,b,v);case 17:return n.abrupt("return",n.sent);case 18:case"end":return n.stop()}}),n,this)})));return function(t,e,r,o){return n.apply(this,arguments)}}(),r}(N),H=function(t){function e(e){var n;return(n=t.call(this,e)||this).login=function(){var t=s(o().mark((function t(e,r){var a,i,s,u,c,f,p,l,d,h,v;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=new Headers({"content-type":"application/json"}),i=new C(n),"true"!==(e instanceof Request?new URL(e.url).searchParams:new URLSearchParams).get("sso")){t.next=18;break}return t.next=7,n.listProviders(e.clone(),r);case 7:if(!((s=t.sent)&&s.status>=200&&s.status<300)){t.next=18;break}return t.next=11,new Response(s.body).json();case 11:if(!((u=t.sent).length>0)){t.next=18;break}if(!(u.length>1)){t.next=15;break}return t.abrupt("return",new Response(JSON.stringify(u),{status:200}));case 15:return a.set(T,u[0].tenantId),a.append("set-cookie","tenantId="+u[0].tenantId+"; path=/; httponly;"),t.abrupt("return",new Response(JSON.stringify({redirectURI:""+n.api.basePath+n.loginSSOUrl("okta")}),{status:200}));case 18:return t.next=20,i.post(e,n.loginUrl,r).catch((function(t){return console.error(t),t}));case 20:if(!((c=t.sent)instanceof U)){t.next=23;break}return t.abrupt("return",c.response);case 23:if(!(c&&c.status>=200&&c.status<300)){t.next=36;break}return t.next=26,c.json();case 26:return l=(null==(f=n.api)?void 0:f.cookieKey)+"="+(p=t.sent).token.jwt+"; path=/; samesite=lax; httponly;",a.append("set-cookie",l),h=null==(d=p.tenants)?void 0:d.values(),v=null==h?void 0:h.next().value,a.set(T,v),a.append("set-cookie","tenantId="+v+"; path=/; httponly;"),O(p.token.jwt),t.abrupt("return",new Response(JSON.stringify(p),{status:200,headers:a}));case 36:return t.next=38,c.text();case 38:return t.abrupt("return",new Response(t.sent,{status:c.status}));case 40:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.loginSSO=function(t){var e=function(){var e=s(o().mark((function e(r){var a,i,s,u,c,f;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=new Headers,e.next=3,r.formData();case 3:return s=e.sent,e.next=6,s.get("access_token");case 6:return u=e.sent,e.next=9,s.get("tenantId");case 9:return c=e.sent,f=(null==(a=n.api)?void 0:a.cookieKey)+"="+u+"; path=/; samesite=lax; httponly;",O(u),i.append("set-cookie",f),i.set(T,c),i.append("set-cookie","tenantId="+c+"; path=/; httponly;"),i.set("Location",t),e.abrupt("return",new Response(null,{headers:i,status:303}));case 17:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}();return e},n.loginSSOUrl=function(t){var e;return"/databases/"+encodeURIComponent(n.databaseId)+"/tenants/"+(null!=(e=n.tenantId)?e:"{tenantId}")+"/auth/oidc/providers/"+t+"/login"},n.signUp=function(){var t=s(o().mark((function t(e,r){var a,i,s,u,c,f,p,l,d;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new Headers,i=new C(n),t.next=4,i.post(e,n.signUpUrl,r).catch((function(t){return console.error(t),t}));case 4:if(!((s=t.sent)instanceof U)){t.next=7;break}return t.abrupt("return",s.response);case 7:if(!(s&&s.status>=200&&s.status<300)){t.next=19;break}return t.next=10,s.json();case 10:return l=(null==(u=n.api)?void 0:u.cookieKey)+"="+(null==(c=(p=t.sent).token)?void 0:c.jwt)+"; path=/; samesite=lax; httponly;",a.append("set-cookie",l),d=p.id,O(null==(f=p.token)?void 0:f.jwt),P(d),a.set(R,d),a.append("set-cookie","userId="+d+"; path=/; httponly;"),t.abrupt("return",new Response(JSON.stringify(p),{status:201,headers:a}));case 19:return t.next=21,s.text();case 21:return t.abrupt("return",new Response(t.sent,{status:s.status}));case 23:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.listTenantProviders=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.get(e,n.listTenantProvidersUrl,r));case 2:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.createProvider=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.post(e,n.updateProviderUrl("okta"),r));case 3:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.updateProvider=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.put(e,n.updateProviderUrl("okta"),r));case 3:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.listProviders=function(){var t=s(o().mark((function t(e,r){var a,i,s;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=new C(n),!e||!("body"in e)){t.next=5;break}return t.next=4,new Response(e.body).json();case 4:s=t.sent;case 5:return t.abrupt("return",i.get(e,n.providerUrl(null==(a=s)?void 0:a.email),r));case 6:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.getSSOCallbackUrl=function(t){var e;return"string"==typeof e?e=t:t instanceof Headers&&(e=S(t,n)),"/databases/"+n.databaseId+"/tenants/"+e+"/auth/oidc/callback"},n}p(e,t);var n=e.prototype;return n.updateProviderUrl=function(t){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/"+(this.tenantId?encodeURIComponent(this.tenantId):"{tenantId}")+"/auth/oidc/providers/"+encodeURIComponent(t)},n.providerUrl=function(t){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/auth/oidc/providers"+(t?"?email="+encodeURIComponent(t):"")},c(e,[{key:"loginUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/users/login"}},{key:"signUpUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/users"}},{key:"listTenantProvidersUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/"+(this.tenantId?encodeURIComponent(this.tenantId):"{tenantId}")+"/auth/oidc/providers"}}])}(N),q=function(t){function e(e){var n;return(n=t.call(this,e)||this).createTenantUser=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.post(e,n.tenantUsersUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.listUsers=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.get(e,n.usersUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.updateUser=function(){var t=s(o().mark((function t(e,r,a){var i;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return i=new C(n),t.next=3,i.put(r,n.usersUrl+"/"+e,a);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n,r){return t.apply(this,arguments)}}(),n.listTenantUsers=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.get(e,n.tenantUsersUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.me=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.next=3,a.get(e,n.meUrl,r);case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n}return p(e,t),c(e,[{key:"baseUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)}},{key:"usersUrl",get:function(){return this.baseUrl+"/users"}},{key:"tenantUsersUrl",get:function(){var t;return this.baseUrl+"/tenants/"+(null!=(t=this.tenantId)?t:"{tenantId}")+"/users"}},{key:"meUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/users/me"}}])}(N),K=function(t){function e(e){var n;return(n=t.call(this,e)||this).createTenant=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.post(e,n.tenantsUrl,r));case 2:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n.getTenant=function(){var t=s(o().mark((function t(e,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=new C(n),t.abrupt("return",a.get(e,n.tenantUrl,r));case 2:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}(),n}return p(e,t),c(e,[{key:"tenantsUrl",get:function(){return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants"}},{key:"tenantUrl",get:function(){var t;return"/databases/"+encodeURIComponent(this.databaseId)+"/tenants/"+(null!=(t=this.tenantId)?t:"{tenantId}")}}])}(N),M=["afterCreate"],G=function(){function t(t,e){var n=this;this.pool=void 0,this.tenantId=void 0,this.userId=void 0,this.id=void 0,this.config=void 0,this.timer=void 0;var a=v(t,"[NileInstance]"),i=a.warn,u=a.info;this.id=e;var c=f({min:0,max:10,idleTimeoutMillis:3e4},t.db),p=c.afterCreate,l=function(t,e){if(null==t)return{};var n,r,o={},a=Object.keys(t);for(r=0;r<a.length;r++)e.indexOf(n=a[r])>=0||(o[n]=t[n]);return o}(c,M);t.db=c,this.config=t,u(this.config),this.pool=new r.Pool(l),"function"==typeof p&&i("Providing an pool configuration will stop automatic tenant context setting."),this.startTimeout(),this.pool.on("connect",function(){var e=s(o().mark((function e(r){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:u("pool connected"),J(t)(r,(function(t,e){t&&e.release()})),n.startTimeout();case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),this.pool.on("error",function(){var t=s(o().mark((function t(e){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:u("pool failed",e);case 1:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}())}return t.prototype.startTimeout=function(){var t=this;this.timer&&clearTimeout(this.timer),this.timer=setTimeout(s(o().mark((function e(){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.pool.end();case 2:_.publish(x.EvictPool,t.id);case 3:case"end":return e.stop()}}),e)}))),this.config.db.idleTimeoutMillis)},t}();function J(t){var e=v(t,"[afterCreate]"),n=e.warn,r=e.info;return function(e,o){if(e.on("error",(function(t){n("Connection was terminated by server",t),o(t,e)})),t.tenantId){var a=["SET nile.tenant_id = '"+t.tenantId+"'"];t.userId&&(t.tenantId||n("A user id cannot be set in context without a tenant id"),a.push("SET nile.user_id = '"+t.userId+"'")),e.query(a.join(";"),(function(n){t.tenantId&&r("[tenant id]",t.tenantId),t.userId&&r("[user id]",t.userId),o(n,e)}))}o(null,e)}}var z=function(){function t(t){var e=this;this.connections=void 0;var n=v(t,"[DBManager]").info;this.connections=new Map;var r,o=this.makeId();n("constructor",o),this.connections.set(o,new G(new N(t),o)),r=function(t){t&&e.connections.has(t)&&e.connections.delete(t)},_.subscribe(x.EvictPool,r)}var e=t.prototype;return e.makeId=function(t,e){return t&&e?t+":"+e:t?""+t:"base"},e.getConnection=function(t){var e=v(t,"[DBManager]").info,n=this.makeId(t.tenantId,t.userId),r=this.connections.get(n);if(e("# of instances:",this.connections.size),r)return e("returning existing",n),r.pool;var o=new G(new N(t),n);return this.connections.set(n,o),e("created new",n),e("# of instances:",this.connections.size),o.pool},t}(),F=function(t){return Buffer.from(JSON.stringify(t),"base64").toString()},Y=function(t){return{auth:new H(t),users:new q(t),tenants:new K(t)}};exports.default=function(){function t(t){var e=this;this.config=void 0,this.api=void 0,this.manager=void 0,this.servers=void 0,this.config=new N(t),this.servers=new Map,this.api=Y(this.config),this.manager=new z(this.config),_.subscribe(x.Tenant,(function(t){e.tenantId=t})),_.subscribe(x.User,(function(t){e.userId=t})),_.subscribe(x.Token,(function(t){e.token=t}))}var e=t.prototype;return e.setConfig=function(t){this.config=new N(t)},e.init=function(){var t=s(o().mark((function t(e){var n;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.config.configure(f({},this.config,e));case 2:this.setConfig(n=t.sent),this.manager=new z(this.config),this.api=Y(n);case 6:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),e.getInstance=function(e){var n=f({},this.config,e),r=function(t){var e=new N(t);return F(e)}(n);if(r===F(this.config))return this;var o=this.servers.get(r);if(o){var a=new N(n);return o.setConfig(a),o.tenantId=a.tenantId,o.userId=a.userId,o.token=a.api.token,o.databaseId=a.databaseId,o}return this.servers.set(r,new t(n)),this.servers.get(r)},c(t,[{key:"databaseId",set:function(t){t&&(this.config.databaseId=t,this.api.auth.databaseId=t,this.api.users.databaseId=t,this.api.tenants.databaseId=t)}},{key:"userId",get:function(){return this.config.userId},set:function(t){this.databaseId=this.config.databaseId,this.config.userId=t,this.api&&(this.api.auth.userId=this.config.userId,this.api.users.userId=this.config.userId,this.api.tenants.userId=this.config.userId)}},{key:"tenantId",get:function(){return this.config.tenantId},set:function(t){this.databaseId=this.config.databaseId,this.config.tenantId=t,this.api&&(this.api.auth.tenantId=t,this.api.users.tenantId=t,this.api.tenants.tenantId=t)}},{key:"token",get:function(){var t;return null==(t=this.config)||null==(t=t.api)?void 0:t.token},set:function(t){t&&(this.config.api.token=t,this.api&&(this.api.auth.api.token=t,this.api.users.api.token=t,this.api.tenants.api.token=t))}},{key:"db",get:function(){return this.manager.getConnection(this.config)}}])}();
|
|
2
2
|
//# sourceMappingURL=server.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs.production.min.js","sources":["../src/utils/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Config/index.ts","../src/utils/Event/index.ts","../src/utils/ResponseError.ts","../src/utils/fetch.ts","../src/utils/Requester/index.ts","../src/auth/index.ts","../src/users/index.ts","../src/tenants/index.ts","../src/db/NileInstance.ts","../src/db/DBManager.ts","../src/utils/Server/index.ts","../src/Server.ts"],"sourcesContent":["import { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nexport default function Logger(\n config: void | Config | ServerConfig,\n ...params: unknown[]\n) {\n return {\n info(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.info('[niledb]', ...params, ...args);\n }\n },\n warn(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[niledb]', ...params, ...args);\n }\n },\n error(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.error('[niledb]', '[ERROR]', ...params, ...args);\n }\n },\n };\n}\n","import 'dotenv/config';\nimport { ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nexport type EnvConfig = {\n logger?: string;\n config?: ServerConfig;\n};\n\nexport const getDatbaseId = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[databaseId]');\n if (config?.databaseId) {\n logger && info(logger, 'config', config.databaseId);\n return String(config?.databaseId);\n }\n logger && info(logger, 'env', process.env.NILEDB_ID);\n return process.env.NILEDB_ID;\n};\nexport const getUsername = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[username]');\n if (config?.user) {\n logger && info(logger, 'config', config.user);\n return String(config?.user);\n }\n logger && info(logger, '.env', process.env.NILEDB_USER);\n return process.env.NILEDB_USER;\n};\n\nexport const getPassword = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const log = logProtector(logger);\n const { info } = Logger(config, '[password]');\n if (config?.password) {\n log && info(logger, 'config', config.password);\n\n return String(config.password);\n }\n\n log && info(logger, '.env', process.env.NILEDB_PASSWORD);\n return process.env.NILEDB_PASSWORD;\n};\n\nexport const getInfoBearer = (cfg: EnvConfig) => {\n return `${getUsername(cfg)}:${getPassword(cfg)}`;\n};\n\nexport const getToken = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[token]');\n if (config?.api?.token) {\n logger && info(logger, 'config', config.api?.token);\n return String(config.api?.token);\n }\n if (process.env.NILEDB_TOKEN) {\n logger && info(logger, '.env', process.env.NILEDB_TOKEN);\n return process.env.NILEDB_TOKEN;\n }\n return undefined;\n};\n\nexport const getDatabaseName = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[databaseName]');\n if (config?.databaseName) {\n logger && info(logger, 'config', config.databaseName);\n return String(config.databaseName);\n }\n if (process.env.NILEDB_NAME) {\n logger && info(logger, 'config', process.env.NILEDB_NAME);\n return process.env.NILEDB_NAME;\n }\n return null;\n};\n\nexport const getTenantId = (cfg: EnvConfig): string | null => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[tenantId]');\n if (config?.tenantId) {\n logger && info(logger, 'config', config.tenantId);\n return config.tenantId;\n }\n\n if (process.env.NILEDB_TENANT) {\n logger && info(logger, '.env', process.env.NILEDB_TENANT);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\nexport const getBasePath = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n if (basePath) {\n logger && info(logger, 'config', config?.api?.basePath);\n return basePath;\n }\n\n if (process.env.NILEDB_API) {\n logger && info(logger, '.env', process.env.NILEDB_API);\n return `https://${process.env.NILEDB_API}`;\n }\n\n logger && info(logger, 'default', process.env.NILEDB_API);\n return 'https://api.thenile.dev';\n};\n\nexport function getDbHost(cfg: EnvConfig) {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.host]');\n\n if (config?.db && config.db.host) {\n logger && info(logger, 'config', config?.db.host);\n return config.db.host;\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(logger, '.env', process.env.NILEDB_HOST);\n return process.env.NILEDB_HOST;\n }\n\n logger && info(logger, 'default', 'db.thenile.dev');\n return 'db.thenile.dev';\n}\n\nexport function getDbPort(cfg: EnvConfig): number {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.port]');\n if (config?.db?.port && config.db.port != null) {\n logger && info(logger, 'config', config?.db.port);\n return Number(config.db?.port);\n }\n\n if (process.env.NILEDB_PORT) {\n logger && info(logger, 'config', process.env.NILEDB_PORT);\n return Number(process.env.NILEDB_PORT);\n }\n logger && info(logger, 'default', 5432);\n return 5432;\n}\n\n// don't let people accidentally log secrets to production\nconst logProtector = (logger?: string) => {\n return process.env.NODE_ENV === 'development' ||\n process.env.NODE_ENV === 'test'\n ? logger\n : null;\n};\n","import { NilePoolConfig, ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getDatabaseName,\n getDatbaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n} from './envVars';\n\ntype Database = {\n name: string;\n apiHost: string;\n dbHost: string;\n id: string;\n message?: string; // is actually an error\n status: 'READY' | string;\n};\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this._token = token;\n }\n\n public get token(): string | undefined {\n return this._token;\n }\n\n public set token(value: string | undefined) {\n this._token = value;\n }\n}\n\nexport class Config {\n user: string;\n password: string;\n databaseId: string;\n databaseName: string;\n\n debug: boolean;\n\n db: NilePoolConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(config: ServerConfig) {\n const envVarConfig: EnvConfig = {\n config,\n };\n this.databaseId = getDatbaseId(envVarConfig) as string;\n this.user = getUsername(envVarConfig) as string;\n this.password = getPassword(envVarConfig) as string;\n this.databaseName = getDatabaseName(envVarConfig) as string;\n this._tenantId = getTenantId(envVarConfig);\n this.debug = Boolean(config?.debug);\n this._userId = config?.userId;\n\n const basePath = getBasePath(envVarConfig);\n const host = getDbHost(envVarConfig);\n const port = getDbPort(envVarConfig);\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host,\n port,\n database: this.databaseName,\n ...(typeof config?.db === 'object' ? config.db : {}),\n };\n }\n\n configure = async (config: ServerConfig): Promise<Config> => {\n const { info, error } = Logger(config, '[init]');\n const envVarConfig: EnvConfig = {\n config,\n };\n let basePath = getBasePath(envVarConfig);\n let host = getDbHost(envVarConfig);\n const port = getDbPort(envVarConfig);\n\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${basePath}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n info(url.href);\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${getInfoBearer({ config })}`,\n },\n });\n let database: Database;\n const possibleError = res.clone();\n try {\n const json: Database = await res.json();\n if (res.status === 404) {\n info('is the configured databaseName correct?');\n }\n if (json.status && json.status !== 'READY') {\n database = { message: 'Database is not ready yet' } as Database;\n } else {\n database = json;\n }\n } catch (e) {\n const message = await possibleError.text();\n error(message);\n database = { message } as Database;\n }\n if (!host || !this.databaseName || !this.databaseId) {\n info('[fetched database]', database);\n if (process.env.NODE_ENV !== 'TEST') {\n if ('message' in database) {\n if ('statusCode' in database) {\n error(database);\n throw new Error('HTTP error has occured');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please set or remove NILEDB_API, NILEDB_NAME, and NILEDB_HOST in your .env file.'\n );\n }\n }\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n this.databaseId = id;\n this.databaseName = name;\n // gotta do something dumb here\n const dburl = new URL(dbHost);\n const apiurl = new URL(apiHost);\n host = dburl.host;\n basePath = apiurl.origin;\n }\n }\n }\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host,\n port,\n database: this.databaseName,\n ...(typeof config?.db === 'object' ? config.db : {}),\n };\n info('[config set]', this);\n return this;\n };\n}\n","type BusValues = undefined | null | string;\ntype EventFn = (params: BusValues) => void;\nenum Events {\n User = 'userId',\n Tenant = 'tenantId',\n Token = 'token',\n EvictPool = 'EvictPool',\n}\nclass Eventer {\n events: { [key: string]: EventFn[] };\n constructor() {\n this.events = {};\n }\n publish(eventName: string, value: BusValues) {\n // Get all the callback functions of the current event\n const callbackList = this.events[eventName];\n\n // execute each callback function\n if (callbackList) {\n for (const callback of callbackList) {\n callback(value);\n }\n }\n }\n // Subscribe to events\n subscribe(eventName: string, callback: EventFn) {\n // initialize this event\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n\n // store the callback function of the subscriber\n this.events[eventName].push(callback);\n }\n}\n\n// tenantId manager\nconst eventer = new Eventer();\n\nexport const updateTenantId = (tenantId: BusValues) => {\n eventer.publish(Events.Tenant, tenantId);\n};\n\nexport const watchTenantId = (cb: EventFn) =>\n eventer.subscribe(Events.Tenant, cb);\n\nexport const updateUserId = (userId: BusValues) => {\n eventer.publish(Events.User, userId);\n};\n\nexport const watchUserId = (cb: EventFn) => eventer.subscribe(Events.User, cb);\n\nexport const updateToken = (val: BusValues) => {\n eventer.publish(Events.Token, val);\n};\n\nexport const watchToken = (cb: EventFn) => eventer.subscribe(Events.Token, cb);\n\nexport const watchEvictPool = (cb: EventFn) =>\n eventer.subscribe(Events.EvictPool, cb);\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","export class ResponseError {\n response: Response;\n constructor(body?: BodyInit | null, init?: ResponseInit) {\n this.response = new Response(body, init);\n }\n}\n","import { decodeJwt } from 'jose';\n\nimport { ResponseError } from './ResponseError';\nimport { Config } from './Config';\nimport { NileRequest } from './Requester';\nimport { updateTenantId, updateUserId } from './Event';\nimport { getToken } from './Config/envVars';\nimport Logger from './Logger';\n\nexport const X_NILE_TENANT = 'x-nile-tenantId';\nexport const X_NILE_USER_ID = 'x-nile-userId';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config: Config) {\n const cookieTenant = getTokenFromCookie(headers, 'tenantId');\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const { info, error } = Logger(config, '[server]');\n\n const url = `${config.api?.basePath}${path}`;\n const cookieKey = config.api?.cookieKey;\n const headers = new Headers(opts?.headers);\n const basicHeaders = new Headers();\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n basicHeaders.set('Authorization', `Bearer ${token}`);\n } else if (getToken({ config })) {\n basicHeaders.set('Authorization', `Bearer ${getToken({ config })}`);\n }\n }\n\n const tenantId = getTenantFromHttp(headers, config);\n updateTenantId(tenantId);\n const userId = getUserFromHttp(headers, config);\n updateUserId(userId);\n if (url.includes('{tenantId}') && !tenantId) {\n return new ResponseError('tenantId is not set for request', {\n status: 400,\n });\n }\n const useableUrl = url\n .replace('{tenantId}', encodeURIComponent(String(tenantId)))\n .replace('{userId}', encodeURIComponent(String(userId)));\n\n info('[fetch]', useableUrl);\n\n const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n error('[fetch]', '[response]', e);\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n if (typeof response.clone === 'function') {\n info('[fetch]', '[response]', await response.clone().json());\n }\n return response;\n }\n\n let res;\n const errorHandler =\n typeof response?.clone === 'function' ? response.clone() : null;\n let msg = '';\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n if (errorHandler) {\n msg = await errorHandler.text();\n if (msg) {\n error('[fetch]', '[response]', `[status: ${errorHandler.status}]`, msg);\n }\n }\n if (!msg) {\n error('[fetch]', '[response]', e);\n }\n }\n if (msg) {\n return new ResponseError(msg, { status: errorHandler?.status });\n }\n\n if (res && 'message' in res) {\n const { message } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n 'UNHANDLED ERROR'\n );\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\n\nimport { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three optios here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n isEmpty(req) ||\n (isObject(req) && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n post = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('POST', url, req, init);\n };\n\n get = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('GET', url, req, init);\n };\n\n put = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('PUT', url, req, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\nimport { ResponseError } from '../utils/ResponseError';\nimport {\n X_NILE_TENANT,\n X_NILE_USER_ID,\n getTenantFromHttp,\n} from '../utils/fetch';\nimport { updateToken, updateUserId } from '../utils/Event';\nimport { CreateBasicUserRequest, LoginUserResponse } from '../users';\n\nexport interface TenantSSORegistration {\n configUrl: string;\n clientId: string;\n clientSecret: string;\n redirectURI: string;\n emailDomains: Array<string>;\n enabled?: boolean;\n}\n\nexport interface SSOProvider {\n readonly id?: string;\n tenantId?: string;\n provider?: string;\n configUrl: string;\n clientSecret?: string;\n clientId: string;\n redirectURI: string;\n emailDomains?: Array<string>;\n enabled?: boolean;\n}\nexport default class Auth extends Config {\n constructor(config: Config) {\n super(config);\n }\n get loginUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/login`;\n }\n\n login = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers({ 'content-type': 'application/json' });\n const _requester = new Requester(this);\n\n const params =\n req instanceof Request\n ? new URL(req.url).searchParams\n : new URLSearchParams();\n\n const sso = params.get('sso');\n\n if (sso === 'true') {\n const providerRes = await this.listProviders(\n (req as Request).clone(),\n init\n );\n // if you have a provider, log them in\n if (\n providerRes &&\n providerRes.status >= 200 &&\n providerRes.status < 300\n ) {\n const providers = await new Response(providerRes.body).json();\n if (providers.length > 0) {\n if (providers.length > 1) {\n return new Response(JSON.stringify(providers), { status: 200 });\n // a user has to make a choice\n }\n\n // is there a way to do this? probably not.\n headers.set(X_NILE_TENANT, providers[0].tenantId);\n headers.append(\n 'set-cookie',\n `tenantId=${providers[0].tenantId}; path=/; httponly;`\n );\n // const ssoResp = await this.loginSSO(req);\n return new Response(\n JSON.stringify({\n redirectURI: `${this.api.basePath}${this.loginSSOUrl('okta')}`,\n }),\n { status: 200 }\n );\n // make it a client side redirect, because of the headers\n // if there is no provider, require a password.\n }\n }\n }\n\n const res = await _requester.post(req, this.loginUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { tenants } = token;\n const tenant = tenants?.values();\n const tenantId = tenant?.next().value;\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n updateToken(token.token.jwt);\n\n return new Response(JSON.stringify(token), { status: 200, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n loginSSO = (redirectUrl: string) => {\n const ssoLogin = async (\n req: NileRequest<unknown>\n ): NileResponse<Response> => {\n const headers = new Headers();\n const body = await (req as Request).formData();\n const accessToken = (await body.get('access_token')) as string;\n const tenantId = (await body.get('tenantId')) as string;\n const cookie = `${this.api?.cookieKey}=${accessToken}; path=/; samesite=lax; httponly;`;\n updateToken(accessToken);\n headers.append('set-cookie', cookie);\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n headers.set('Location', redirectUrl);\n return new Response(null, {\n headers,\n status: 303,\n });\n };\n return ssoLogin;\n };\n\n loginSSOUrl = (provider: string) => {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }/auth/oidc/providers/${provider}/login`;\n };\n\n get signUpUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users`;\n }\n\n signUp = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers();\n const _requester = new Requester(this);\n const res = await _requester.post(req, this.signUpUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token?.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { id } = token;\n updateToken(token.token?.jwt);\n updateUserId(id);\n headers.set(X_NILE_USER_ID, id);\n headers.append('set-cookie', `userId=${id}; path=/; httponly;`);\n return new Response(JSON.stringify(token), { status: 201, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n updateProviderUrl(providerName: string) {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers/${encodeURIComponent(providerName)}`;\n }\n\n get listTenantProvidersUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers`;\n }\n\n listTenantProviders = async (\n req: NileRequest<void | Headers>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.listTenantProvidersUrl, init);\n };\n\n createProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.post(req, this.updateProviderUrl(providerName), init);\n };\n\n updateProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.put(req, this.updateProviderUrl(providerName), init);\n };\n\n providerUrl(email?: undefined | string) {\n return `/databases/${encodeURIComponent(\n this.databaseId\n )}/tenants/auth/oidc/providers${\n email ? `?email=${encodeURIComponent(email)}` : ''\n }`;\n }\n\n listProviders = async (\n req: NileRequest<void | CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n let body: { email: string } | undefined;\n // this is a get. Get the email from the response body so the request is filtered.\n if (req && 'body' in req) {\n body = await new Response(req.body as BodyInit).json();\n }\n return _requester.get(req, this.providerUrl(body?.email), init);\n };\n\n getSSOCallbackUrl = (param: Headers | string) => {\n let tenantId;\n if (typeof tenantId === 'string') {\n tenantId = param;\n } else if (param instanceof Headers) {\n tenantId = getTenantFromHttp(param, this);\n }\n\n return `/databases/${this.databaseId}/tenants/${tenantId}/auth/oidc/callback`;\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface CreateBasicUserRequest {\n email: string;\n password: string;\n preferredName?: string;\n newTenant?: string;\n}\nexport const LoginUserResponseTokenTypeEnum = {\n AccessToken: 'ACCESS_TOKEN',\n RefreshToken: 'REFRESH_TOKEN',\n IdToken: 'ID_TOKEN',\n} as const;\nexport type LoginUserResponseTokenTypeEnum =\n (typeof LoginUserResponseTokenTypeEnum)[keyof typeof LoginUserResponseTokenTypeEnum];\n\nexport interface LoginUserResponseToken {\n jwt: string;\n maxAge: number;\n type: LoginUserResponseTokenTypeEnum;\n}\nexport interface LoginUserResponse {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n id: string;\n token: LoginUserResponseToken;\n}\nexport interface User {\n id?: string;\n tenants?: Set<string>;\n email?: string;\n preferredName?: string;\n}\n\nexport default class Users extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n get baseUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}`;\n }\n\n get usersUrl() {\n return `${this.baseUrl}/users`;\n }\n\n get tenantUsersUrl() {\n return `${this.baseUrl}/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n\n createTenantUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const _requester = new Requester(this);\n return await _requester.post(req, this.tenantUsersUrl, init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.usersUrl, init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<User>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, init);\n };\n\n listTenantUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.tenantUsersUrl, init);\n };\n\n get meUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/me`;\n }\n\n me = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.meUrl, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface Tenant {\n id: string;\n name?: string;\n}\n\nexport default class Tenants extends Config {\n constructor(config: Config) {\n super(config);\n }\n get tenantsUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants`;\n }\n get tenantUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.post(req, this.tenantsUrl, init);\n };\n\n getTenant = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.tenantUrl, init);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate } from '../types';\nimport Logger from '../utils/Logger';\n\nclass NileDatabase {\n pool: Pool;\n tenantId?: undefined | null | string;\n userId?: undefined | null | string;\n id: string;\n config: Config;\n timer: NodeJS.Timeout | undefined;\n\n constructor(config: Config, id: string) {\n const { warn, info } = Logger(config, '[NileInstance]');\n this.id = id;\n const poolConfig = {\n min: 0,\n max: 10,\n idleTimeoutMillis: 30000,\n ...config.db,\n };\n const { afterCreate, ...remaining } = poolConfig;\n\n config.db = poolConfig;\n this.config = config;\n info(this.config);\n\n this.pool = new Pool(remaining);\n\n if (typeof afterCreate === 'function') {\n warn(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.pool.on('connect', async (client) => {\n info('pool connected');\n const afterCreate: AfterCreate = makeAfterCreate(config);\n afterCreate(client, (err, _client) => {\n if (err) {\n _client.release();\n }\n });\n this.startTimeout();\n });\n this.pool.on('error', async (e) => {\n info('pool failed', e);\n });\n }\n\n startTimeout() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n await this.pool.end();\n evictPool(this.id);\n }, this.config.db.idleTimeoutMillis);\n }\n}\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config): AfterCreate {\n const { warn, info } = Logger(config, '[afterCreate]');\n return (conn, done) => {\n conn.on('error', function errorHandler(error: Error) {\n warn('Connection was terminated by server', error);\n done(error, conn);\n });\n\n if (config.tenantId) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (config.userId) {\n if (!config.tenantId) {\n warn('A user id cannot be set in context without a tenant id');\n }\n query.push(`SET nile.user_id = '${config.userId}'`);\n }\n\n // in this example we use pg driver's connection API\n conn.query(query.join(';'), function (err: Error) {\n if (config.tenantId) {\n info('[tenant id]', config.tenantId);\n }\n if (config.userId) {\n info('[user id]', config.userId);\n }\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\nimport { ServerConfig } from '../types';\n\nimport NileDatabase from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: ServerConfig) {\n const { info } = Logger(config, '[DBManager]');\n this.connections = new Map();\n // add the base one, so you can at least query\n const id = this.makeId();\n info('constructor', id);\n this.connections.set(id, new NileDatabase(new Config(config), id));\n watchEvictPool((id) => {\n if (id && this.connections.has(id)) {\n this.connections.delete(id);\n }\n });\n }\n\n getConnection(config: ServerConfig): Pool {\n const { info } = Logger(config, '[DBManager]');\n const id = this.makeId(config.tenantId, config.userId);\n const existing = this.connections.get(id);\n info('# of instances:', this.connections.size);\n if (existing) {\n info('returning existing', id);\n return existing.pool;\n }\n const newOne = new NileDatabase(new Config(config), id);\n this.connections.set(id, newOne);\n info('created new', id);\n info('# of instances:', this.connections.size);\n return newOne.pool;\n }\n}\n","import { ServerConfig } from '../../types';\nimport { Config } from '../Config';\n\nexport const getServerId = (config: ServerConfig) => {\n const cfg = new Config(config);\n return makeServerId(cfg);\n};\nexport const makeServerId = (config: Config) => {\n return Buffer.from(JSON.stringify(config), 'base64').toString();\n};\n","import { Pool } from 'pg';\n\nimport { ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport Auth from './auth';\nimport Users from './users';\nimport Tenants from './tenants';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { getServerId, makeServerId } from './utils/Server';\n\ntype Api = {\n auth: Auth;\n users: Users;\n tenants: Tenants;\n};\n\nconst init = (config: Config): Api => {\n const auth = new Auth(config);\n const users = new Users(config);\n const tenants = new Tenants(config);\n return {\n auth,\n users,\n tenants,\n };\n};\n\nclass Server {\n config: Config;\n api: Api;\n private manager: DbManager;\n private servers: Map<string, Server>;\n\n constructor(config?: ServerConfig) {\n this.config = new Config(config as ServerConfig);\n this.servers = new Map();\n this.api = init(this.config);\n this.manager = new DbManager(this.config);\n\n watchTenantId((tenantId) => {\n this.tenantId = tenantId;\n });\n\n watchUserId((userId) => {\n this.userId = userId;\n });\n\n watchToken((token) => {\n this.token = token;\n });\n }\n\n setConfig(cfg: Config) {\n this.config = new Config(cfg);\n }\n\n async init(cfg?: Config) {\n const updatedConfig = await this.config.configure({\n ...this.config,\n ...cfg,\n });\n this.setConfig(updatedConfig);\n this.manager = new DbManager(this.config);\n this.api = init(updatedConfig);\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.databaseId = val;\n this.api.auth.databaseId = val;\n this.api.users.databaseId = val;\n this.api.tenants.databaseId = val;\n }\n }\n\n get userId(): string | undefined | null {\n return this.config.userId;\n }\n\n set userId(userId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.auth.userId = this.config.userId;\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.auth.tenantId = tenantId;\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.auth.api.token = token;\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\n // only need to interact with the knex object\n return this.manager.getConnection(this.config);\n }\n\n /**\n * A utility function if you want to manage different NileDB instances yourself\n * returns the global Server object, an existing server that's already been configured,\n * or a new one if the config isn't in the cache\n */\n\n getInstance(config: ServerConfig): Server {\n const _config = { ...this.config, ...config };\n const serverId = getServerId(_config);\n const currentServerId = makeServerId(this.config);\n if (serverId === currentServerId) {\n return this;\n }\n const existing = this.servers.get(serverId);\n\n if (existing) {\n // be sure the config is up to date\n const updatedConfig = new Config(_config);\n existing.setConfig(updatedConfig);\n // propagage special config items\n existing.tenantId = updatedConfig.tenantId;\n existing.userId = updatedConfig.userId;\n existing.token = updatedConfig.api.token;\n existing.databaseId = updatedConfig.databaseId;\n return existing;\n }\n\n this.servers.set(serverId, new Server(_config));\n return this.servers.get(serverId) as unknown as Server;\n }\n}\n\nexport default Server;\n"],"names":["Logger","config","_len","arguments","length","params","Array","_key","info","debug","_console","_len2","args","_key2","console","apply","concat","warn","_console2","_len3","_key3","error","_console3","_len4","_key4","getUsername","cfg","logger","user","String","process","env","NILEDB_USER","getPassword","password","NILEDB_PASSWORD","getToken","_config$api","_config$api2","_config$api3","api","token","NILEDB_TOKEN","getDatabaseName","databaseName","NILEDB_NAME","getBasePath","_config$api4","_config$api5","basePath","NILEDB_API","getDbHost","db","host","NILEDB_HOST","getDbPort","_config$db","_config$db2","port","Number","NILEDB_PORT","Events","ApiConfig","_createClass","_ref","cookieKey","this","_token","key","get","set","value","Config","_config$api$cookieKey2","_this","databaseId","_tenantId","_userId","configure","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_config$api$cookieKey","_Logger","envVarConfig","url","res","database","possibleError","json","message","_database","apiHost","dbHost","name","dburl","apiurl","wrap","_context","prev","next","URL","searchParams","href","fetch","headers","Authorization","sent","clone","status","t0","text","Error","id","origin","_extends","abrupt","stop","_x","NILEDB_ID","tenantId","NILEDB_TENANT","getTenantId","Boolean","userId","ResponseError","body","init","response","Response","eventer","Eventer","events","_proto","prototype","publish","eventName","callbackList","_step","_iterator","_createForOfIteratorHelperLoose","done","callback","subscribe","push","updateTenantId","Tenant","updateUserId","User","updateToken","val","Token","X_NILE_TENANT","X_NILE_USER_ID","getTokenFromCookie","_headers$get","cookie","split","_cookies","cookieParts","_cookie","slice","join","_step2","_iterator2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","decodeJwt","sub","_fetch","_x2","_x3","_fetch2","path","opts","_response$status","basicHeaders","useableUrl","errorHandler","msg","_message","Headers","includes","replace","encodeURIComponent","e","t1","t2","errors","Requester","_Config","call","post","req","request","_callee2","_context2","_x4","_x5","_x6","put","_ref3","_callee3","_context3","_x7","_x8","_x9","_inheritsLoose","rawRequest","_rawRequest","_callee4","method","_init","_context4","_x10","_x11","_x12","_x13","_request","_callee5","_headers","_context5","Request","JSON","stringify","undefined","isEmpty","isObject","Object","values","_x14","_x15","_x16","_x17","Auth","login","_requester","providerRes","providers","_this$api","tenants","tenant","URLSearchParams","listProviders","append","redirectURI","loginSSOUrl","loginUrl","jwt","loginSSO","redirectUrl","ssoLogin","_this$api2","accessToken","formData","provider","_this$tenantId","signUp","_this$api3","_token$token","_token$token2","signUpUrl","listTenantProviders","_ref4","listTenantProvidersUrl","createProvider","_ref5","updateProviderUrl","updateProvider","_ref6","_callee6","_context6","_ref7","_callee7","_body","_context7","providerUrl","email","getSSOCallbackUrl","param","providerName","Users","createTenantUser","tenantUsersUrl","listUsers","usersUrl","updateUser","listTenantUsers","me","meUrl","baseUrl","Tenants","createTenant","tenantsUrl","getTenant","tenantUrl","NileDatabase","pool","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","_objectWithoutPropertiesLoose","_excluded","Pool","startTimeout","on","client","makeAfterCreate","err","_client","release","_this2","clearTimeout","setTimeout","end","EvictPool","_Logger2","conn","query","DBManager","connections","Map","cb","makeId","has","getConnection","existing","size","newOne","makeServerId","Buffer","from","toString","auth","users","Server","manager","servers","DbManager","setConfig","_init2","updatedConfig","getInstance","_config","serverId","getServerId","_this$config"],"mappings":"6nRAIwB,SAAAA,EACtBC,GACoB,IAAAC,IAAAA,EAAAC,UAAAC,OAAjBC,MAAiBC,MAAAJ,EAAAA,EAAAA,OAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAjBF,EAAiBE,EAAAJ,GAAAA,UAAAI,GAEpB,MAAO,CACLC,KAAI,WACF,GAAU,MAANP,GAAAA,EAAQQ,MAAO,CAAA,IAAA,IAAAC,EAAAC,EAAAR,UAAAC,OADbQ,EAAeN,IAAAA,MAAAK,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAfD,EAAeC,GAAAV,UAAAU,IAGnBH,EAAAI,SAAQN,KAAIO,MAAAL,EAAA,CAAC,YAAUM,OAAKX,EAAWO,GACzC,CACD,EACDK,KAAI,WACF,GAAU,MAANhB,GAAAA,EAAQQ,MAAO,CAAA,IAAA,IAAAS,EAAAC,EAAAhB,UAAAC,OADbQ,EAAeN,IAAAA,MAAAa,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfR,EAAeQ,GAAAjB,UAAAiB,IAGnBF,EAAAJ,SAAQG,KAAIF,MAAAG,EAAA,CAAC,YAAUF,OAAKX,EAAWO,GACzC,CACD,EACDS,MAAK,WACH,GAAU,MAANpB,GAAAA,EAAQQ,MAAO,CAAA,IAAA,IAAAa,EAAAC,EAAApB,UAAAC,OADZQ,EAAeN,IAAAA,MAAAiB,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfZ,EAAeY,GAAArB,UAAAqB,IAGpBF,EAAAR,SAAQO,MAAKN,MAAAO,GAAC,WAAY,WAASN,OAAKX,EAAWO,GACrD,CACF,EAEJ,CCnBO,IAWMa,EAAc,SAACC,GAC1B,IAAQzB,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OAERnB,EAASR,EAAOC,EAAQ,cAAxBO,KACR,OAAU,MAANP,GAAAA,EAAQ2B,MACVD,GAAUnB,EAAKmB,EAAQ,SAAU1B,EAAO2B,MACjCC,aAAO5B,SAAAA,EAAQ2B,QAExBD,GAAUnB,EAAKmB,EAAQ,OAAQG,QAAQC,IAAIC,aACpCF,QAAQC,IAAIC,YACrB,EAEaC,EAAc,SAACP,GAC1B,IAAQzB,EAAmByB,EAAnBzB,OAGR,OADiBD,EAAOC,EAAQ,cACtB,MAANA,GAAAA,EAAQiC,SAGHL,OAAO5B,EAAOiC,UAIhBJ,QAAQC,IAAII,eACrB,EAMaC,EAAW,SAACV,GAAkB,IAAAW,EAGjBC,EAAAC,EAFhBtC,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OACRnB,EAASR,EAAOC,EAAQ,WAAxBO,KACR,OAAU6B,MAANpC,GAAAoC,OAAMA,EAANpC,EAAQuC,MAARH,EAAaI,OACfd,GAAUnB,EAAKmB,EAAQ,SAAoB,OAAZW,EAAErC,EAAOuC,UAAG,EAAVF,EAAYG,OACtCZ,OAAOU,OAADA,EAACtC,EAAOuC,UAAPD,EAAAA,EAAYE,QAExBX,QAAQC,IAAIW,cACdf,GAAUnB,EAAKmB,EAAQ,OAAQG,QAAQC,IAAIW,cACpCZ,QAAQC,IAAIW,mBAFrB,CAKF,EAEaC,EAAkB,SAACjB,GAC9B,IAAQzB,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OACRnB,EAASR,EAAOC,EAAQ,kBAAxBO,KACR,OAAU,MAANP,GAAAA,EAAQ2C,cACVjB,GAAUnB,EAAKmB,EAAQ,SAAU1B,EAAO2C,cACjCf,OAAO5B,EAAO2C,eAEnBd,QAAQC,IAAIc,aACdlB,GAAUnB,EAAKmB,EAAQ,SAAUG,QAAQC,IAAIc,aACtCf,QAAQC,IAAIc,aAEd,IACT,EAkBaC,EAAc,SAACpB,GAAkB,IAAAqB,EAI9BC,EAHN/C,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OACRnB,EAASR,EAAOC,EAAQ,cAAxBO,KACFyC,EAAiB,MAANhD,GAAW,OAAL8C,EAAN9C,EAAQuC,UAAG,EAAXO,EAAaE,SAC9B,OAAIA,GACFtB,GAAUnB,EAAKmB,EAAQ,SAAgB,MAAN1B,UAAM+C,EAAN/C,EAAQuC,YAARQ,EAAaC,UACvCA,GAGLnB,QAAQC,IAAImB,YACdvB,GAAUnB,EAAKmB,EAAQ,OAAQG,QAAQC,IAAImB,YAC3C,WAAkBpB,QAAQC,IAAImB,aAGhCvB,GAAUnB,EAAKmB,EAAQ,UAAWG,QAAQC,IAAImB,YACvC,0BACT,EAEM,SAAUC,EAAUzB,GACxB,IAAQzB,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OACRnB,EAASR,EAAOC,EAAQ,aAAxBO,KAER,OAAIP,MAAAA,GAAAA,EAAQmD,IAAMnD,EAAOmD,GAAGC,MAC1B1B,GAAUnB,EAAKmB,EAAQ,SAAgB,MAAN1B,OAAM,EAANA,EAAQmD,GAAGC,MACrCpD,EAAOmD,GAAGC,MAGfvB,QAAQC,IAAIuB,aACd3B,GAAUnB,EAAKmB,EAAQ,OAAQG,QAAQC,IAAIuB,aACpCxB,QAAQC,IAAIuB,cAGrB3B,GAAUnB,EAAKmB,EAAQ,UAAW,kBAC3B,iBACT,CAEM,SAAU4B,EAAU7B,GAAc,IAAA8B,EAGUC,EAFxCxD,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OACRnB,EAASR,EAAOC,EAAQ,aAAxBO,KACR,OAAUgD,MAANvD,GAAAuD,OAAMA,EAANvD,EAAQmD,KAARI,EAAYE,MAA0B,MAAlBzD,EAAOmD,GAAGM,MAChC/B,GAAUnB,EAAKmB,EAAQ,SAAgB,MAAN1B,OAAM,EAANA,EAAQmD,GAAGM,MACrCC,OAAOF,OAADA,EAACxD,EAAOmD,SAAPK,EAAAA,EAAWC,OAGvB5B,QAAQC,IAAI6B,aACdjC,GAAUnB,EAAKmB,EAAQ,SAAUG,QAAQC,IAAI6B,aACtCD,OAAO7B,QAAQC,IAAI6B,eAE5BjC,GAAUnB,EAAKmB,EAAQ,UAAW,MAC3B,KACT,CCjImB,ICbdkC,EDuBCC,EAAS,WAgBZ,OAAAC,GAZD,SAAAC,GAQC,IAPCf,EAAQe,EAARf,SACAgB,EAASD,EAATC,UACAxB,EAAKuB,EAALvB,MAAKyB,KANAD,eAAS,EAAAC,KACTjB,cAAQ,EAAAiB,KACPC,YAAM,EAUZD,KAAKjB,SAAWA,EAChBiB,KAAKD,UAAYA,EACjBC,KAAKC,OAAS1B,CAChB,GAAC,CAAA,CAAA2B,IAAA,QAAAC,IAED,WACE,OAAOH,KAAKC,MACb,EAAAG,IAED,SAAiBC,GACfL,KAAKC,OAASI,CAChB,IAAC,CAxBY,GA2BFC,EAAM,WA4DhB,OAAAT,GA7BD,SAAY9D,GAAoB,IAAAwE,EAAAnC,EAAAoC,EAAAR,KAAAA,KA9BhCtC,UAAI,EAAAsC,KACJhC,cAAQ,EAAAgC,KACRS,gBAAU,EAAAT,KACVtB,kBAAY,EAAAsB,KAEZzD,WAAK,EAAAyD,KAELd,QAAE,EAAAc,KAEF1B,SAAG,EAAA0B,KAEKU,eAAS,EAAAV,KACTW,aAAO,EAAAX,KAiDfY,UAAS,WAAA,IAAAC,EAAAC,EAAAC,IAAAC,MAAG,SAAAC,EAAOlF,GAAoB,IAAAmF,EAAA/C,EAAAgD,EAAA7E,EAAAa,EAAAiE,EAAArC,EAAAI,EAAAK,EAAAd,EAAA2C,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAjB,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EActB,OAdsBjB,EACbrF,EAAOC,EAAQ,UAA/BO,EAAI6E,EAAJ7E,KAAMa,EAAKgE,EAALhE,MAIV4B,EAAWH,EAHTwC,EAA0B,CAC9BrF,OAAAA,IAGEoD,EAAOF,EAAUmC,GACf5B,EAAOH,EAAU+B,GAEjB1C,EAAeD,EAAgB,CAAE1C,OAAAA,EAAQ0B,OAAQ,YACjD4D,EAAM,IAAIgB,IAAOtD,0BACnBL,GACF2C,EAAIiB,aAAalC,IAAI,eAAgB1B,GAEvCpC,EAAK+E,EAAIkB,MAAML,EAAAE,KAAA,GACGI,MAAMnB,EAAK,CAC3BoB,QAAS,CACPC,cAAa,WDrFSlF,ECqFiB,CAAEzB,OAAAA,GDpFrCwB,EAAYC,OAAQO,EAAYP,OCsFtC,KAAA,GAE+B,OAA3BgE,GANAF,EAAGY,EAAAS,MAMiBC,QAAOV,EAAAC,KAAA,GAAAD,EAAAE,KAAA,GAEFd,EAAIG,OAAM,KAAA,GAAjCA,EAAIS,EAAAS,KACS,MAAfrB,EAAIuB,QACNvG,EAAK,2CAGLiF,EADEE,EAAKoB,QAA0B,UAAhBpB,EAAKoB,OACX,CAAEnB,QAAS,6BAEXD,EACZS,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAA,OAAAF,EAAAC,KAAA,GAAAD,EAAAY,GAAAZ,EAAA,MAAA,IAAAA,EAAAE,KAAA,GAEqBZ,EAAcuB,OAAM,KAAA,GAC1C5F,EADMuE,EAAOQ,EAAAS,MAEbpB,EAAW,CAAEG,QAAAA,GAAsB,KAAA,GAAA,GAEhCvC,GAASqB,EAAK9B,cAAiB8B,EAAKC,WAAU,CAAAyB,EAAAE,KAAA,GAAA,KAAA,CAEd,GADnC9F,EAAK,qBAAsBiF,KAErB,YAAaA,GAAQ,CAAAW,EAAAE,KAAA,GAAA,KAAA,CAAA,KACnB,eAAgBb,GAAQ,CAAAW,EAAAE,KAAA,GAAA,KAAA,CACV,MAAhBjF,EAAMoE,GACA,IAAIyB,MAAM,0BAAyB,KAAA,GAAA,MAEnC,IAAIA,MACR,8GACD,KAAA,GAGmB,iBAAbzB,IACDK,GADwBD,EACMJ,GAA9BK,QAASC,EAAMF,EAANE,OAAQC,EAAIH,EAAJG,KACzBtB,EAAKC,WAD4BkB,EAAFsB,GAE/BzC,EAAK9B,aAAeoD,EAEdC,EAAQ,IAAIM,IAAIR,GAChBG,EAAS,IAAIK,IAAIT,GACvBzC,EAAO4C,EAAM5C,KACbJ,EAAWiD,EAAOkB,QACnB,KAAA,GAgBsB,OAb3B1C,EAAKlC,IAAM,IAAIsB,EAAU,CACvBb,SAAAA,EACAgB,UAAiCmB,OAAxBA,EAAQ,MAANnF,UAAMoC,EAANpC,EAAQuC,YAARH,EAAa4B,WAASmB,EAAI,QACrC3C,MAAOL,EAAS,CAAEnC,OAAAA,MAEpByE,EAAKtB,GAAEiE,EAAA,CACLzF,KAAM8C,EAAK9C,KACXM,SAAUwC,EAAKxC,SACfmB,KAAAA,EACAK,KAAAA,EACA+B,SAAUf,EAAK9B,cACW,iBAAf3C,MAAAA,OAAAA,EAAAA,EAAQmD,IAAkBnD,EAAOmD,GAAK,CAAE,GAErD5C,EAAK,eAAgBkE,GAAM0B,EAAAkB,OAAA,SACpB5C,GAAI,KAAA,GAAA,IAAA,MAAA,OAAA0B,EAAAmB,ODhJc,IAAC7F,CCgJf,GAAAyD,EAAA,KAAA,CAAA,CAAA,GAAA,KACZ,KAAA,OAAA,SAAAqC,GAAA,OAAAzC,EAAAhE,MAAAmD,KAAA/D,UAAA,CAAA,CA7EQ,GA9BP,ID3EyBuB,EACnBzB,EAAQ0B,EAERnB,ECwEA8E,EAA0B,CAC9BrF,OAAAA,GAEFiE,KAAKS,YD7EShD,GADWD,EC8EM4D,GD7EjB3D,OAERnB,EAASR,EAFTC,EAAmByB,EAAnBzB,OAEwB,gBAAxBO,KACE,MAANP,GAAAA,EAAQ0E,YACVhD,GAAUnB,EAAKmB,EAAQ,SAAU1B,EAAO0E,YACjC9C,aAAO5B,SAAAA,EAAQ0E,cAExBhD,GAAUnB,EAAKmB,EAAQ,MAAOG,QAAQC,IAAI0F,WACnC3F,QAAQC,IAAI0F,YCsEjBvD,KAAKtC,KAAOH,EAAY6D,GACxBpB,KAAKhC,SAAWD,EAAYqD,GAC5BpB,KAAKtB,aAAeD,EAAgB2C,GACpCpB,KAAKU,UDbkB,SAAClD,GAC1B,IAAQzB,EAAmByB,EAAnBzB,OAAQ0B,EAAWD,EAAXC,OACRnB,EAASR,EAAOC,EAAQ,cAAxBO,KACR,OAAU,MAANP,GAAAA,EAAQyH,UACV/F,GAAUnB,EAAKmB,EAAQ,SAAU1B,EAAOyH,UACjCzH,EAAOyH,UAGZ5F,QAAQC,IAAI4F,eACdhG,GAAUnB,EAAKmB,EAAQ,OAAQG,QAAQC,IAAI4F,eACpC7F,QAAQC,IAAI4F,eAGd,IACT,CCDqBC,CAAYtC,GAC7BpB,KAAKzD,MAAQoH,QAAQ5H,MAAAA,OAAAA,EAAAA,EAAQQ,OAC7ByD,KAAKW,QAAU5E,MAAAA,OAAAA,EAAAA,EAAQ6H,OAEvB,IAAM7E,EAAWH,EAAYwC,GACvBjC,EAAOF,EAAUmC,GACjB5B,EAAOH,EAAU+B,GAEvBpB,KAAK1B,IAAM,IAAIsB,EAAU,CACvBb,SAAAA,EACAgB,UAAiCQ,OAAxBA,EAAQ,MAANxE,UAAMqC,EAANrC,EAAQuC,YAARF,EAAa2B,WAASQ,EAAI,QACrChC,MAAOL,EAAS,CAAEnC,OAAAA,MAEpBiE,KAAKd,GAAEiE,EAAA,CACLzF,KAAMsC,KAAKtC,KACXM,SAAUgC,KAAKhC,SACfmB,KAAAA,EACAK,KAAAA,EACA+B,SAAUvB,KAAKtB,cACW,iBAAf3C,MAAAA,OAAAA,EAAAA,EAAQmD,IAAkBnD,EAAOmD,GAAK,CAAE,EAEvD,GAAC,CAAA,CAAAgB,IAAA,WAAAC,IA7CD,WACE,OAAOH,KAAKU,SACb,EAAAN,IAED,SAAoBC,GAClBL,KAAKU,UAAYL,CACnB,GAAC,CAAAH,IAAA,SAAAC,IAED,WACE,OAAOH,KAAKW,OACb,EAAAP,IAED,SAAkBC,GAChBL,KAAKW,QAAUN,CACjB,IAAC,CA7BgB,GEpDNwD,EAEX,SAAYC,EAAwBC,GAAmB/D,KADvDgE,cAAQ,EAENhE,KAAKgE,SAAW,IAAIC,SAASH,EAAMC,EACrC,GDFF,SAAKpE,GACHA,EAAA,KAAA,SACAA,EAAA,OAAA,WACAA,EAAA,MAAA,QACAA,EAAA,UAAA,WACD,CALD,CAAKA,IAAAA,EAKJ,CAAA,IAAA,IA8BKuE,EAAU,IA7BH,WAEX,SAAAC,IAAAnE,KADAoE,YAAM,EAEJpE,KAAKoE,OAAS,EAChB,CAAC,IAAAC,EAAAF,EAAAG,UAqBA,OArBAD,EACDE,QAAA,SAAQC,EAAmBnE,GAEzB,IAAMoE,EAAezE,KAAKoE,OAAOI,GAGjC,GAAIC,EACF,IAAA,IAAmCC,EAAnCC,EAAAC,EAAuBH,KAAYC,EAAAC,KAAAE,OACjCC,EADiBJ,EAAArE,OACRA,EAGf,EACAgE,EACAU,UAAA,SAAUP,EAAmBM,GAEtB9E,KAAKoE,OAAOI,KACfxE,KAAKoE,OAAOI,GAAa,IAI3BxE,KAAKoE,OAAOI,GAAWQ,KAAKF,IAC7BX,CAAA,CAzBU,IA+BAc,EAAiB,SAACzB,GAC7BU,EAAQK,QAAQ5E,EAAOuF,OAAQ1B,EACjC,EAKa2B,EAAe,SAACvB,GAC3BM,EAAQK,QAAQ5E,EAAOyF,KAAMxB,EAC/B,EAIayB,EAAc,SAACC,GAC1BpB,EAAQK,QAAQ5E,EAAO4F,MAAOD,EAChC,EE7CaE,EAAgB,kBAChBC,EAAiB,gBAc9B,SAASC,EAAmBjD,EAAkB1C,GAAwB,IAAA4F,EAC9DC,SAAMD,EAAGlD,EAAQtC,IAAI,kBAAZwF,EAAuBE,MAAM,MACtCC,EAAmC,CAAA,EACzC,GAAIF,EACF,IAAA,IAA0BlB,EAA1BC,EAAAC,EAAoBgB,KAAMlB,EAAAC,KAAAE,MAAE,CAAA,IACpBkB,EADQrB,EAAArE,MACYwF,MAAM,KAC1BG,EAAUD,EAAYE,MAAM,GAAGC,KAAK,KAE1CJ,EADaC,EAAY,IACRC,CACnB,CAGF,GAAIJ,EACF,IAAA,IAA0BO,EAA1BC,EAAAxB,EAAoBgB,KAAMO,EAAAC,KAAAvB,MAAE,CAAA,IACpBkB,EADQI,EAAA9F,MACYwF,MAAM,KAC1BG,EAAUD,EAAYE,MAAM,GAAGC,KAAK,KAE1CJ,EADaC,EAAY,IACRC,CACnB,CAEF,OAAIjG,EACK+F,EAAS/F,GAEX,IACT,CACgB,SAAAsG,EAAkB5D,EAAkB1G,GAAc,IAAA+D,EAC1DwG,EAAeZ,EAAmBjD,EAAS,YACjD,OAAkD,OAAlD3C,QAAOwG,EAAAA,EAAgB7D,MAAAA,OAAAA,EAAAA,EAAStC,IAAIqF,IAAc1F,EAAI/D,EAAOyH,QAC/D,CAEgB,SAAA+C,EAAgB9D,EAAkB1G,GAAc,IAAAyK,EACxDjI,EAAQmH,EAAmBjD,EAAS1G,EAAOuC,IAAIyB,WACrD,OAAIxB,EACUkI,YAAUlI,GACXmI,IAEsBF,OAAnCA,EAAc,MAAP/D,OAAO,EAAPA,EAAStC,IAAIsF,IAAee,EAAIzK,EAAO6H,MAChD,CAEA,SAAsB+C,EAAMrD,EAAAsD,EAAAC,GAAA,OAAAC,EAAAjK,MAAAmD,KAAA/D,UAAA,CAwG3B,SAAA6K,IAAA,OAAAA,EAAAhG,EAAAC,IAAAC,MAxGM,SAAAC,EACLlF,EACAgL,EACAC,GAAkB,IAAA7I,EAAAC,EAAA6I,EAAA9F,EAAA7E,EAAAa,EAAAkE,EAAAtB,EAAA0C,EAAAyE,EAAA3I,EAAAiF,EAAAI,EAAAuD,EAAAnD,EAAA1C,EAAA8F,EAAAC,EAAA3F,EAAA4F,EAAA,OAAAvG,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAsBG,GAtBHjB,EAEMrF,EAAOC,EAAQ,YAA/BO,EAAI6E,EAAJ7E,KAAMa,EAAKgE,EAALhE,MAERkE,EAAG,IAAgB,OAAhBlD,EAAMpC,EAAOuC,UAAG,EAAVH,EAAYY,UAAWgI,EAChChH,EAAsB,OAAb3B,EAAGrC,EAAOuC,UAAG,EAAVF,EAAY2B,UACxB0C,EAAU,IAAI8E,QAAQP,MAAAA,OAAAA,EAAAA,EAAMvE,UAC5ByE,EAAe,IAAIK,SACZnH,IAAI,eAAgB,mCACdqC,EAAQtC,IAAI,oBAEvB5B,EAAQmH,EAAmBjD,EAAS1C,IAExCmH,EAAa9G,IAAI,gBAAe,UAAY7B,GACnCL,EAAS,CAAEnC,OAAAA,KACpBmL,EAAa9G,IAAI,gBAAe,UAAYlC,EAAS,CAAEnC,OAAAA,MAIrDyH,EAAW6C,EAAkB5D,EAAS1G,GAC5CkJ,EAAezB,GACTI,EAAS2C,EAAgB9D,EAAS1G,GACxCoJ,EAAavB,IACTvC,EAAImG,SAAS,eAAkBhE,EAAQ,CAAAtB,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAkB,OAAA,SAClC,IAAIS,EAAc,kCAAmC,CAC1DhB,OAAQ,OACR,KAAA,GAMwB,OAJtBsE,EAAa9F,EAChBoG,QAAQ,aAAcC,mBAAmB/J,OAAO6F,KAChDiE,QAAQ,WAAYC,mBAAmB/J,OAAOiG,KAEjDtH,EAAK,UAAW6K,GAAYjF,EAAAE,KAAA,GAELI,MAAM2E,EAAUhE,KAClC6D,EAAI,CACPvE,QAASyE,KACT,OAAO,SAACS,GACRxK,EAAM,UAAW,aAAcwK,EACjC,IAAE,KAAA,GALY,MAAR3D,EAAQ9B,EAAAS,OAOEqB,EAASnB,QAAU,KAAOmB,EAASnB,OAAS,KAAG,CAAAX,EAAAE,KAAA,GAAA,KAAA,CAAA,GAC/B,mBAAnB4B,EAASpB,MAAoB,CAAAV,EAAAE,KAAA,GAAA,KAAA,CAClC,OADkCF,EAAAY,GACtCxG,EAAI4F,EAAAE,KAAA,GAAgC4B,EAASpB,QAAQnB,OAAM,KAAA,GAAAS,EAAA0F,GAAA1F,EAAAS,MAAA,EAAAT,EAAAY,IAAtD,UAAW,aAAYZ,EAAA0F,IAAA,KAAA,GAAA,OAAA1F,EAAAkB,OAAA,SAEvBY,GAAQ,KAAA,GAML,OAFNoD,EACuB,mBAApBpD,MAAAA,OAAAA,EAAAA,EAAUpB,OAAuBoB,EAASpB,QAAU,KACzDyE,EAAM,GAAEnF,EAAAC,KAAA,GAAAD,EAAAE,KAAA,GAEG4B,MAAAA,OAAAA,EAAAA,EAAuBvC,OAAM,KAAA,GAA1CH,EAAGY,EAAAS,KAAAT,EAAAE,KAAA,GAAA,MAAA,KAAA,GAAA,GAAAF,EAAAC,KAAA,GAAAD,EAAA2F,GAAA3F,EAAA,MAAA,KAECkF,EAAY,CAAAlF,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,KAAA,GACFgF,EAAarE,OAAM,KAAA,IAA/BsE,EAAGnF,EAAAS,OAEDxF,EAAM,UAAW,aAAY,YAAciK,EAAavE,OAAWwE,IAAAA,GACpE,KAAA,GAEEA,GACHlK,EAAM,UAAW,aAAY+E,EAAA2F,IAC9B,KAAA,GAAA,IAECR,EAAG,CAAAnF,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAkB,OAAA,SACE,IAAIS,EAAcwD,EAAK,CAAExE,OAAQuE,MAAAA,OAAAA,EAAAA,EAAcvE,UAAS,KAAA,GAAA,IAG7DvB,KAAO,YAAaA,GAAG,CAAAY,EAAAE,KAAA,GAAA,KAAA,CAOvB,OALFjF,EACE,UACA,aACYiK,aAAAA,MAAAA,OAAAA,EAAAA,EAAcvE,QAC1BnB,IALMA,EAAYJ,EAAZI,SAMNQ,EAAAkB,OAAA,SACK,IAAIS,EAAcnC,EAAS,CAAEmB,OAAQ,OAAM,KAAA,GAAA,IAEhDvB,KAAO,WAAYA,GAAG,CAAAY,EAAAE,KAAA,GAAA,KAAA,CAStB,OALFjF,EACE,UACA,aACYiK,aAAAA,MAAAA,OAAAA,EAAAA,EAAcvE,QAC1BnB,IANSA,EACPJ,EADFwG,OAAgB,IAOhB5F,EAAAkB,OAAA,SACK,IAAIS,EAAcnC,EAAS,CAAEmB,OAAQ,OAAM,KAAA,GAQlD,OALF1F,EACE,UACA,aACYiK,aAAAA,MAAAA,OAAAA,EAAAA,EAAcvE,QAC1B,IAAA,mBACAX,EAAAkB,OAAA,SACK,IAAIS,EAAc,KAAM,CAC7BhB,OAAsCoE,OAAhCA,EAAwB,MAArBjD,OAAqB,EAArBA,EAAuBnB,QAAMoE,EAAI,OAC1C,KAAA,GAAA,IAAA,MAAA,OAAA/E,EAAAmB,OAAA,GAAApC,EAAA,KAAA,CAAA,CAAA,GAAA,KACH,MAAApE,MAAAmD,KAAA/D,UAAA,CClKgD,IAK5B8L,WAAaC,GAChC,SAAAD,EAAYhM,GAAc,IAAAyE,EAgHzB,OA/GCA,EAAAwH,EAAAC,KAAAjI,KAAMjE,IAAOiE,MAyFfkI,KAAI,WAAA,IAAApI,EAAAgB,EAAAC,IAAAC,MAAG,SAAAC,EACLkH,EACA9G,EACA0C,GAAkB,OAAAhD,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,OAAAF,EAAAE,KAAA,EAEL5B,EAAK4H,QAAQ,OAAQ/G,EAAK8G,EAAKpE,GAAK,KAAA,EAAA,OAAA7B,EAAAkB,OAAAlB,SAAAA,EAAAS,MAAA,KAAA,EAAA,IAAA,MAAA,OAAAT,EAAAmB,OAAA,GAAApC,EAClD,KAAA,OAAA,SAAAqC,EAAAsD,EAAAC,GAAA,OAAA/G,EAAAjD,MAAAmD,KAAA/D,UAAA,CAAA,CANG,GAMHuE,EAEDL,IAAG,WAAA,IAAAU,EAAAC,EAAAC,IAAAC,MAAG,SAAAqH,EACJF,EACA9G,EACA0C,GAAkB,OAAAhD,IAAAkB,MAAA,SAAAqG,GAAA,cAAAA,EAAAnG,KAAAmG,EAAAlG,MAAA,KAAA,EAAA,OAAAkG,EAAAlG,KAAA,EAEL5B,EAAK4H,QAAQ,MAAO/G,EAAK8G,EAAKpE,GAAK,KAAA,EAAA,OAAAuE,EAAAlF,OAAAkF,SAAAA,EAAA3F,MAAA,KAAA,EAAA,IAAA,MAAA,OAAA2F,EAAAjF,OAAA,GAAAgF,EACjD,KAAA,OAAA,SAAAE,EAAAC,EAAAC,GAAA,OAAA5H,EAAAhE,MAAAmD,KAAA/D,UAAA,CAAA,CANE,GAMFuE,EAEDkI,IAAG,WAAA,IAAAC,EAAA7H,EAAAC,IAAAC,MAAG,SAAA4H,EACJT,EACA9G,EACA0C,GAAkB,OAAAhD,IAAAkB,MAAA,SAAA4G,GAAA,cAAAA,EAAA1G,KAAA0G,EAAAzG,MAAA,KAAA,EAAA,OAAAyG,EAAAzG,KAAA,EAEL5B,EAAK4H,QAAQ,MAAO/G,EAAK8G,EAAKpE,GAAK,KAAA,EAAA,OAAA8E,EAAAzF,OAAAyF,SAAAA,EAAAlG,MAAA,KAAA,EAAA,IAAA,MAAA,OAAAkG,EAAAxF,OAAA,GAAAuF,EACjD,KAAA,OAAA,SAAAE,EAAAC,EAAAC,GAAA,OAAAL,EAAA9L,MAAAmD,KAAA/D,UAAA,CAAA,CANE,GAMFuE,CA9GD,CAACyI,EAAAlB,EAAAC,GAAA,IAAA3D,EAAA0D,EAAAzD,UAsFA,OAtFAD,EAEK6E,WAAU,WAAA,IAAAC,EAAArI,EAAAC,IAAAC,MAAhB,SAAAoI,EACEC,EACAhI,EACA0C,EACAD,GAAa,IAAAwF,EAAAhI,EAAA,OAAAP,IAAAkB,MAAA,SAAAsH,GAAA,cAAAA,EAAApH,KAAAoH,EAAAnH,MAAA,KAAA,EAKL,OAHFkH,EAAKnG,EAAA,CAAA,EACNY,EAAI,CACPD,KAAAA,EACAuF,OAAAA,IAAME,EAAAnH,KAAA,EAGUuE,EAAO3G,KAAMqB,EAAKiI,GAAM,KAAA,EAAjC,MAAHhI,EAAGiI,EAAA5G,gBAEUkB,GAAa,CAAA0F,EAAAnH,KAAA,EAAA,KAAA,CAAA,OAAAmH,EAAAnG,OACvB9B,SAAAA,EAAI0C,UAAQ,KAAA,EAAA,OAAAuF,EAAAnG,OAAA,SAGd9B,GAAG,KAAA,EAAA,IAAA,MAAA,OAAAiI,EAAAlG,OAAA,GAAA+F,EAAApJ,KACX,KAAA,OAAA,SAAAwJ,EAAAC,EAAAC,EAAAC,GAAA,OAAAR,EAAAtM,MAAAmD,KAAA/D,UAAA,CAAA,CAnBe,GAqBhBoI,EAWgB+D,QAAO,WAAA,IAAAwB,EAAA9I,EAAAC,IAAAC,MAAb,SAAA6I,EACRR,EACAhI,EACA8G,EACApE,GAAkB,IAAAtB,EAAAe,EAAAoC,EAAAkE,EAAApJ,EAAAsF,EAAAlC,EAAAwF,EAAA,OAAAvI,IAAAkB,MAAA,SAAA8H,GAAA,cAAAA,EAAA5H,KAAA4H,EAAA3H,MAAA,KAAA,EA4BlB,GAzBMK,EAAU,IAAI8E,QAAQxD,EAAOA,MAAAA,OAAAA,EAAAA,EAAMtB,QAAU,CAAA,GAC/C0F,aAAeZ,SACX/D,EAAW2E,EAAIhI,IAAIqF,GACnBI,EAASuC,EAAIhI,IAAI,UACnBqD,GACFf,EAAQrC,IAAIoF,EAAehC,GAEzBoC,GACFnD,EAAQrC,IAAI,SAAUwF,IAEfuC,aAAe6B,UAElBF,EAAW,IAAIvC,QAAQY,MAAAA,OAAAA,EAAAA,EAAK1F,SAC5Be,EAAWsG,EAAS3J,IAAIqF,GACxBI,EAASkE,EAAS3J,IAAI,UACxBqD,GACFf,EAAQrC,IAAIoF,EAAehC,GAEzBoC,GACFnD,EAAQrC,IAAI,SAAUwF,IAItB9B,EAA2BmG,KAAKC,UAAU/B,GAG/B,QAAXkB,EAAgB,CAAAU,EAAA3H,KAAA,EAAA,KAAA,CAClB0B,OAAOqG,EAAUJ,EAAA3H,KAAA,GAAA,MAAA,KAAA,EAAA,KACR+F,aAAe6B,SAAO,CAAAD,EAAA3H,KAAA,GAAA,KAAA,CAAA,OAAA2H,EAAA3H,KAAA,GAClB,IAAI6B,SAASkE,EAAIrE,MAAMf,OAAM,KAAA,GAA1Ce,EAAIiG,EAAApH,KAAAoH,EAAA3H,KAAA,GAAA,MAAA,KAAA,IAGJ+F,aAAeZ,SACf6C,EAAQjC,IACPkC,EAASlC,IAAsC,IAA9BmC,OAAOC,OAAOpC,GAAKjM,UAErC4H,OAAOqG,GACR,KAAA,GAIQ,OAFHb,EAAKnG,EAAA,CAAA,EACNY,EAAI,CACPtB,QAAAA,IAAOsH,EAAA3H,KAAA,GAGIpC,KAAKkJ,WAAWG,EAAQhI,EAAKiI,EAAOxF,GAAK,KAAA,GAAA,OAAAiG,EAAA3G,OAAA2G,SAAAA,EAAApH,MAAA,KAAA,GAAA,IAAA,MAAA,OAAAoH,EAAA1G,OAAA,GAAAwG,EAAA7J,KACvD,KAAA,OAAA,SAAAwK,EAAAC,EAAAC,EAAAC,GAAA,OAAAf,EAAA/M,MAAAmD,KAAA/D,UAAA,CAAA,CApDsB,GAoDtB8L,CAAA,EAzFuCzH,GCqBrBsK,WAAK5C,GACxB,SAAA4C,EAAY7O,GAAc,IAAAyE,EAoNzB,OAnNCA,EAAAwH,EAAAC,KAAAjI,KAAMjE,IAAOiE,MAMf6K,MAAK,WAAA,IAAA/K,EAAAgB,EAAAC,IAAAC,MAAG,SAAAC,EACNkH,EACApE,GAAkB,IAAAtB,EAAAqI,EAAAC,EAAAC,EAAA1J,EAAA2J,EAAA1M,EAAAqH,EAAAsF,EAAAC,EAAA3H,EAAA,OAAAzC,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAUW,GARvBK,EAAU,IAAI8E,QAAQ,CAAE,eAAgB,qBACxCuD,EAAa,IAAI/C,EAASvH,GASpB,UANV2H,aAAe6B,QACX,IAAI3H,IAAI8F,EAAI9G,KAAKiB,aACjB,IAAI8I,iBAESjL,IAAI,OAEL,CAAA+B,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,KAAA,EACU5B,EAAK6K,cAC5BlD,EAAgBvF,QACjBmB,GACD,KAAA,EAHgB,MAAXgH,EAAW7I,EAAAS,OAOfoI,EAAYlI,QAAU,KACtBkI,EAAYlI,OAAS,KAAG,CAAAX,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,KAAA,GAEA,IAAI6B,SAAS8G,EAAYjH,MAAMrC,OAAM,KAAA,GAA9C,MAATuJ,EAAS9I,EAAAS,MACDzG,OAAS,GAAC,CAAAgG,EAAAE,KAAA,GAAA,KAAA,CAAA,KAClB4I,EAAU9O,OAAS,GAAC,CAAAgG,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAkB,OAAA,SACf,IAAIa,SAASgG,KAAKC,UAAUc,GAAY,CAAEnI,OAAQ,OAAM,KAAA,GAUjE,OALAJ,EAAQrC,IAAIoF,EAAewF,EAAU,GAAGxH,UACxCf,EAAQ6I,OACN,aACYN,YAAAA,EAAU,GAAGxH,SAAQ,uBAEnCtB,EAAAkB,OACO,SAAA,IAAIa,SACTgG,KAAKC,UAAU,CACbqB,YAAW,GAAK/K,EAAKlC,IAAIS,SAAWyB,EAAKgL,YAAY,UAEvD,CAAE3I,OAAQ,OACX,KAAA,GAAA,OAAAX,EAAAE,KAAA,GAOW0I,EAAW5C,KAAKC,EAAK3H,EAAKiL,SAAU1H,GAAK,OAAO,SAAC4D,GAGjE,OADA/K,QAAQO,MAAMwK,GACPA,CACT,IAAE,KAAA,GAJO,MAAHrG,EAAGY,EAAAS,gBAKUkB,GAAa,CAAA3B,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAkB,OACvB9B,SAAAA,EAAI0C,UAAQ,KAAA,GAAA,KAEjB1C,GAAOA,EAAIuB,QAAU,KAAOvB,EAAIuB,OAAS,KAAG,CAAAX,EAAAE,KAAA,GAAA,KAAA,CAAA,OAAAF,EAAAE,KAAA,GACPd,EAAIG,OAAM,KAAA,GAQpB,OAPvBmE,GAAoB,OAAdqF,EAAMzK,EAAKlC,UAAG,EAAR2M,EAAUlL,WAAaxB,KADnCA,EAAK2D,EAAAS,MACoCpE,MAAMmN,IAAG,oCACxDjJ,EAAQ6I,OAAO,aAAc1F,GAEvBuF,EAAgB,OADdD,EAAY3M,EAAZ2M,cACc,EAAPA,EAASX,SAClB/G,EAAW2H,MAAAA,OAAAA,EAAAA,EAAQ/I,OAAO/B,MAChCoC,EAAQrC,IAAIoF,EAAehC,GAC3Bf,EAAQ6I,OAAO,aAA0B9H,YAAAA,yBACzC6B,EAAY9G,EAAMA,MAAMmN,KAAKxJ,EAAAkB,OAAA,SAEtB,IAAIa,SAASgG,KAAKC,UAAU3L,GAAQ,CAAEsE,OAAQ,IAAKJ,QAAAA,KAAU,KAAA,GAAA,OAAAP,EAAAE,KAAA,GAEnDd,EAAIyB,OAAM,KAAA,GAAnB,OAAAb,EAAAkB,OAAA,SACH,IAAIa,SADD/B,EAAAS,KACgB,CAAEE,OAAQvB,EAAIuB,UAAS,KAAA,GAAA,IAAA,MAAA,OAAAX,EAAAmB,OAAA,GAAApC,EAClD,KAAA,OAAAqC,SAAAA,EAAAsD,GAAA,OAAA9G,EAAAjD,MAAAmD,KAAA/D,UAAA,CAAA,CA1EI,GA0EJuE,EAEDmL,SAAW,SAACC,GACV,IAAMC,EAAQ,WAAA,IAAAhL,EAAAC,EAAAC,IAAAC,MAAG,SAAAqH,EACfF,GAAyB,IAAA2D,EAAArJ,EAAAqB,EAAAiI,EAAAvI,EAAAoC,EAAA,OAAA7E,IAAAkB,MAAA,SAAAqG,GAAA,cAAAA,EAAAnG,KAAAmG,EAAAlG,MAAA,KAAA,EAEI,OAAvBK,EAAU,IAAI8E,QAASe,EAAAlG,KAAA,EACT+F,EAAgB6D,WAAU,KAAA,EAApC,OAAJlI,EAAIwE,EAAA3F,KAAA2F,EAAAlG,KAAA,EACiB0B,EAAK3D,IAAI,gBAAe,KAAA,EAAlC,OAAX4L,EAAWzD,EAAA3F,KAAA2F,EAAAlG,KAAA,EACO0B,EAAK3D,IAAI,YAAW,KAAA,EAMP,OAN/BqD,EAAQ8E,EAAA3F,KACRiD,GAAoB,OAAdkG,EAAMtL,EAAKlC,UAAG,EAARwN,EAAU/L,WAAS,IAAIgM,EAAW,oCACpD1G,EAAY0G,GACZtJ,EAAQ6I,OAAO,aAAc1F,GAC7BnD,EAAQrC,IAAIoF,EAAehC,GAC3Bf,EAAQ6I,OAAO,aAA0B9H,YAAAA,yBACzCf,EAAQrC,IAAI,WAAYwL,GAAatD,EAAAlF,OAAA,SAC9B,IAAIa,SAAS,KAAM,CACxBxB,QAAAA,EACAI,OAAQ,OACR,KAAA,GAAA,IAAA,MAAA,OAAAyF,EAAAjF,OAAA,GAAAgF,EACH,KAAA,OAjBKwD,SAAQhF,GAAA,OAAAhG,EAAAhE,MAAAmD,KAAA/D,UAAA,EAAA,GAkBd,OAAO4P,GACRrL,EAEDgL,YAAc,SAACS,GAAoB,IAAAC,EACjC,MAAA,cAAqBxE,mBAAmBlH,EAAKC,YAAWyL,aACzC,OADyCA,EACtD1L,EAAKgD,UAAQ0I,EAAI,sCACKD,EAAQ,UACjCzL,EAMD2L,OAAM,WAAA,IAAAxD,EAAA7H,EAAAC,IAAAC,MAAG,SAAA4H,EACPT,EACApE,GAAkB,IAAAtB,EAAAqI,EAAAxJ,EAAA8K,EAAAC,EAAAC,EAAA/N,EAAAqH,EAAA3C,EAAA,OAAAlC,IAAAkB,MAAA,SAAA4G,GAAA,cAAAA,EAAA1G,KAAA0G,EAAAzG,MAAA,KAAA,EAGoB,OADhCK,EAAU,IAAI8E,QACduD,EAAa,IAAI/C,EAASvH,GAAMqI,EAAAzG,KAAA,EACpB0I,EAAW5C,KAAKC,EAAK3H,EAAK+L,UAAWxI,GAAK,OAAO,SAAC4D,GAGlE,OADA/K,QAAQO,MAAMwK,GACPA,CACT,IAAE,KAAA,EAJO,MAAHrG,EAAGuH,EAAAlG,gBAKUkB,GAAa,CAAAgF,EAAAzG,KAAA,EAAA,KAAA,CAAA,OAAAyG,EAAAzF,OACvB9B,SAAAA,EAAI0C,UAAQ,KAAA,EAAA,KAEjB1C,GAAOA,EAAIuB,QAAU,KAAOvB,EAAIuB,OAAS,KAAG,CAAAgG,EAAAzG,KAAA,GAAA,KAAA,CAAA,OAAAyG,EAAAzG,KAAA,GACPd,EAAIG,OAAM,KAAA,GAOe,OAN1DmE,UAAMwG,EAAM5L,EAAKlC,YAAL8N,EAAUrM,WAASsM,KAAIA,OAAJA,GAD/B9N,EAAKsK,EAAAlG,MACoCpE,YAAN8N,EAAAA,EAAaX,KAAG,oCACzDjJ,EAAQ6I,OAAO,aAAc1F,GACrB3C,EAAO1E,EAAP0E,GACRoC,EAAYiH,OAADA,EAAC/N,EAAMA,YAAN+N,EAAAA,EAAaZ,KACzBvG,EAAalC,GACbR,EAAQrC,IAAIqF,EAAgBxC,GAC5BR,EAAQ6I,OAAO,aAAwBrI,UAAAA,yBAAyB4F,EAAAzF,OAAA,SACzD,IAAIa,SAASgG,KAAKC,UAAU3L,GAAQ,CAAEsE,OAAQ,IAAKJ,QAAAA,KAAU,KAAA,GAAA,OAAAoG,EAAAzG,KAAA,GAEnDd,EAAIyB,OAAM,KAAA,GAAnB,OAAA8F,EAAAzF,OAAA,SACH,IAAIa,SADD4E,EAAAlG,KACgB,CAAEE,OAAQvB,EAAIuB,UAAS,KAAA,GAAA,IAAA,MAAA,OAAAgG,EAAAxF,OAAA,GAAAuF,EAClD,KAAA,OAAAL,SAAAA,EAAAC,GAAA,OAAAG,EAAA9L,MAAAmD,KAAA/D,UAAA,CAAA,CA3BK,GA2BLuE,EAcDgM,oBAAmB,WAAA,IAAAC,EAAA3L,EAAAC,IAAAC,MAAG,SAAAoI,EACpBjB,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAsH,GAAA,cAAAA,EAAApH,KAAAoH,EAAAnH,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAM+I,EAAAnG,OAAA,SAC/B0H,EAAW3K,IAAIgI,EAAK3H,EAAKkM,uBAAwB3I,IAAK,KAAA,EAAA,IAAA,MAAA,OAAAwF,EAAAlG,OAAA,GAAA+F,EAC9D,KAAA,OAAAX,SAAAA,EAAAK,GAAA,OAAA2D,EAAA5P,MAAAmD,KAAA/D,UAAA,CAAA,CANkB,GAMlBuE,EAEDmM,eAAc,WAAA,IAAAC,EAAA9L,EAAAC,IAAAC,MAAG,SAAA6I,EACf1B,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAA8H,GAAA,cAAAA,EAAA5H,KAAA4H,EAAA3H,MAAA,KAAA,EAGS,OADrB0I,EAAa,IAAI/C,EAASvH,GACLuJ,EAAA3G,gBACpB0H,EAAW5C,KAAKC,EAAK3H,EAAKqM,kBADZ,QAC6C9I,IAAK,KAAA,EAAA,IAAA,MAAA,OAAAgG,EAAA1G,OAAA,GAAAwG,EACxE,KAAA,OAAAd,SAAAA,EAAAC,GAAA,OAAA4D,EAAA/P,MAAAmD,KAAA/D,UAAA,CAAA,CAPa,GAObuE,EAEDsM,eAAc,WAAA,IAAAC,EAAAjM,EAAAC,IAAAC,MAAG,SAAAgM,EACf7E,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAgL,GAAA,cAAAA,EAAA9K,KAAA8K,EAAA7K,MAAA,KAAA,EAGS,OADrB0I,EAAa,IAAI/C,EAASvH,GACLyM,EAAA7J,gBACpB0H,EAAWpC,IAAIP,EAAK3H,EAAKqM,kBADX,QAC4C9I,IAAK,KAAA,EAAA,IAAA,MAAA,OAAAkJ,EAAA5J,OAAA,GAAA2J,EACvE,KAAA,OAAAxD,SAAAA,EAAAC,GAAA,OAAAsD,EAAAlQ,MAAAmD,KAAA/D,UAAA,CAAA,CAPa,GAObuE,EAUD6K,cAAa,WAAA,IAAA6B,EAAApM,EAAAC,IAAAC,MAAG,SAAAmM,EACdhF,EACApE,GAAkB,IAAAqJ,EAAAtC,EAAAhH,EAAA,OAAA/C,IAAAkB,MAAA,SAAAoL,GAAA,cAAAA,EAAAlL,KAAAkL,EAAAjL,MAAA,KAAA,EAEoB,GAAhC0I,EAAa,IAAI/C,EAASvH,IAG5B2H,KAAO,SAAUA,GAAG,CAAAkF,EAAAjL,KAAA,EAAA,KAAA,CAAA,OAAAiL,EAAAjL,KAAA,EACT,IAAI6B,SAASkE,EAAIrE,MAAkBrC,OAAM,KAAA,EAAtDqC,EAAIuJ,EAAA1K,KAAA,KAAA,EAAA,OAAA0K,EAAAjK,OAEC0H,SAAAA,EAAW3K,IAAIgI,EAAK3H,EAAK8M,YAAYF,OAADA,EAACtJ,QAAAsJ,EAAAA,EAAMG,OAAQxJ,IAAK,KAAA,EAAA,IAAA,MAAA,OAAAsJ,EAAAhK,OAAA,GAAA8J,EAChE,KAAA,OAAAzD,SAAAA,EAAAC,GAAA,OAAAuD,EAAArQ,MAAAmD,KAAA/D,UAAA,CAAA,CAXY,GAWZuE,EAEDgN,kBAAoB,SAACC,GACnB,IAAIjK,EAOJ,MANwB,iBAAbA,EACTA,EAAWiK,EACFA,aAAiBlG,UAC1B/D,EAAW6C,EAAkBoH,EAAKjN,IAGpC,cAAqBA,EAAKC,WAAU,YAAY+C,EAAQ,uBACzDhD,CAlND,CAACyI,EAAA2B,EAAA5C,GAAA,IAAA3D,EAAAuG,EAAAtG,UA0LA,OA1LAD,EA8IDwI,kBAAA,SAAkBa,GAChB,MAAqBhG,cAAAA,mBAAmB1H,KAAKS,YAAW,aACtDT,KAAKwD,SAAWkE,mBAAmB1H,KAAKwD,UAAY,cAC9BkE,wBAAAA,mBAAmBgG,IAC5CrJ,EAkCDiJ,YAAA,SAAYC,GACV,MAAA,cAAqB7F,mBACnB1H,KAAKS,YACN,gCACC8M,EAAK,UAAa7F,mBAAmB6F,GAAW,KAEnD1N,EAAA+K,EAAA,CAAA,CAAA1K,IAAA,WAAAC,IAzLD,WACE,MAAA,cAAqBuH,mBAAmB1H,KAAKS,YAAW,cAC1D,GAAC,CAAAP,IAAA,YAAAC,IA0GD,WACE,MAAA,cAAqBuH,mBAAmB1H,KAAKS,YAAW,QAC1D,GAAC,CAAAP,IAAA,yBAAAC,IAqCD,WACE,MAAA,cAAqBuH,mBAAmB1H,KAAKS,yBAC3CT,KAAKwD,SAAWkE,mBAAmB1H,KAAKwD,UAAY,cACtD,sBACF,IAAC,EA3J+BlD,GCIbqN,WAAM3F,GACzB,SAAA2F,EAAY5R,GAAc,IAAAyE,EA2DzB,OA1DCA,EAAAwH,EAAAC,KAAAjI,KAAMjE,IAAOiE,MAef4N,iBAAgB,WAAA,IAAA9N,EAAAgB,EAAAC,IAAAC,MAAG,SAAAC,EACjBkH,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAM0B,EAAAE,KAAA,EACzB0I,EAAW5C,KAAKC,EAAK3H,EAAKqN,eAAgB9J,GAAK,KAAA,EAAA,OAAA7B,EAAAkB,OAAAlB,SAAAA,EAAAS,MAAA,KAAA,EAAA,IAAA,MAAA,OAAAT,EAAAmB,OAAA,GAAApC,EAC7D,KAAA,OAAAqC,SAAAA,EAAAsD,GAAA,OAAA9G,EAAAjD,MAAAmD,KAAA/D,UAAA,CAAA,CANe,GAMfuE,EAEDsN,UAAS,WAAA,IAAAjN,EAAAC,EAAAC,IAAAC,MAAG,SAAAqH,EACVF,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAqG,GAAA,cAAAA,EAAAnG,KAAAmG,EAAAlG,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAM8H,EAAAlG,KAAA,EACzB0I,EAAW3K,IAAIgI,EAAK3H,EAAKuN,SAAUhK,GAAK,KAAA,EAAA,OAAAuE,EAAAlF,OAAAkF,SAAAA,EAAA3F,MAAA,KAAA,EAAA,IAAA,MAAA,OAAA2F,EAAAjF,OAAA,GAAAgF,EACtD,KAAA,OAAAxB,SAAAA,EAAA0B,GAAA,OAAA1H,EAAAhE,MAAAmD,KAAA/D,UAAA,CAAA,CANQ,GAMRuE,EAEDwN,WAAU,WAAA,IAAArF,EAAA7H,EAAAC,IAAAC,MAAG,SAAA4H,EACXhF,EACAuE,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAA4G,GAAA,cAAAA,EAAA1G,KAAA0G,EAAAzG,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAMqI,EAAAzG,KAAA,EACzB0I,EAAWpC,IAAIP,EAAQ3H,EAAKuN,SAAQ,IAAInK,EAAUG,GAAK,KAAA,EAAA,OAAA8E,EAAAzF,OAAAyF,SAAAA,EAAAlG,MAAA,KAAA,EAAA,IAAA,MAAA,OAAAkG,EAAAxF,OAAA,GAAAuF,EACrE,KAAA,OAAA,SAAAJ,EAAAC,EAAAK,GAAA,OAAAH,EAAA9L,MAAAmD,KAAA/D,UAAA,CAAA,CAPS,GAOTuE,EAEDyN,gBAAe,WAAA,IAAAxB,EAAA3L,EAAAC,IAAAC,MAAG,SAAAoI,EAChBjB,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAsH,GAAA,cAAAA,EAAApH,KAAAoH,EAAAnH,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAM+I,EAAAnH,KAAA,EACzB0I,EAAW3K,IAAIgI,EAAK3H,EAAKqN,eAAgB9J,GAAK,KAAA,EAAA,OAAAwF,EAAAnG,OAAAmG,SAAAA,EAAA5G,MAAA,KAAA,EAAA,IAAA,MAAA,OAAA4G,EAAAlG,OAAA,GAAA+F,EAC5D,KAAA,OAAAL,SAAAA,EAAAC,GAAA,OAAAyD,EAAA5P,MAAAmD,KAAA/D,UAAA,CAAA,CANc,GAMduE,EAMD0N,GAAE,WAAA,IAAAtB,EAAA9L,EAAAC,IAAAC,MAAG,SAAA6I,EACH1B,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAA8H,GAAA,cAAAA,EAAA5H,KAAA4H,EAAA3H,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAMuJ,EAAA3H,KAAA,EACzB0I,EAAW3K,IAAIgI,EAAK3H,EAAK2N,MAAOpK,GAAK,KAAA,EAAA,OAAAgG,EAAA3G,OAAA2G,SAAAA,EAAApH,MAAA,KAAA,EAAA,IAAA,MAAA,OAAAoH,EAAA1G,OAAA,GAAAwG,EACnD,KAAA,OAAAL,SAAAA,EAAAC,GAAA,OAAAmD,EAAA/P,MAAAmD,KAAA/D,UAAA,CAAA,CANC,GAMDuE,CAzDD,CAAC,OAAAyI,EAAA0E,EAAA3F,GAAAnI,EAAA8N,EAAA,CAAA,CAAAzN,IAAA,UAAAC,IAED,WACE,MAAA,cAAqBuH,mBAAmB1H,KAAKS,WAC/C,GAAC,CAAAP,IAAA,WAAAC,IAED,WACE,OAAUH,KAAKoO,QAAO,QACxB,GAAC,CAAAlO,IAAA,iBAAAC,IAED,WAAkB,IAAA+L,EAChB,OAAUlM,KAAKoO,QAAO,aAAyB,OAAzBlC,EAAYlM,KAAKwD,UAAQ0I,EAAI,cAAY,QACjE,GAAC,CAAAhM,IAAA,QAAAC,IAmCD,WACE,MAAA,cAAqBuH,mBAAmB1H,KAAKS,YAAW,WAC1D,IAAC,EApDgCH,GC3Bd+N,WAAQrG,GAC3B,SAAAqG,EAAYtS,GAAc,IAAAyE,EA0BzB,OAzBCA,EAAAwH,EAAAC,KAAAjI,KAAMjE,IAAOiE,MAWfsO,aAAY,WAAA,IAAAxO,EAAAgB,EAAAC,IAAAC,MAAG,SAAAC,EACbkH,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAM0B,EAAAkB,OAAA,SAC/B0H,EAAW5C,KAAKC,EAAK3H,EAAK+N,WAAYxK,IAAK,KAAA,EAAA,IAAA,MAAA,OAAA7B,EAAAmB,OAAA,GAAApC,EACnD,KAAA,OAAAqC,SAAAA,EAAAsD,GAAA,OAAA9G,EAAAjD,MAAAmD,KAAA/D,UAAA,CAAA,CANW,GAMXuE,EAEDgO,UAAS,WAAA,IAAA3N,EAAAC,EAAAC,IAAAC,MAAG,SAAAqH,EACVF,EACApE,GAAkB,IAAA+G,EAAA,OAAA/J,IAAAkB,MAAA,SAAAqG,GAAA,cAAAA,EAAAnG,KAAAmG,EAAAlG,MAAA,KAAA,EAEoB,OAAhC0I,EAAa,IAAI/C,EAASvH,GAAM8H,EAAAlF,OAAA,SAC/B0H,EAAW3K,IAAIgI,EAAK3H,EAAKiO,UAAW1K,IAAK,KAAA,EAAA,IAAA,MAAA,OAAAuE,EAAAjF,OAAA,GAAAgF,EACjD,KAAA,OAAAxB,SAAAA,EAAA0B,GAAA,OAAA1H,EAAAhE,MAAAmD,KAAA/D,UAAA,CAAA,CANQ,GAMRuE,CAxBD,CAAC,OAAAyI,EAAAoF,EAAArG,GAAAnI,EAAAwO,EAAA,CAAA,CAAAnO,IAAA,aAAAC,IACD,WACE,MAAA,cAAqBuH,mBAAmB1H,KAAKS,YAAW,UAC1D,GAAC,CAAAP,IAAA,YAAAC,IACD,WAAa,IAAA+L,EACX,MAAA,cAAqBxE,mBAAmB1H,KAAKS,YAAW,aACzCyL,OADyCA,EACtDlM,KAAKwD,UAAQ0I,EAAI,aAErB,IAAC,EAXkC5L,qBCA/BoO,EAAY,WAQhB,SAAAA,EAAY3S,EAAgBkH,GAAU,IAAAzC,EAAAR,KAAAA,KAPtC2O,UAAI,EAAA3O,KACJwD,cAAQ,EAAAxD,KACR4D,YAAM,EAAA5D,KACNiD,QAAE,EAAAjD,KACFjE,YAAM,EAAAiE,KACN4O,WAAK,EAGH,IAAAzN,EAAuBrF,EAAOC,EAAQ,kBAA9BgB,EAAIoE,EAAJpE,KAAMT,EAAI6E,EAAJ7E,KACd0D,KAAKiD,GAAKA,EACV,IAAM4L,EAAU1L,EAAA,CACd2L,IAAK,EACLC,IAAK,GACLC,kBAAmB,KAChBjT,EAAOmD,IAEJ+P,EAA8BJ,EAA9BI,YAAgBC,oIAASC,CAAKN,EAAUO,GAEhDrT,EAAOmD,GAAK2P,EACZ7O,KAAKjE,OAASA,EACdO,EAAK0D,KAAKjE,QAEViE,KAAK2O,KAAO,IAAIU,EAAIA,KAACH,GAEM,mBAAhBD,GACTlS,EACE,+EAKJiD,KAAKsP,eACLtP,KAAK2O,KAAKY,GAAG,UAAS,WAAA,IAAAzP,EAAAgB,EAAAC,IAAAC,MAAE,SAAAC,EAAOuO,GAAM,OAAAzO,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EACnC9F,EAAK,kBAC4BmT,EAAgB1T,EACjDkT,CAAYO,GAAQ,SAACE,EAAKC,GACpBD,GACFC,EAAQC,SAEZ,IACApP,EAAK8O,eAAe,KAAA,EAAA,IAAA,MAAA,OAAApN,EAAAmB,OAAA,GAAApC,EACrB,KAAA,OAAA,SAAAqC,GAAA,OAAAxD,EAAAjD,MAAAmD,KAAA/D,UAAA,CAAC,CAToB,IAUtB+D,KAAK2O,KAAKY,GAAG,QAAO,WAAA,IAAA1O,EAAAC,EAAAC,IAAAC,MAAE,SAAAqH,EAAOV,GAAC,OAAA5G,IAAAkB,MAAA,SAAAqG,GAAA,cAAAA,EAAAnG,KAAAmG,EAAAlG,MAAA,KAAA,EAC5B9F,EAAK,cAAeqL,GAAG,KAAA,EAAA,IAAA,MAAA,OAAAW,EAAAjF,OAAA,GAAAgF,EACxB,KAAA,OAAA,SAAAzB,GAAA,OAAA/F,EAAAhE,MAAAmD,KAAA/D,UAAA,CAAC,CAFkB,GAGtB,CAUC,OAVAyS,EAAApK,UAEDgL,aAAA,WAAY,IAAAO,EAAA7P,KACNA,KAAK4O,OACPkB,aAAa9P,KAAK4O,OAEpB5O,KAAK4O,MAAQmB,WAAUjP,EAAAC,IAAAC,MAAC,SAAA4H,IAAA,OAAA7H,IAAAkB,MAAA,SAAA4G,GAAA,cAAAA,EAAA1G,KAAA0G,EAAAzG,MAAA,KAAA,EAAA,OAAAyG,EAAAzG,KAAA,EAChByN,EAAKlB,KAAKqB,MAAK,KAAA,EPAzB9L,EAAQK,QAAQ5E,EAAOsQ,UOCTJ,EAAK5M,IAAI,KAAA,EAAA,IAAA,MAAA,OAAA4F,EAAAxF,OAAA,GAAAuF,EACpB,KAAE5I,KAAKjE,OAAOmD,GAAG8P,oBACnBN,CAAA,CAxDe,GA6DlB,SAASe,EAAgB1T,GACvB,IAAAmU,EAAuBpU,EAAOC,EAAQ,iBAA9BgB,EAAImT,EAAJnT,KAAMT,EAAI4T,EAAJ5T,KACd,OAAO,SAAC6T,EAAMtL,GAMZ,GALAsL,EAAKZ,GAAG,SAAS,SAAsBpS,GACrCJ,EAAK,sCAAuCI,GAC5C0H,EAAK1H,EAAOgT,EACd,IAEIpU,EAAOyH,SAAU,CACnB,IAAM4M,EAAQ,CAAA,yBAA0BrU,EAAOyH,SAAY,KACvDzH,EAAO6H,SACJ7H,EAAOyH,UACVzG,EAAK,0DAEPqT,EAAMpL,KAAI,uBAAwBjJ,EAAO6H,aAI3CuM,EAAKC,MAAMA,EAAMlK,KAAK,MAAM,SAAUwJ,GAChC3T,EAAOyH,UACTlH,EAAK,cAAeP,EAAOyH,UAEzBzH,EAAO6H,QACTtH,EAAK,YAAaP,EAAO6H,QAE3BiB,EAAK6K,EAAKS,EACZ,GACF,CACAtL,EAAK,KAAMsL,GAEf,CC5F0C,IAErBE,EAAS,WAe5B,SAAAA,EAAYtU,GAAoB,IAAAyE,EAAAR,KAAAA,KAdhCsQ,iBAAW,EAeT,IAAQhU,EAASR,EAAOC,EAAQ,eAAxBO,KACR0D,KAAKsQ,YAAc,IAAIC,IAEvB,IR8B2BC,EQ9BrBvN,EAAKjD,KAAKyQ,SAChBnU,EAAK,cAAe2G,GACpBjD,KAAKsQ,YAAYlQ,IAAI6C,EAAI,IAAIyL,EAAa,IAAIpO,EAAOvE,GAASkH,IR4BnCuN,EQ3BZ,SAACvN,GACVA,GAAMzC,EAAK8P,YAAYI,IAAIzN,IAC7BzC,EAAK8P,YAAkB,OAACrN,EAE5B,ERwBFiB,EAAQa,UAAUpF,EAAOsQ,UAAWO,EQvBpC,CAAC,IAAAnM,EAAAgM,EAAA/L,UAgBA,OAhBAD,EAxBOoM,OAAA,SACNjN,EACAI,GAEA,OAAIJ,GAAYI,EACJJ,MAAYI,EAEpBJ,EACF,GAAUA,EAEL,QACRa,EAeDsM,cAAA,SAAc5U,GACZ,IAAQO,EAASR,EAAOC,EAAQ,eAAxBO,KACF2G,EAAKjD,KAAKyQ,OAAO1U,EAAOyH,SAAUzH,EAAO6H,QACzCgN,EAAW5Q,KAAKsQ,YAAYnQ,IAAI8C,GAEtC,GADA3G,EAAK,kBAAmB0D,KAAKsQ,YAAYO,MACrCD,EAEF,OADAtU,EAAK,qBAAsB2G,GACpB2N,EAASjC,KAElB,IAAMmC,EAAS,IAAIpC,EAAa,IAAIpO,EAAOvE,GAASkH,GAIpD,OAHAjD,KAAKsQ,YAAYlQ,IAAI6C,EAAI6N,GACzBxU,EAAK,cAAe2G,GACpB3G,EAAK,kBAAmB0D,KAAKsQ,YAAYO,MAClCC,EAAOnC,MACf0B,CAAA,CA3C2B,GCFjBU,EAAe,SAAChV,GAC3B,OAAOiV,OAAOC,KAAKhH,KAAKC,UAAUnO,GAAS,UAAUmV,UACvD,ECQMnN,EAAO,SAAChI,GAIZ,MAAO,CACLoV,KAJW,IAAIvG,EAAK7O,GAKpBqV,MAJY,IAAIzD,EAAM5R,GAKtBmP,QAJc,IAAImD,EAAQtS,GAM9B,kBAEY,WAMV,SAAAsV,EAAYtV,GAAqB,IAAAyE,EAAAR,KAAAA,KALjCjE,YAAM,EAAAiE,KACN1B,SAAG,EAAA0B,KACKsR,aAAO,EAAAtR,KACPuR,aAAO,EAGbvR,KAAKjE,OAAS,IAAIuE,EAAOvE,GACzBiE,KAAKuR,QAAU,IAAIhB,IACnBvQ,KAAK1B,IAAMyF,EAAK/D,KAAKjE,QACrBiE,KAAKsR,QAAU,IAAIE,EAAUxR,KAAKjE,QVMpCmI,EAAQa,UAAUpF,EAAOuF,QUJT,SAAC1B,GACbhD,EAAKgD,SAAWA,CAClB,IVQwCU,EAAQa,UAAUpF,EAAOyF,MUNrD,SAACxB,GACXpD,EAAKoD,OAASA,CAChB,IVUuCM,EAAQa,UAAUpF,EAAO4F,OURrD,SAAChH,GACViC,EAAKjC,MAAQA,CACf,GACF,CAAC,IAAA8F,EAAAgN,EAAA/M,UAwGA,OAxGAD,EAEDoN,UAAA,SAAUjU,GACRwC,KAAKjE,OAAS,IAAIuE,EAAO9C,IAC1B6G,EAEKN,KAAI,WAAA,IAAA2N,EAAA5Q,EAAAC,IAAAC,MAAV,SAAAC,EAAWzD,GAAY,IAAAmU,EAAA,OAAA5Q,IAAAkB,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,KAAA,EAAA,OAAAF,EAAAE,KAAA,EACOpC,KAAKjE,OAAO6E,UAASuC,EAC5C,CAAA,EAAAnD,KAAKjE,OACLyB,IACH,KAAA,EACFwC,KAAKyR,UAJCE,EAAazP,EAAAS,MAKnB3C,KAAKsR,QAAU,IAAIE,EAAUxR,KAAKjE,QAClCiE,KAAK1B,IAAMyF,EAAK4N,GAAe,KAAA,EAAA,IAAA,MAAA,OAAAzP,EAAAmB,OAAA,GAAApC,EAAAjB,KAChC,KAAA,OAAA,SAAAsD,GAAA,OAAAoO,EAAA7U,MAAAmD,KAAA/D,UAAA,CAAA,CARS,GAqEVoI,EAMAuN,YAAA,SAAY7V,GACV,IAAM8V,EAAO1O,EAAA,CAAA,EAAQnD,KAAKjE,OAAWA,GAC/B+V,EDnIiB,SAAC/V,GAC1B,IAAMyB,EAAM,IAAI8C,EAAOvE,GACvB,OAAOgV,EAAavT,EACtB,CCgIqBuU,CAAYF,GAE7B,GAAIC,IADoBf,EAAa/Q,KAAKjE,QAExC,OAAOiE,KAET,IAAM4Q,EAAW5Q,KAAKuR,QAAQpR,IAAI2R,GAElC,GAAIlB,EAAU,CAEZ,IAAMe,EAAgB,IAAIrR,EAAOuR,GAOjC,OANAjB,EAASa,UAAUE,GAEnBf,EAASpN,SAAWmO,EAAcnO,SAClCoN,EAAShN,OAAS+N,EAAc/N,OAChCgN,EAASrS,MAAQoT,EAAcrT,IAAIC,MACnCqS,EAASnQ,WAAakR,EAAclR,WAC7BmQ,CACT,CAGA,OADA5Q,KAAKuR,QAAQnR,IAAI0R,EAAU,IAAIT,EAAOQ,IAC/B7R,KAAKuR,QAAQpR,IAAI2R,IACzBjS,EAAAwR,EAAA,CAAA,CAAAnR,IAAA,aAAAE,IAxFD,SAAekF,GACTA,IACFtF,KAAKjE,OAAO0E,WAAa6E,EACzBtF,KAAK1B,IAAI6S,KAAK1Q,WAAa6E,EAC3BtF,KAAK1B,IAAI8S,MAAM3Q,WAAa6E,EAC5BtF,KAAK1B,IAAI4M,QAAQzK,WAAa6E,EAElC,GAAC,CAAApF,IAAA,SAAAC,IAED,WACE,OAAOH,KAAKjE,OAAO6H,MACpB,EAAAxD,IAED,SAAWwD,GACT5D,KAAKS,WAAaT,KAAKjE,OAAO0E,WAE9BT,KAAKjE,OAAO6H,OAASA,EAEjB5D,KAAK1B,MACP0B,KAAK1B,IAAI6S,KAAKvN,OAAS5D,KAAKjE,OAAO6H,OACnC5D,KAAK1B,IAAI8S,MAAMxN,OAAS5D,KAAKjE,OAAO6H,OACpC5D,KAAK1B,IAAI4M,QAAQtH,OAAS5D,KAAKjE,OAAO6H,OAE1C,GAAC,CAAA1D,IAAA,WAAAC,IAED,WACE,OAAOH,KAAKjE,OAAOyH,QACpB,EAAApD,IAED,SAAaoD,GACXxD,KAAKS,WAAaT,KAAKjE,OAAO0E,WAC9BT,KAAKjE,OAAOyH,SAAWA,EAEnBxD,KAAK1B,MACP0B,KAAK1B,IAAI6S,KAAK3N,SAAWA,EACzBxD,KAAK1B,IAAI8S,MAAM5N,SAAWA,EAC1BxD,KAAK1B,IAAI4M,QAAQ1H,SAAWA,EAEhC,GAAC,CAAAtD,IAAA,QAAAC,IAED,WAAS,IAAA6R,EACP,OAAkBA,OAAlBA,EAAOhS,KAAKjE,SAALiW,OAAWA,EAAXA,EAAa1T,UAAb0T,EAAAA,EAAkBzT,KAC1B,EAAA6B,IAED,SAAU7B,GACJA,IACFyB,KAAKjE,OAAOuC,IAAIC,MAAQA,EACpByB,KAAK1B,MACP0B,KAAK1B,IAAI6S,KAAK7S,IAAIC,MAAQA,EAC1ByB,KAAK1B,IAAI8S,MAAM9S,IAAIC,MAAQA,EAC3ByB,KAAK1B,IAAI4M,QAAQ5M,IAAIC,MAAQA,GAGnC,GAAC,CAAA2B,IAAA,KAAAC,IACD,WAEE,OAAOH,KAAKsR,QAAQX,cAAc3Q,KAAKjE,OACzC,IAAC,CAhGS"}
|
|
1
|
+
{"version":3,"file":"server.cjs.production.min.js","sources":["../src/utils/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Config/index.ts","../src/utils/Event/index.ts","../src/utils/ResponseError.ts","../src/utils/fetch.ts","../src/utils/Requester/index.ts","../src/auth/index.ts","../src/users/index.ts","../src/tenants/index.ts","../src/db/NileInstance.ts","../src/db/DBManager.ts","../src/utils/Server/index.ts","../src/Server.ts"],"sourcesContent":["import { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nexport default function Logger(\n config: void | Config | ServerConfig,\n ...params: unknown[]\n) {\n return {\n info(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.info('[niledb]', ...params, ...args);\n }\n },\n warn(...args: unknown[]) {\n if (process.env.NODE_ENV !== 'test') {\n // eslint-disable-next-line no-console\n console.warn('[niledb]', ...params, ...args);\n }\n },\n error(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.error('[niledb]', '[ERROR]', ...params, ...args);\n }\n },\n };\n}\n","import 'dotenv/config';\nimport { ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nexport type EnvConfig = {\n logger?: string;\n config?: ServerConfig;\n};\n\nexport const getDatbaseId = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[databaseId]');\n if (config?.databaseId) {\n logger && info(logger, 'config', config.databaseId);\n return String(config?.databaseId);\n }\n logger && info(logger, 'env', process.env.NILEDB_ID);\n return process.env.NILEDB_ID;\n};\nexport const getUsername = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[username]');\n if (config?.user) {\n logger && info(logger, 'config', config.user);\n return String(config?.user);\n }\n logger && info(logger, '.env', process.env.NILEDB_USER);\n return process.env.NILEDB_USER;\n};\n\nexport const getPassword = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const log = logProtector(logger);\n const { info } = Logger(config, '[password]');\n if (config?.password) {\n log && info(logger, 'config', config.password);\n\n return String(config.password);\n }\n\n log && info(logger, '.env', process.env.NILEDB_PASSWORD);\n return process.env.NILEDB_PASSWORD;\n};\n\nexport const getInfoBearer = (cfg: EnvConfig) => {\n return `${getUsername(cfg)}:${getPassword(cfg)}`;\n};\n\nexport const getToken = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[token]');\n if (config?.api?.token) {\n logger && info(logger, 'config', config.api?.token);\n return String(config.api?.token);\n }\n if (process.env.NILEDB_TOKEN) {\n logger && info(logger, '.env', process.env.NILEDB_TOKEN);\n return process.env.NILEDB_TOKEN;\n }\n return undefined;\n};\n\nexport const getDatabaseName = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { warn, info } = Logger(config, '[databaseName]');\n if (config?.databaseName) {\n logger && info(logger, 'config', config.databaseName);\n return String(config.databaseName);\n }\n if (process.env.NILEDB_NAME) {\n logger && info(logger, 'config', process.env.NILEDB_NAME);\n return process.env.NILEDB_NAME;\n }\n warn(\n logger,\n 'config',\n 'No database has been set. Set NILEDB_NAME in .env or call `nile.init()`'\n );\n return null;\n};\n\nexport const getTenantId = (cfg: EnvConfig): string | null => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[tenantId]');\n if (config?.tenantId) {\n logger && info(logger, 'config', config.tenantId);\n return config.tenantId;\n }\n\n if (process.env.NILEDB_TENANT) {\n logger && info(logger, '.env', process.env.NILEDB_TENANT);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\nexport const getBasePath = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n if (basePath) {\n logger && info(logger, 'config', config?.api?.basePath);\n return basePath;\n }\n\n if (process.env.NILEDB_API) {\n logger && info(logger, '.env', process.env.NILEDB_API);\n return `https://${process.env.NILEDB_API}`;\n }\n\n logger && info(logger, 'default', process.env.NILEDB_API);\n return 'https://api.thenile.dev';\n};\n\nexport function getDbHost(cfg: EnvConfig) {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.host]');\n\n if (config?.db && config.db.host) {\n logger && info(logger, 'config', config?.db.host);\n return config.db.host;\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(logger, '.env', process.env.NILEDB_HOST);\n return process.env.NILEDB_HOST;\n }\n\n logger && info(logger, 'default', 'db.thenile.dev');\n return 'db.thenile.dev';\n}\n\nexport function getDbPort(cfg: EnvConfig): number {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.port]');\n if (config?.db?.port && config.db.port != null) {\n logger && info(logger, 'config', config?.db.port);\n return Number(config.db?.port);\n }\n\n if (process.env.NILEDB_PORT) {\n logger && info(logger, 'config', process.env.NILEDB_PORT);\n return Number(process.env.NILEDB_PORT);\n }\n logger && info(logger, 'default', 5432);\n return 5432;\n}\n\n// don't let people accidentally log secrets to production\nconst logProtector = (logger?: string) => {\n return process.env.NODE_ENV === 'development' ||\n process.env.NODE_ENV === 'test'\n ? logger\n : null;\n};\n","import { NilePoolConfig, ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getDatabaseName,\n getDatbaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n} from './envVars';\n\ntype Database = {\n name: string;\n apiHost: string;\n dbHost: string;\n id: string;\n message?: string; // is actually an error\n status: 'READY' | string;\n};\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this._token = token;\n }\n\n public get token(): string | undefined {\n return this._token;\n }\n\n public set token(value: string | undefined) {\n this._token = value;\n }\n}\n\nexport class Config {\n user: string;\n password: string;\n databaseId: string;\n databaseName: string;\n\n debug: boolean;\n\n db: NilePoolConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(config: ServerConfig) {\n const envVarConfig: EnvConfig = {\n config,\n };\n this.databaseId = getDatbaseId(envVarConfig) as string;\n this.user = getUsername(envVarConfig) as string;\n this.password = getPassword(envVarConfig) as string;\n this.databaseName = getDatabaseName(envVarConfig) as string;\n this._tenantId = getTenantId(envVarConfig);\n this.debug = Boolean(config?.debug);\n this._userId = config?.userId;\n\n const basePath = getBasePath(envVarConfig);\n const host = getDbHost(envVarConfig);\n const port = getDbPort(envVarConfig);\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host,\n port,\n database: this.databaseName,\n ...(typeof config?.db === 'object' ? config.db : {}),\n };\n }\n\n configure = async (config: ServerConfig): Promise<Config> => {\n const { info, error } = Logger(config, '[init]');\n const envVarConfig: EnvConfig = {\n config,\n };\n let basePath = getBasePath(envVarConfig);\n let host = getDbHost(envVarConfig);\n const port = getDbPort(envVarConfig);\n\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${basePath}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n info(url.href);\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${getInfoBearer({ config })}`,\n },\n });\n let database: Database;\n const possibleError = res.clone();\n try {\n const json: Database = await res.json();\n if (res.status === 404) {\n info('is the configured databaseName correct?');\n }\n if (json.status && json.status !== 'READY') {\n database = { message: 'Database is not ready yet' } as Database;\n } else {\n database = json;\n }\n } catch (e) {\n const message = await possibleError.text();\n error(message);\n database = { message } as Database;\n }\n if (!host || !this.databaseName || !this.databaseId) {\n info('[fetched database]', database);\n if (process.env.NODE_ENV !== 'TEST') {\n if ('message' in database) {\n if ('statusCode' in database) {\n error(database);\n throw new Error('HTTP error has occured');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please set or remove NILEDB_API, NILEDB_NAME, and NILEDB_HOST in your .env file.'\n );\n }\n }\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n this.databaseId = id;\n this.databaseName = name;\n // gotta do something dumb here\n const dburl = new URL(dbHost);\n const apiurl = new URL(apiHost);\n host = dburl.host;\n basePath = apiurl.origin;\n }\n }\n }\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host,\n port,\n database: this.databaseName,\n ...(typeof config?.db === 'object' ? config.db : {}),\n };\n info('[config set]', this);\n return this;\n };\n}\n","type BusValues = undefined | null | string;\ntype EventFn = (params: BusValues) => void;\nenum Events {\n User = 'userId',\n Tenant = 'tenantId',\n Token = 'token',\n EvictPool = 'EvictPool',\n}\nclass Eventer {\n events: { [key: string]: EventFn[] };\n constructor() {\n this.events = {};\n }\n publish(eventName: string, value: BusValues) {\n // Get all the callback functions of the current event\n const callbackList = this.events[eventName];\n\n // execute each callback function\n if (callbackList) {\n for (const callback of callbackList) {\n callback(value);\n }\n }\n }\n // Subscribe to events\n subscribe(eventName: string, callback: EventFn) {\n // initialize this event\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n\n // store the callback function of the subscriber\n this.events[eventName].push(callback);\n }\n}\n\n// tenantId manager\nconst eventer = new Eventer();\n\nexport const updateTenantId = (tenantId: BusValues) => {\n eventer.publish(Events.Tenant, tenantId);\n};\n\nexport const watchTenantId = (cb: EventFn) =>\n eventer.subscribe(Events.Tenant, cb);\n\nexport const updateUserId = (userId: BusValues) => {\n eventer.publish(Events.User, userId);\n};\n\nexport const watchUserId = (cb: EventFn) => eventer.subscribe(Events.User, cb);\n\nexport const updateToken = (val: BusValues) => {\n eventer.publish(Events.Token, val);\n};\n\nexport const watchToken = (cb: EventFn) => eventer.subscribe(Events.Token, cb);\n\nexport const watchEvictPool = (cb: EventFn) =>\n eventer.subscribe(Events.EvictPool, cb);\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","export class ResponseError {\n response: Response;\n constructor(body?: BodyInit | null, init?: ResponseInit) {\n this.response = new Response(body, init);\n }\n}\n","import { decodeJwt } from 'jose';\n\nimport { ResponseError } from './ResponseError';\nimport { Config } from './Config';\nimport { NileRequest } from './Requester';\nimport { updateTenantId, updateUserId } from './Event';\nimport { getToken } from './Config/envVars';\nimport Logger from './Logger';\n\nexport const X_NILE_TENANT = 'x-nile-tenantId';\nexport const X_NILE_USER_ID = 'x-nile-userId';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config: Config) {\n const cookieTenant = getTokenFromCookie(headers, 'tenantId');\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const { info, error } = Logger(config, '[server]');\n\n const url = `${config.api?.basePath}${path}`;\n const cookieKey = config.api?.cookieKey;\n const headers = new Headers(opts?.headers);\n const basicHeaders = new Headers();\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n basicHeaders.set('Authorization', `Bearer ${token}`);\n } else if (getToken({ config })) {\n basicHeaders.set('Authorization', `Bearer ${getToken({ config })}`);\n }\n }\n\n const tenantId = getTenantFromHttp(headers, config);\n updateTenantId(tenantId);\n const userId = getUserFromHttp(headers, config);\n updateUserId(userId);\n if (url.includes('{tenantId}') && !tenantId) {\n return new ResponseError('tenantId is not set for request', {\n status: 400,\n });\n }\n const useableUrl = url\n .replace('{tenantId}', encodeURIComponent(String(tenantId)))\n .replace('{userId}', encodeURIComponent(String(userId)));\n\n info('[fetch]', useableUrl);\n\n const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n error('[fetch]', '[response]', e);\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n if (typeof response.clone === 'function') {\n info('[fetch]', '[response]', await response.clone().json());\n }\n return response;\n }\n\n let res;\n const errorHandler =\n typeof response?.clone === 'function' ? response.clone() : null;\n let msg = '';\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n if (errorHandler) {\n msg = await errorHandler.text();\n if (msg) {\n error('[fetch]', '[response]', `[status: ${errorHandler.status}]`, msg);\n }\n }\n if (!msg) {\n error('[fetch]', '[response]', e);\n }\n }\n if (msg) {\n return new ResponseError(msg, { status: errorHandler?.status });\n }\n\n if (res && 'message' in res) {\n const { message } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n 'UNHANDLED ERROR'\n );\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\n\nimport { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three optios here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n isEmpty(req) ||\n (isObject(req) && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n post = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('POST', url, req, init);\n };\n\n get = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('GET', url, req, init);\n };\n\n put = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('PUT', url, req, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\nimport { ResponseError } from '../utils/ResponseError';\nimport {\n X_NILE_TENANT,\n X_NILE_USER_ID,\n getTenantFromHttp,\n} from '../utils/fetch';\nimport { updateToken, updateUserId } from '../utils/Event';\nimport { CreateBasicUserRequest, LoginUserResponse } from '../users';\n\nexport interface TenantSSORegistration {\n configUrl: string;\n clientId: string;\n clientSecret: string;\n redirectURI: string;\n emailDomains: Array<string>;\n enabled?: boolean;\n}\n\nexport interface SSOProvider {\n readonly id?: string;\n tenantId?: string;\n provider?: string;\n configUrl: string;\n clientSecret?: string;\n clientId: string;\n redirectURI: string;\n emailDomains?: Array<string>;\n enabled?: boolean;\n}\nexport default class Auth extends Config {\n constructor(config: Config) {\n super(config);\n }\n get loginUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/login`;\n }\n\n login = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers({ 'content-type': 'application/json' });\n const _requester = new Requester(this);\n\n const params =\n req instanceof Request\n ? new URL(req.url).searchParams\n : new URLSearchParams();\n\n const sso = params.get('sso');\n\n if (sso === 'true') {\n const providerRes = await this.listProviders(\n (req as Request).clone(),\n init\n );\n // if you have a provider, log them in\n if (\n providerRes &&\n providerRes.status >= 200 &&\n providerRes.status < 300\n ) {\n const providers = await new Response(providerRes.body).json();\n if (providers.length > 0) {\n if (providers.length > 1) {\n return new Response(JSON.stringify(providers), { status: 200 });\n // a user has to make a choice\n }\n\n // is there a way to do this? probably not.\n headers.set(X_NILE_TENANT, providers[0].tenantId);\n headers.append(\n 'set-cookie',\n `tenantId=${providers[0].tenantId}; path=/; httponly;`\n );\n // const ssoResp = await this.loginSSO(req);\n return new Response(\n JSON.stringify({\n redirectURI: `${this.api.basePath}${this.loginSSOUrl('okta')}`,\n }),\n { status: 200 }\n );\n // make it a client side redirect, because of the headers\n // if there is no provider, require a password.\n }\n }\n }\n\n const res = await _requester.post(req, this.loginUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { tenants } = token;\n const tenant = tenants?.values();\n const tenantId = tenant?.next().value;\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n updateToken(token.token.jwt);\n\n return new Response(JSON.stringify(token), { status: 200, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n loginSSO = (redirectUrl: string) => {\n const ssoLogin = async (\n req: NileRequest<unknown>\n ): NileResponse<Response> => {\n const headers = new Headers();\n const body = await (req as Request).formData();\n const accessToken = (await body.get('access_token')) as string;\n const tenantId = (await body.get('tenantId')) as string;\n const cookie = `${this.api?.cookieKey}=${accessToken}; path=/; samesite=lax; httponly;`;\n updateToken(accessToken);\n headers.append('set-cookie', cookie);\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n headers.set('Location', redirectUrl);\n return new Response(null, {\n headers,\n status: 303,\n });\n };\n return ssoLogin;\n };\n\n loginSSOUrl = (provider: string) => {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }/auth/oidc/providers/${provider}/login`;\n };\n\n get signUpUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users`;\n }\n\n signUp = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers();\n const _requester = new Requester(this);\n const res = await _requester.post(req, this.signUpUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token?.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { id } = token;\n updateToken(token.token?.jwt);\n updateUserId(id);\n headers.set(X_NILE_USER_ID, id);\n headers.append('set-cookie', `userId=${id}; path=/; httponly;`);\n return new Response(JSON.stringify(token), { status: 201, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n updateProviderUrl(providerName: string) {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers/${encodeURIComponent(providerName)}`;\n }\n\n get listTenantProvidersUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers`;\n }\n\n listTenantProviders = async (\n req: NileRequest<void | Headers>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.listTenantProvidersUrl, init);\n };\n\n createProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.post(req, this.updateProviderUrl(providerName), init);\n };\n\n updateProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.put(req, this.updateProviderUrl(providerName), init);\n };\n\n providerUrl(email?: undefined | string) {\n return `/databases/${encodeURIComponent(\n this.databaseId\n )}/tenants/auth/oidc/providers${\n email ? `?email=${encodeURIComponent(email)}` : ''\n }`;\n }\n\n listProviders = async (\n req: NileRequest<void | CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n let body: { email: string } | undefined;\n // this is a get. Get the email from the response body so the request is filtered.\n if (req && 'body' in req) {\n body = await new Response(req.body as BodyInit).json();\n }\n return _requester.get(req, this.providerUrl(body?.email), init);\n };\n\n getSSOCallbackUrl = (param: Headers | string) => {\n let tenantId;\n if (typeof tenantId === 'string') {\n tenantId = param;\n } else if (param instanceof Headers) {\n tenantId = getTenantFromHttp(param, this);\n }\n\n return `/databases/${this.databaseId}/tenants/${tenantId}/auth/oidc/callback`;\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface CreateBasicUserRequest {\n email: string;\n password: string;\n preferredName?: string;\n newTenant?: string;\n}\nexport const LoginUserResponseTokenTypeEnum = {\n AccessToken: 'ACCESS_TOKEN',\n RefreshToken: 'REFRESH_TOKEN',\n IdToken: 'ID_TOKEN',\n} as const;\nexport type LoginUserResponseTokenTypeEnum =\n (typeof LoginUserResponseTokenTypeEnum)[keyof typeof LoginUserResponseTokenTypeEnum];\n\nexport interface LoginUserResponseToken {\n jwt: string;\n maxAge: number;\n type: LoginUserResponseTokenTypeEnum;\n}\nexport interface LoginUserResponse {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n id: string;\n token: LoginUserResponseToken;\n}\nexport interface User {\n id?: string;\n tenants?: Set<string>;\n email?: string;\n preferredName?: string;\n}\n\nexport default class Users extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n get baseUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}`;\n }\n\n get usersUrl() {\n return `${this.baseUrl}/users`;\n }\n\n get tenantUsersUrl() {\n return `${this.baseUrl}/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n\n createTenantUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const _requester = new Requester(this);\n return await _requester.post(req, this.tenantUsersUrl, init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.usersUrl, init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<User>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, init);\n };\n\n listTenantUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.tenantUsersUrl, init);\n };\n\n get meUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/me`;\n }\n\n me = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.meUrl, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface Tenant {\n id: string;\n name?: string;\n}\n\nexport default class Tenants extends Config {\n constructor(config: Config) {\n super(config);\n }\n get tenantsUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants`;\n }\n get tenantUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.post(req, this.tenantsUrl, init);\n };\n\n getTenant = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.tenantUrl, init);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate } from '../types';\nimport Logger from '../utils/Logger';\n\nclass NileDatabase {\n pool: Pool;\n tenantId?: undefined | null | string;\n userId?: undefined | null | string;\n id: string;\n config: Config;\n timer: NodeJS.Timeout | undefined;\n\n constructor(config: Config, id: string) {\n const { warn, info } = Logger(config, '[NileInstance]');\n this.id = id;\n const poolConfig = {\n min: 0,\n max: 10,\n idleTimeoutMillis: 30000,\n ...config.db,\n };\n const { afterCreate, ...remaining } = poolConfig;\n\n config.db = poolConfig;\n this.config = config;\n info(this.config);\n\n this.pool = new Pool(remaining);\n\n if (typeof afterCreate === 'function') {\n warn(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.pool.on('connect', async (client) => {\n info('pool connected');\n const afterCreate: AfterCreate = makeAfterCreate(config);\n afterCreate(client, (err, _client) => {\n if (err) {\n _client.release();\n }\n });\n this.startTimeout();\n });\n this.pool.on('error', async (e) => {\n info('pool failed', e);\n });\n }\n\n startTimeout() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n await this.pool.end();\n evictPool(this.id);\n }, this.config.db.idleTimeoutMillis);\n }\n}\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config): AfterCreate {\n const { warn, info } = Logger(config, '[afterCreate]');\n return (conn, done) => {\n conn.on('error', function errorHandler(error: Error) {\n warn('Connection was terminated by server', error);\n done(error, conn);\n });\n\n if (config.tenantId) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (config.userId) {\n if (!config.tenantId) {\n warn('A user id cannot be set in context without a tenant id');\n }\n query.push(`SET nile.user_id = '${config.userId}'`);\n }\n\n // in this example we use pg driver's connection API\n conn.query(query.join(';'), function (err: Error) {\n if (config.tenantId) {\n info('[tenant id]', config.tenantId);\n }\n if (config.userId) {\n info('[user id]', config.userId);\n }\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\nimport { ServerConfig } from '../types';\n\nimport NileDatabase from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: ServerConfig) {\n const { info } = Logger(config, '[DBManager]');\n this.connections = new Map();\n // add the base one, so you can at least query\n const id = this.makeId();\n info('constructor', id);\n this.connections.set(id, new NileDatabase(new Config(config), id));\n watchEvictPool((id) => {\n if (id && this.connections.has(id)) {\n this.connections.delete(id);\n }\n });\n }\n\n getConnection(config: ServerConfig): Pool {\n const { info } = Logger(config, '[DBManager]');\n const id = this.makeId(config.tenantId, config.userId);\n const existing = this.connections.get(id);\n info('# of instances:', this.connections.size);\n if (existing) {\n info('returning existing', id);\n return existing.pool;\n }\n const newOne = new NileDatabase(new Config(config), id);\n this.connections.set(id, newOne);\n info('created new', id);\n info('# of instances:', this.connections.size);\n return newOne.pool;\n }\n}\n","import { ServerConfig } from '../../types';\nimport { Config } from '../Config';\n\nexport const getServerId = (config: ServerConfig) => {\n const cfg = new Config(config);\n return makeServerId(cfg);\n};\nexport const makeServerId = (config: Config) => {\n return Buffer.from(JSON.stringify(config), 'base64').toString();\n};\n","import { Pool } from 'pg';\n\nimport { ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport Auth from './auth';\nimport Users from './users';\nimport Tenants from './tenants';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { getServerId, makeServerId } from './utils/Server';\n\ntype Api = {\n auth: Auth;\n users: Users;\n tenants: Tenants;\n};\n\nconst init = (config: Config): Api => {\n const auth = new Auth(config);\n const users = new Users(config);\n const tenants = new Tenants(config);\n return {\n auth,\n users,\n tenants,\n };\n};\n\nclass Server {\n config: Config;\n api: Api;\n private manager: DbManager;\n private servers: Map<string, Server>;\n\n constructor(config?: ServerConfig) {\n this.config = new Config(config as ServerConfig);\n this.servers = new Map();\n this.api = init(this.config);\n this.manager = new DbManager(this.config);\n\n watchTenantId((tenantId) => {\n this.tenantId = tenantId;\n });\n\n watchUserId((userId) => {\n this.userId = userId;\n });\n\n watchToken((token) => {\n this.token = token;\n });\n }\n\n setConfig(cfg: Config) {\n this.config = new Config(cfg);\n }\n\n async init(cfg?: Config) {\n const updatedConfig = await this.config.configure({\n ...this.config,\n ...cfg,\n });\n this.setConfig(updatedConfig);\n this.manager = new DbManager(this.config);\n this.api = init(updatedConfig);\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.databaseId = val;\n this.api.auth.databaseId = val;\n this.api.users.databaseId = val;\n this.api.tenants.databaseId = val;\n }\n }\n\n get userId(): string | undefined | null {\n return this.config.userId;\n }\n\n set userId(userId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.auth.userId = this.config.userId;\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.auth.tenantId = tenantId;\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.auth.api.token = token;\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\n // only need to interact with the knex object\n return this.manager.getConnection(this.config);\n }\n\n /**\n * A utility function if you want to manage different NileDB instances yourself\n * returns the global Server object, an existing server that's already been configured,\n * or a new one if the config isn't in the cache\n */\n\n getInstance(config: ServerConfig): Server {\n const _config = { ...this.config, ...config };\n const serverId = getServerId(_config);\n const currentServerId = makeServerId(this.config);\n if (serverId === currentServerId) {\n return this;\n }\n const existing = this.servers.get(serverId);\n\n if (existing) {\n // be sure the config is up to date\n const updatedConfig = new Config(_config);\n existing.setConfig(updatedConfig);\n // propagage special config items\n existing.tenantId = updatedConfig.tenantId;\n existing.userId = updatedConfig.userId;\n existing.token = updatedConfig.api.token;\n existing.databaseId = updatedConfig.databaseId;\n return existing;\n }\n\n this.servers.set(serverId, new Server(_config));\n return this.servers.get(serverId) as unknown as Server;\n }\n}\n\nexport default Server;\n"],"names":["Logger","config","_len","arguments","length","params","Array","_key","info","debug","_console","_len2","args","_key2","console","apply","concat","warn","_console2","_len3","_key3","error","_console3","_len4","_key4","getUsername","cfg","logger","user","String","process","env","NILEDB_USER","getPassword","password","NILEDB_PASSWORD","getToken","_config$api","_config$api2","_config$api3","api","token","NILEDB_TOKEN","getDatabaseName","_Logger5","databaseName","NILEDB_NAME","getBasePath","_config$api4","_config$api5","basePath","NILEDB_API","getDbHost","db","host","NILEDB_HOST","getDbPort","_config$db","_config$db2","port","Number","NILEDB_PORT","Events","ApiConfig","_createClass","_ref","cookieKey","this","_token","key","get","set","value","Config","_config$api$cookieKey2","_this","databaseId","_tenantId","_userId","configure","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_config$api$cookieKey","_Logger","envVarConfig","url","res","database","possibleError","json","message","_database","apiHost","dbHost","name","dburl","apiurl","wrap","_context","prev","next","URL","searchParams","href","fetch","headers","Authorization","sent","clone","status","t0","text","Error","id","origin","_extends","abrupt","stop","_x","NILEDB_ID","tenantId","NILEDB_TENANT","getTenantId","Boolean","userId","ResponseError","body","init","response","Response","eventer","Eventer","events","_proto","prototype","publish","eventName","callbackList","_step","_iterator","_createForOfIteratorHelperLoose","done","callback","subscribe","push","updateTenantId","Tenant","updateUserId","User","updateToken","val","Token","X_NILE_TENANT","X_NILE_USER_ID","getTokenFromCookie","_headers$get","cookie","split","_cookies","cookieParts","_cookie","slice","join","_step2","_iterator2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","decodeJwt","sub","_fetch","_x2","_x3","_fetch2","path","opts","_response$status","basicHeaders","useableUrl","errorHandler","msg","_message","Headers","includes","replace","encodeURIComponent","e","t1","t2","errors","Requester","_Config","call","post","req","request","_callee2","_context2","_x4","_x5","_x6","put","_ref3","_callee3","_context3","_x7","_x8","_x9","_inheritsLoose","rawRequest","_rawRequest","_callee4","method","_init","_context4","_x10","_x11","_x12","_x13","_request","_callee5","_headers","_context5","Request","JSON","stringify","undefined","isEmpty","isObject","Object","values","_x14","_x15","_x16","_x17","Auth","login","_requester","providerRes","providers","_this$api","tenants","tenant","URLSearchParams","listProviders","append","redirectURI","loginSSOUrl","loginUrl","jwt","loginSSO","redirectUrl","ssoLogin","_this$api2","accessToken","formData","provider","_this$tenantId","signUp","_this$api3","_token$token","_token$token2","signUpUrl","listTenantProviders","_ref4","listTenantProvidersUrl","createProvider","_ref5","updateProviderUrl","updateProvider","_ref6","_callee6","_context6","_ref7","_callee7","_body","_context7","providerUrl","email","getSSOCallbackUrl","param","providerName","Users","createTenantUser","tenantUsersUrl","listUsers","usersUrl","updateUser","listTenantUsers","me","meUrl","baseUrl","Tenants","createTenant","tenantsUrl","getTenant","tenantUrl","NileDatabase","pool","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","_objectWithoutPropertiesLoose","_excluded","Pool","startTimeout","on","client","makeAfterCreate","err","_client","release","_this2","clearTimeout","setTimeout","end","EvictPool","_Logger2","conn","query","DBManager","connections","Map","cb","makeId","has","getConnection","existing","size","newOne","makeServerId","Buffer","from","toString","auth","users","Server","manager","servers","DbManager","setConfig","_init2","updatedConfig","getInstance","_config","serverId","getServerId","_this$config"],"mappings":"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"}
|