@niledatabase/server 3.0.0-alpha.9 → 3.0.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.
Files changed (75) hide show
  1. package/dist/express.d.mts +24 -0
  2. package/dist/express.d.ts +24 -0
  3. package/dist/express.js +147 -0
  4. package/dist/express.js.map +1 -0
  5. package/dist/express.mjs +144 -0
  6. package/dist/express.mjs.map +1 -0
  7. package/dist/index.d.mts +323 -0
  8. package/dist/index.d.ts +323 -5
  9. package/dist/index.js +2382 -5
  10. package/dist/index.js.map +1 -0
  11. package/dist/index.mjs +2377 -0
  12. package/dist/index.mjs.map +1 -0
  13. package/package.json +17 -4
  14. package/dist/Api.d.ts +0 -22
  15. package/dist/Server.d.ts +0 -29
  16. package/dist/api/handlers/DELETE.d.ts +0 -3
  17. package/dist/api/handlers/GET.d.ts +0 -3
  18. package/dist/api/handlers/POST.d.ts +0 -3
  19. package/dist/api/handlers/PUT.d.ts +0 -3
  20. package/dist/api/handlers/index.d.ts +0 -8
  21. package/dist/api/routes/auth/callback.d.ts +0 -3
  22. package/dist/api/routes/auth/csrf.d.ts +0 -3
  23. package/dist/api/routes/auth/error.d.ts +0 -3
  24. package/dist/api/routes/auth/index.d.ts +0 -7
  25. package/dist/api/routes/auth/providers.d.ts +0 -3
  26. package/dist/api/routes/auth/session.d.ts +0 -4
  27. package/dist/api/routes/auth/signin.d.ts +0 -33
  28. package/dist/api/routes/auth/signout.d.ts +0 -3
  29. package/dist/api/routes/me/index.d.ts +0 -4
  30. package/dist/api/routes/tenants/GET.d.ts +0 -32
  31. package/dist/api/routes/tenants/POST.d.ts +0 -45
  32. package/dist/api/routes/tenants/[tenantId]/DELETE.d.ts +0 -34
  33. package/dist/api/routes/tenants/[tenantId]/users/GET.d.ts +0 -35
  34. package/dist/api/routes/tenants/[tenantId]/users/POST.d.ts +0 -44
  35. package/dist/api/routes/tenants/[tenantId]/users/PUT.d.ts +0 -29
  36. package/dist/api/routes/tenants/[tenantId]/users/[userId]/DELETE.d.ts +0 -30
  37. package/dist/api/routes/tenants/[tenantId]/users/index.d.ts +0 -4
  38. package/dist/api/routes/tenants/index.d.ts +0 -4
  39. package/dist/api/routes/users/GET.d.ts +0 -34
  40. package/dist/api/routes/users/POST.d.ts +0 -66
  41. package/dist/api/routes/users/[userId]/PUT.d.ts +0 -40
  42. package/dist/api/routes/users/index.d.ts +0 -4
  43. package/dist/api/swagger.d.ts +0 -152
  44. package/dist/api/types.d.ts +0 -18
  45. package/dist/api/utils/auth.d.ts +0 -14
  46. package/dist/api/utils/request.d.ts +0 -4
  47. package/dist/api/utils/routes/apiRoutes.d.ts +0 -14
  48. package/dist/api/utils/routes/defaultRoutes.d.ts +0 -2
  49. package/dist/api/utils/routes/makeRestUrl.d.ts +0 -1
  50. package/dist/api/utils/routes/proxyRoutes.d.ts +0 -12
  51. package/dist/api/utils/routes/urlMatches.d.ts +0 -1
  52. package/dist/auth/index.d.ts +0 -13
  53. package/dist/db/DBManager.d.ts +0 -12
  54. package/dist/db/NileInstance.d.ts +0 -14
  55. package/dist/db/PoolProxy.d.ts +0 -3
  56. package/dist/db/index.d.ts +0 -1
  57. package/dist/db/isUUID.d.ts +0 -1
  58. package/dist/server.cjs.development.js +0 -3976
  59. package/dist/server.cjs.development.js.map +0 -1
  60. package/dist/server.cjs.production.min.js +0 -2
  61. package/dist/server.cjs.production.min.js.map +0 -1
  62. package/dist/server.esm.js +0 -3974
  63. package/dist/server.esm.js.map +0 -1
  64. package/dist/tenants/index.d.ts +0 -21
  65. package/dist/types.d.ts +0 -37
  66. package/dist/users/index.d.ts +0 -52
  67. package/dist/utils/Config/envVars.d.ts +0 -22
  68. package/dist/utils/Config/index.d.ts +0 -47
  69. package/dist/utils/Event/index.d.ts +0 -12
  70. package/dist/utils/Logger.d.ts +0 -7
  71. package/dist/utils/Requester/index.d.ts +0 -23
  72. package/dist/utils/Requester/types.d.ts +0 -88
  73. package/dist/utils/ResponseError.d.ts +0 -4
  74. package/dist/utils/Server/index.d.ts +0 -4
  75. package/dist/utils/fetch.d.ts +0 -9
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("dotenv/config");var e=require("pg"),t=require("jose");function n(){n=function(){return t};var e,t={},r=Object.prototype,a=r.hasOwnProperty,s=Object.defineProperty||function(e,t,n){e[t]=n.value},u="function"==typeof Symbol?Symbol:{},o=u.iterator||"@@iterator",i=u.asyncIterator||"@@asyncIterator",c=u.toStringTag||"@@toStringTag";function f(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{f({},"")}catch(e){f=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var a=Object.create((t&&t.prototype instanceof w?t:w).prototype),u=new _(r||[]);return s(a,"_invoke",{value:T(e,n,u)}),a}function p(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",d="suspendedYield",v="executing",b="completed",g={};function w(){}function y(){}function m(){}var x={};f(x,o,(function(){return this}));var E=Object.getPrototypeOf,k=E&&E(E(P([])));k&&k!==r&&a.call(k,o)&&(x=k);var I=m.prototype=w.prototype=Object.create(x);function N(e){["next","throw","return"].forEach((function(t){f(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function n(r,s,u,o){var i=p(e[r],e,s);if("throw"!==i.type){var c=i.arg,f=c.value;return f&&"object"==typeof f&&a.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,u,o)}),(function(e){n("throw",e,u,o)})):t.resolve(f).then((function(e){c.value=e,u(c)}),(function(e){return n("throw",e,u,o)}))}o(i.arg)}var r;s(this,"_invoke",{value:function(e,a){function s(){return new t((function(t,r){n(e,a,t,r)}))}return r=r?r.then(s,s):s()}})}function T(t,n,r){var a=h;return function(s,u){if(a===v)throw Error("Generator is already running");if(a===b){if("throw"===s)throw u;return{value:e,done:!0}}for(r.method=s,r.arg=u;;){var o=r.delegate;if(o){var i=R(o,r);if(i){if(i===g)continue;return i}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===h)throw a=b,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=v;var c=p(t,n,r);if("normal"===c.type){if(a=r.done?b:d,c.arg===g)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(a=b,r.method="throw",r.arg=c.arg)}}}function R(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,R(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var s=p(a,t.iterator,n.arg);if("throw"===s.type)return n.method="throw",n.arg=s.arg,n.delegate=null,g;var u=s.arg;return u?u.done?(n[t.resultName]=u.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,g):u:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function U(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function P(t){if(t||""===t){var n=t[o];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,s=function n(){for(;++r<t.length;)if(a.call(t,r))return n.value=t[r],n.done=!1,n;return n.value=e,n.done=!0,n};return s.next=s}}throw new TypeError(typeof t+" is not iterable")}return y.prototype=m,s(I,"constructor",{value:m,configurable:!0}),s(m,"constructor",{value:y,configurable:!0}),y.displayName=f(m,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,f(e,c,"GeneratorFunction")),e.prototype=Object.create(I),e},t.awrap=function(e){return{__await:e}},N(S.prototype),f(S.prototype,i,(function(){return this})),t.AsyncIterator=S,t.async=function(e,n,r,a,s){void 0===s&&(s=Promise);var u=new S(l(e,n,r,a),s);return t.isGeneratorFunction(n)?u:u.next().then((function(e){return e.done?e.value:u.next()}))},N(I),f(I,c,"Generator"),f(I,o,(function(){return this})),f(I,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=P,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(U),!t)for(var n in this)"t"===n.charAt(0)&&a.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(r,a){return o.type="throw",o.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var s=this.tryEntries.length-1;s>=0;--s){var u=this.tryEntries[s],o=u.completion;if("root"===u.tryLoc)return r("end");if(u.tryLoc<=this.prev){var i=a.call(u,"catchLoc"),c=a.call(u,"finallyLoc");if(i&&c){if(this.prev<u.catchLoc)return r(u.catchLoc,!0);if(this.prev<u.finallyLoc)return r(u.finallyLoc)}else if(i){if(this.prev<u.catchLoc)return r(u.catchLoc,!0)}else{if(!c)throw Error("try statement without catch or finally");if(this.prev<u.finallyLoc)return r(u.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&a.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var s=r;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var u=s?s.completion:{};return u.type=e,u.arg=t,s?(this.method="next",this.next=s.finallyLoc,g):this.complete(u)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),U(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;U(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:P(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),g}},t}function r(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}function a(e,t,n,r,a,s,u){try{var o=e[s](u),i=o.value}catch(e){return void n(e)}o.done?t(i):Promise.resolve(i).then(r,a)}function s(e){return function(){var t=this,n=arguments;return new Promise((function(r,s){var u=e.apply(t,n);function o(e){a(u,r,s,o,i,"next",e)}function i(e){a(u,r,s,o,i,"throw",e)}o(void 0)}))}}function u(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,r(a.key),a)}}function o(e,t,n){return t&&u(e.prototype,t),n&&u(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}function c(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,f(e,t)}function f(e,t){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},f(e,t)}function l(e,t){if(null==e)return{};var n,r,a={},s=Object.keys(e);for(r=0;r<s.length;r++)t.indexOf(n=s[r])>=0||(a[n]=e[n]);return a}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function h(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return p(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[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 d(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return{info:function(){if(null!=e&&e.debug){for(var t,r=arguments.length,a=new Array(r),s=0;s<r;s++)a[s]=arguments[s];(t=console).info.apply(t,["[niledb]"].concat(n,a))}},warn:function(){if(null!=e&&e.debug){for(var t,r=arguments.length,a=new Array(r),s=0;s<r;s++)a[s]=arguments[s];(t=console).warn.apply(t,["[niledb]"].concat(n,a))}},error:function(){for(var e,t=arguments.length,r=new Array(t),a=0;a<t;a++)r[a]=arguments[a];(e=console).error.apply(e,["[niledb]","[ERROR]"].concat(n,r))}}}var v=function(e){var t=e.config,n=e.logger,r=d(t,"[username]").info;return null!=t&&t.user?(n&&r(n,"config",t.user),String(null==t?void 0:t.user)):(n&&r(n,"NILEDB_USER",process.env.NILEDB_USER),process.env.NILEDB_USER)},b=function(e){var t=e.config;return d(t,"[password]"),null!=t&&t.password?String(t.password):process.env.NILEDB_PASSWORD},g=function(e){var t,n,r,a=e.config,s=e.logger,u=d(a,"[token]").info;return null!=a&&null!=(t=a.api)&&t.token?(s&&u(s,"config",null==(n=a.api)?void 0:n.token),String(null==(r=a.api)?void 0:r.token)):process.env.NILEDB_TOKEN?(s&&u(s,"NILEDB_TOKEN",process.env.NILEDB_TOKEN),process.env.NILEDB_TOKEN):void 0},w=function(e){var t=e.config,n=e.logger,r=d(t,"[databaseName]").info;return null!=t&&t.databaseName?(n&&r(n,"config",t.databaseName),String(t.databaseName)):process.env.NILEDB_NAME?(n&&r(n,"NILEDB_NAME",process.env.NILEDB_NAME),process.env.NILEDB_NAME):null},y=function(e){var t=e.logger;if(process.env.NILEDB_LOCAL){var n=d(e.config,"[local]");return t&&(0,n.info)(t,"NILEDB_LOCAL",process.env.NILEDB_LOCAL),new URL(process.env.NILEDB_LOCAL).href}return"http://localhost:3000"},m=function(e){var t,n,r,a,s=e.config,u=e.logger,o=d(s,"[basePath]").info,i=null==s||null==(t=s.api)?void 0:t.basePath,c="";if(/\/v\d\//.test(String(i))||(c=1===(null==s||null==(n=s.api)?void 0:n.version)?"":"/v"+(null!=(r=null==s||null==(a=s.api)?void 0:a.version)?r:2)),i)return u&&o(u,"config",i),""+i+c;if(process.env.NILEDB_API_URL)return u&&o(u,"NILEDB_API_URL",process.env.NILEDB_API_URL),new URL(process.env.NILEDB_API_URL).href;throw new Error("NILEDB_API_URL is missing.")},x=function(e){var t=e.config,n=e.logger,r=d(t,"[basePath]").info;return process.env.NILEDB_CONFIGURE?(n&&r(n,"NILEDB_CONFIGURE",process.env.NILEDB_CONFIGURE),process.env.NILEDB_CONFIGURE):null!=t&&t.configureUrl?(n&&r(n,"NILEDB_CONFIGURE",t.configureUrl),t.configureUrl):(n&&r(n,"default","https://global.thenile.dev"),"https://global.thenile.dev")};function E(e){var t=e.config,n=e.logger,r=d(t,"[db.host]").info;if(null!=t&&t.db&&t.db.host)return n&&r(n,"config",null==t?void 0:t.db.host),t.db.host;if(process.env.NILEDB_POSTGRES_URL){var a=new URL(process.env.NILEDB_POSTGRES_URL);return n&&r(n,"NILEDB_POSTGRES_URL",a.host),a.host}return process.env.NILEDB_HOST?(n&&r(n,"NILEDB_HOST",process.env.NILEDB_HOST),process.env.NILEDB_HOST):(n&&r(n,"default","db.thenile.dev"),"db.thenile.dev")}function k(e){var t,n,r=e.config,a=e.logger,s=d(r,"[db.port]").info;return null!=r&&null!=(t=r.db)&&t.port&&null!=r.db.port?(a&&s(a,"config",null==r?void 0:r.db.port),Number(null==(n=r.db)?void 0:n.port)):process.env.NILEDB_PORT?(a&&s(a,"config",process.env.NILEDB_PORT),Number(process.env.NILEDB_PORT)):(a&&s(a,"default",5432),5432)}var I,N=["host","port"],S=["host","port"],T=function(){return o((function(e){var t=e.basePath,n=e.cookieKey,r=e.token,a=e.version,s=e.localPath;this.cookieKey=void 0,this.basePath=void 0,this.version=void 0,this.localPath=void 0,this._token=void 0,this.basePath=t,this.cookieKey=n,this.version=a,this._token=r,this.localPath=null!=s?s:"http://localhost:3000"}),[{key:"token",get:function(){return this._token},set:function(e){this._token=e}}])}(),R=function(){return o((function(e,t){var r,a,u,o,c,f=this;this.user=void 0,this.password=void 0,this.databaseId=void 0,this.databaseName=void 0,this.routePrefix=void 0,this.routes=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 e=s(n().mark((function e(t){var r,a,s,u,o,c,p,h,I,S,R,L,U,_,P,O,D,A,B,q,j,G,C,H,M,K,F,W,z,J,V,Y;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(p=d(t,"[init]"),h=p.info,I=p.error,S={config:t},R=null!=(r=t.db)?r:{},L=R.host,U=R.port,_=l(R,N),P=null!=L?L:E(S),O=null!=U?U:k(S),!(P&&f.databaseName&&f.databaseId)){e.next=8;break}return h("Already configured, aborting fetch"),e.abrupt("return",f);case 8:return D=m(S),A=x(S),B=w({config:t,logger:"getInfo"}),q=new URL(A+"/databases/configure"),B&&q.searchParams.set("databaseName",B),h("configuring from",q.href),e.next=16,fetch(q,{headers:{Authorization:"Bearer "+(n={config:t},v(n)+":"+b(n))}});case 16:return C=(j=e.sent).clone(),e.prev=18,e.next=21,j.json();case 21:H=e.sent,404===j.status&&h("is the configured databaseName correct?"),G=H.status&&"READY"!==H.status?{message:"Database is not ready yet"}:H,e.next=33;break;case 26:return e.prev=26,e.t0=e.catch(18),e.next=30,C.text();case 30:I(M=e.sent),G={message:M};case 33:if(h("[fetched database]",G),!("message"in G)){e.next=42;break}if(!("statusCode"in G)){e.next=41;break}throw I(G),new Error("HTTP error has occurred");case 41:throw new Error("Unable to auto-configure. Please remove NILEDB_NAME, NILEDB_API_URL, NILEDB_POSTGRES_URL, and/or NILEDB_HOST from your environment variables.");case 42:"object"==typeof G&&(F=(K=G).apiHost,W=K.dbHost,z=K.name,J=K.id,V=m(S)||F,f.databaseId=J,f.databaseName=z,Y=new URL(W),P=Y.host,D=V);case 43:return null==(a=S.config)||null==(a=a.api)||delete a.basePath,D=m(S),f.api=new T({basePath:D,cookieKey:null!=(s=null==t||null==(u=t.api)?void 0:u.cookieKey)?s:"token",token:g({config:t}),version:null!=(o=null==t||null==(c=t.api)?void 0:c.version)?o:2,localPath:y(S)}),f.db=i({user:f.user,password:f.password,host:P,port:O,database:f.databaseName},_),h("[config set]",f),e.abrupt("return",f);case 49:case"end":return e.stop()}var n}),e,null,[[18,26]])})));return function(t){return e.apply(this,arguments)}}();var p={config:e,logger:t};if(this.user=v(p),this.password=b(p),!this.user)throw new Error("User is required. Set NILEDB_USER as an environment variable or set `user` in the config options.");if(!this.password)throw new Error("Password is required. Set NILEDB_PASSWORD as an environment variable or set `password` in the config options.");this.databaseId=function(e){var t=e.config,n=e.logger,r=d(t,"[databaseId]").info;return null!=t&&t.databaseId?(n&&r(n,"config",t.databaseId),String(null==t?void 0:t.databaseId)):process.env.NILEDB_POSTGRES_URL?new URL(process.env.NILEDB_POSTGRES_URL).pathname.substring(1):(n&&r(n,"env",process.env.NILEDB_ID),process.env.NILEDB_ID)}(p),this.databaseName=w(p),this._tenantId=function(e){var t=e.config,n=e.logger,r=d(t,"[tenantId]").info;return null!=t&&t.tenantId?(n&&r(n,"config",t.tenantId),t.tenantId):process.env.NILEDB_TENANT?(n&&r(n,"NILEDB_TENANT",process.env.NILEDB_TENANT),process.env.NILEDB_TENANT):null}(p),this.debug=Boolean(null==e?void 0:e.debug),this._userId=null==e?void 0:e.userId;var h=m(p),I=null!=(r=null==e?void 0:e.db)?r:{},R=I.host,L=I.port,U=l(I,S),_=null!=R?R:E(p),P=null!=L?L:k(p);this.api=new T({basePath:h,cookieKey:null!=(a=null==e||null==(u=e.api)?void 0:u.cookieKey)?a:"token",token:g({config:e}),version:null!=(o=null==e||null==(c=e.api)?void 0:c.version)?o:2,localPath:y(p)}),this.db=i({user:this.user,password:this.password,host:_,port:P},U),this.databaseName&&(this.db.database=this.databaseName)}),[{key:"tenantId",get:function(){return this._tenantId},set:function(e){this._tenantId=e}},{key:"userId",get:function(){return this._userId},set:function(e){this._userId=e}}])}();!function(e){e.User="userId",e.Tenant="tenantId",e.Token="token",e.EvictPool="EvictPool"}(I||(I={}));var L=new(function(){function e(){this.events=void 0,this.events={}}var t=e.prototype;return t.publish=function(e,t){var n=this.events[e];if(n)for(var r,a=h(n);!(r=a()).done;)(0,r.value)(t)},t.subscribe=function(e,t){this.events[e]||(this.events[e]=[]),this.events[e].push(t)},t.unsubscribe=function(e,t){var n=this.events[e].findIndex((function(e){return e===t}));-1!==n&&this.events[e].splice(n,1)},e}()),U=function(e){L.publish(I.Tenant,e)},_=function(e){L.publish(I.User,e)},P=function(e){return L.subscribe(I.EvictPool,e)},O=function(e){L.publish(I.EvictPool,e)};function D(e){return!!e&&/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}var A=["afterCreate"],B=function(){function t(t,r){var a=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 u=d(t,"[NileInstance]"),o=u.warn,c=u.info;this.id=r;var f=i({min:0,max:10,idleTimeoutMillis:3e4},t.db),p=f.afterCreate,h=l(f,A);t.db=f,this.config=t,c(this.config.db),this.pool=function(e,t){var n=d(t,"[pool]"),r=n.info,a=n.error;return new Proxy(e,{get:function(e,n){if("query"===n){t.db.connectionString||(t.user&&t.password?t.db.database||a("Database name is missing from the config. Call `nile.init()` or set NILEDB_ID in your .env"):a("Cannot connect to the database. User and/or password are missing. Generate them at https://console.thenile.dev"));var s=e[n];return function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r.apply(void 0,t),s.apply(this,t)}}return e[n]}})}(new e.Pool(h),this.config),"function"==typeof p&&o("Providing an pool configuration will stop automatic tenant context setting."),this.startTimeout(),this.pool.on("connect",function(){var e=s(n().mark((function e(r){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:c("pool connected"),q(t)(r,(function(e){var n=d(t,"[after create callback]");e&&((0,n.error)("after create failed",e),O(a.id))})),a.startTimeout();case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),this.pool.on("error",function(){var e=s(n().mark((function e(t){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:c("pool failed",t),a.timer&&clearTimeout(a.timer),O(a.id);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}return t.prototype.startTimeout=function(){var e=this,t=d(this.config,"[NileInstance]").info;this.timer&&clearTimeout(this.timer),this.timer=setTimeout(s(n().mark((function r(){return n().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return t("Pool reached idleTimeoutMillis.",e.id,"evicted after",e.config.db.idleTimeoutMillis,"ms"),n.next=3,e.pool.end((function(){t("Pool end called")}));case 3:O(e.id);case 4:case"end":return n.stop()}}),r)}))),this.config.db.idleTimeoutMillis)},t}();function q(e){var t=d(e,"[afterCreate]"),n=t.warn,r=t.info;return function(t,a){if(t.on("error",(function(e){n("Connection was terminated by server",e),a(e,t)})),D(e.tenantId)){var s=["SET nile.tenant_id = '"+e.tenantId+"'"];D(e.userId)&&(e.tenantId||n("A user id cannot be set in context without a tenant id"),s.push("SET nile.user_id = '"+e.userId+"'")),t.query(s.join(";"),(function(n){1===s.length&&r("[tenant id]",e.tenantId),2===s.length&&r("[user id]",e.userId),a(n,t)}))}a(null,t)}}var j=function(){function e(e){var t=this;this.connections=void 0,this.cleared=void 0,this.poolWatcher=function(e){return function(n){var r=d(e,"[DBManager]").info;n&&t.connections.has(n)&&(r("Removing",n,"from db connection pool."),t.connections.delete(n))}},this.getConnection=function(e){var n=d(e,"[DBManager]").info,r=t.makeId(e.tenantId,e.userId),a=t.connections.get(r);if(n("# of instances:",t.connections.size),a)return n("returning existing",r),a.startTimeout(),a.pool;var s=new B(new R(e),r);return t.connections.set(r,s),n("created new",r),n("# of instances:",t.connections.size),t.cleared&&(t.cleared=!1,P(t.poolWatcher(e))),s.pool},this.clear=function(e){var n;(0,d(e,"[DBManager]").info)("Clearing all connections",t.connections.size),n=t.poolWatcher(e),L.unsubscribe(I.EvictPool,n),t.cleared=!0,t.connections.clear()};var n=d(e,"[DBManager]").info;this.cleared=!1,this.connections=new Map;var r=this.makeId();n("constructor",r),this.connections.set(r,new B(new R(e),r)),P(this.poolWatcher(e))}return e.prototype.makeId=function(e,t){return D(e)&&D(t)?e+":"+t:D(e)?""+e:"base"},e}(),G=function(e){return Buffer.from(JSON.stringify(e),"utf8").toString("base64")},C=process.env.NILEDB_API_URL;function H(e,t){if(!C)throw new Error("An API url is required. Set it via NILEDB_API_URL.");var n=new URLSearchParams(t);return[C,e.substring(1,e.length)].join("/")+(t?"?"+n.toString():"")}var M={ME:H("/me"),USERS:function(e){return H("/users",e?{tenantId:e}:void 0)},USER:function(e){return H("/users/"+e)},TENANTS:H("/tenants"),TENANT:function(e){return H("/tenants/"+e)},SIGNUP:H("/signup"),TENANT_USERS:function(e){return H("/tenants/"+e+"/users")},TENANT_USER:function(e,t){return H("/tenants/"+e+"/users/"+t)},USER_TENANTS:function(e){return H("/users/"+e+"/tenants")}};function K(e,t){return new URL(e).pathname.startsWith(t)}var F=["request"],W=console.log;function z(e,t,n){return J.apply(this,arguments)}function J(){return J=s(n().mark((function e(t,r,a){var s,u,o,c,f,p,h,v,b,g,w,y;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return u=d(i({},a,{debug:null==a?void 0:a.debug}),"[REQUEST]","["+t+"]"),o=u.info,c=u.error,f=r.request,p=l(r,F),h=new URL(f.url),(v=new Headers(f.headers)).set("host",h.host),v.set("niledb-origin",h.origin),v.set("niledb-creds",Buffer.from(process.env.NILEDB_USER+":"+process.env.NILEDB_PASSWORD).toString("base64")),"POST"!==(b=i({},p,{headers:v})).method&&"PUT"!==b.method||(b.body=null!=(g=p.body)?g:f.body,b.duplex="half"),W("["+(null!=(s=b.method)?s:"GET")+"]",t),e.next=12,fetch(t,i({},b)).catch((function(e){return c("An error has occurred in the fetch",e),new Response("An unexpected (most likely configuration) problem has occurred",{status:500})}));case 12:return y="function"==typeof(null==(w=e.sent)?void 0:w.clone)?null==w?void 0:w.clone():null,e.t0=o,e.t1=null==w?void 0:w.status,e.t2=null==w?void 0:w.statusText,e.next=19,null==y?void 0:y.text();case 19:return e.t3=e.sent,(0,e.t0)("[Response]",e.t1,e.t2,e.t3),e.abrupt("return",w);case 22:case"end":return e.stop()}}),e)}))),J.apply(this,arguments)}var V="ME",Y=M[V];function $(e,t){return Q.apply(this,arguments)}function Q(){return Q=s(n().mark((function e(t,r){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r("[GET]",Y),e.next=3,z(Y,t);case 3:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)}))),Q.apply(this,arguments)}function X(e,t){return Z.apply(this,arguments)}function Z(){return Z=s(n().mark((function e(t,r){var a,s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:a=d(i({},r,{debug:r.debug}),"[ROUTES]","["+V+"]"),s=a.info,e.t0=t.method,e.next="GET"===e.t0?4:7;break;case 4:return e.next=6,$({request:t},s);case 6:return e.abrupt("return",e.sent);case 7:return e.abrupt("return",new Response("method not allowed",{status:405}));case 8:case"end":return e.stop()}}),e)}))),Z.apply(this,arguments)}function ee(e,t){return K(t.url,e[V])}function te(e,t){return ne.apply(this,arguments)}function ne(){return(ne=s(n().mark((function e(t,r){var a,s,u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=d(i({},r,{debug:r.debug}),"[nileauth]"),(s=a.info)("checking auth"),s("using session",u=r.api.basePath+"/auth/session"),t.headers.delete("content-length"),e.next=7,z(u,{request:t});case 7:if(o=e.sent){e.next=11;break}return s("no session found"),e.abrupt("return",void 0);case 11:return s("session active"),e.next=14,new Response(o.body).json();case 14:return e.abrupt("return",e.sent);case 15:case"end":return e.stop()}}),e)})))).apply(this,arguments)}var re=function(e,t){this.response=void 0,this.response=new Response(e,t)},ae="niledb-tenant-id",se="niledb-user-id";function ue(e,t){var n,r=null==(n=e.get("cookie"))?void 0:n.split("; "),a={};if(r)for(var s,u=h(r);!(s=u()).done;){var o=s.value.split("="),i=o.slice(1).join("=");a[o[0]]=i}if(r)for(var c,f=h(r);!(c=f()).done;){var l=c.value.split("="),p=l.slice(1).join("=");a[l[0]]=p}return t?a[t]:null}function oe(e,t){var n,r=ue(e,ae);return null!=(n=null!=r?r:null==e?void 0:e.get(ae))?n:null==t?void 0:t.tenantId}function ie(e,n){var r,a=ue(e,n.api.cookieKey);return a?t.decodeJwt(a).sub:null!=(r=null==e?void 0:e.get(se))?r:n.userId}function ce(e,t,n){return fe.apply(this,arguments)}function fe(){return fe=s(n().mark((function e(t,r,a){var s,u,o,c,f,l,p,h,v,b,w,y,m,x,E,k,I,N,S,T,R;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=d(t,"[server]"),f=c.info,l=c.error,p=""+(null==(s=t.api)?void 0:s.basePath)+r,h=null==(u=t.api)?void 0:u.cookieKey,v=new Headers(null==a?void 0:a.headers),(b=new Headers(null==a?void 0:a.headers)).set("content-type","application/json; charset=utf-8"),w=Buffer.from(process.env.NILEDB_USER+":"+process.env.NILEDB_PASSWORD,"utf8").toString("base64"),b.set("niledb-creds",w),v.get("Authorization")||((y=ue(v,h))?b.set("Authorization","Bearer "+y):g({config:t})&&b.set("Authorization","Bearer "+g({config:t}))),m=oe(v,t),U(m),x=ie(v,t),_(x),!p.includes("{tenantId}")||m){e.next=16;break}return e.abrupt("return",new re("tenantId is not set for request",{status:400}));case 16:return E=p.replace("{tenantId}",encodeURIComponent(String(m))).replace("{userId}",encodeURIComponent(String(x))),f("[fetch]",E),e.next=20,fetch(E,i({},a,{headers:b})).catch((function(e){l("[fetch]","[response]",e)}));case 20:if(!((k=e.sent)&&k.status>=200&&k.status<300)){e.next=39;break}if("function"!=typeof k.clone){e.next=38;break}return e.prev=23,e.t0=f,e.next=27,k.clone().json();case 27:e.t1=e.sent,(0,e.t0)("[fetch]","[response]",e.t1),e.next=38;break;case 31:return e.prev=31,e.t2=e.catch(23),e.t3=f,e.next=36,k.clone().text();case 36:e.t4=e.sent,(0,e.t3)("[fetch]","[response]",e.t4);case 38:return e.abrupt("return",k);case 39:if(401!==(null==k?void 0:k.status)){e.next=41;break}return e.abrupt("return",new re("Unauthorized",{status:401}));case 41:if(405!==(null==k?void 0:k.status)){e.next=43;break}return e.abrupt("return",new re("Method not allowed",{status:405}));case 43:return N="function"==typeof(null==k?void 0:k.clone)?k.clone():null,S="",e.prev=45,e.next=48,null==k?void 0:k.json();case 48:I=e.sent,e.next=59;break;case 51:if(e.prev=51,e.t5=e.catch(45),!N){e.next=58;break}return e.next=56,N.text();case 56:(S=e.sent)&&l("[fetch]","[response]","[status: "+N.status+"]",S);case 58:S||l("[fetch]","[response]",e.t5);case 59:if(!S){e.next=61;break}return e.abrupt("return",new re(S,{status:null==N?void 0:N.status}));case 61:if(!I||!("message"in I)){e.next=65;break}return l("[fetch]","[response]","[status: "+(null==N?void 0:N.status)+"]",T=I.message),e.abrupt("return",new re(T,{status:400}));case 65:if(!I||!("errors"in I)){e.next=69;break}return l("[fetch]","[response]","[status: "+(null==N?void 0:N.status)+"]",R=I.errors[0]),e.abrupt("return",new re(R,{status:400}));case 69:return l("[fetch]","[response]","[status: "+(null==N?void 0:N.status)+"]","UNHANDLED ERROR"),e.abrupt("return",new re(null,{status:null!=(o=null==k?void 0:k.status)?o:500}));case 71:case"end":return e.stop()}}),e,null,[[23,31],[45,51]])}))),fe.apply(this,arguments)}function le(e,t,n){return pe.apply(this,arguments)}function pe(){return pe=s(n().mark((function e(t,r,a){var s,u,o,i;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=2;break}return e.abrupt("return",new Response(null,{status:401}));case 2:return r.body=r.request.body,r.method="POST",s=new URL(r.request.url),u=s.searchParams.get("tenantId"),o=null!=u?u:oe(r.request.headers),i=M.USERS(o||void 0),a&&a("[POST]",i),e.next=11,z(i,r);case 11:return e.abrupt("return",e.sent);case 12:case"end":return e.stop()}}),e)}))),pe.apply(this,arguments)}function he(e,t){return de.apply(this,arguments)}function de(){return de=s(n().mark((function e(t,r){var a,s,u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=new URL(t.request.url),s=a.searchParams.get("tenantId"),u=null!=s?s:oe(t.request.headers)){e.next=6;break}return r("[GET]","[ERROR]","No tenant id provided."),e.abrupt("return",new Response(null,{status:404}));case 6:return o=M.TENANT_USERS(u),r("[GET]",o),t.method="GET",e.next=11,z(o,t);case 11:return e.abrupt("return",e.sent);case 12:case"end":return e.stop()}}),e)}))),de.apply(this,arguments)}function ve(e,t,n){return be.apply(this,arguments)}function be(){return be=s(n().mark((function e(t,r,a){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=2;break}return e.abrupt("return",new Response(null,{status:401}));case 2:return r.body=r.request.body,r.method="PUT",s=new URL(r.request.url).pathname.split("/").reverse(),u=M.USER(s[0]),a("[PUT]",u),e.next=9,z(u,r);case 9:return e.abrupt("return",e.sent);case 10:case"end":return e.stop()}}),e)}))),be.apply(this,arguments)}var ge="USERS";function we(e,t){return ye.apply(this,arguments)}function ye(){return ye=s(n().mark((function e(t,r){var a,s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=d(i({},r,{debug:r.debug}),"[ROUTES]","["+ge+"]"),s=a.info,e.next=3,te(t,r);case 3:u=e.sent,e.t0=t.method,e.next="GET"===e.t0?7:"POST"===e.t0?10:"PUT"===e.t0?13:16;break;case 7:return e.next=9,he({request:t},s);case 9:case 12:case 15:return e.abrupt("return",e.sent);case 10:return e.next=12,le(u,{request:t},s);case 13:return e.next=15,ve(u,{request:t},s);case 16:return e.abrupt("return",new Response("method not allowed",{status:405}));case 17:case"end":return e.stop()}}),e)}))),ye.apply(this,arguments)}function me(e,t){return K(t.url,e[ge])}function xe(e,t,n){return Ee.apply(this,arguments)}function Ee(){return Ee=s(n().mark((function e(t,r,a){var s,u,o,i;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=new URL(r.request.url),u=s.pathname.split("/").reverse(),o=u[1]){e.next=4;break}return e.abrupt("return",new Response(null,{status:404}));case 4:return i=""+M.TENANT_USERS(o),a("[GET]","[TENANT_USERS]",i),e.next=8,z(i,r);case 8:return e.abrupt("return",e.sent);case 9:case"end":return e.stop()}}),e)}))),Ee.apply(this,arguments)}function ke(e,t,n){return Ie.apply(this,arguments)}function Ie(){return Ie=s(n().mark((function e(t,r,a){var s,u,o,i;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new URL(r.request.url),u=s.pathname.split("/").reverse(),o=u[1],r.body=JSON.stringify({email:t.email}),r.method="PUT",i=M.TENANT_USERS(o),a("[PUT]",i),e.next=8,z(i,r);case 8:return e.abrupt("return",e.sent);case 9:case"end":return e.stop()}}),e)}))),Ie.apply(this,arguments)}function Ne(e,t,n){return Se.apply(this,arguments)}function Se(){return Se=s(n().mark((function e(t,r,a){var s,u,o,i,c;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=new URL(r.request.url),u=s.pathname.split("/").reverse(),o=u[0],i=u[2]){e.next=4;break}return e.abrupt("return",new Response(null,{status:404}));case 4:return r.method="DELETE",r.body=JSON.stringify({email:o}),c=""+M.TENANT_USER(i,o),a("[DELETE]",c),e.next=10,z(c,r);case 10:return e.abrupt("return",e.sent);case 11:case"end":return e.stop()}}),e)}))),Se.apply(this,arguments)}function Te(e,t,n){return Re.apply(this,arguments)}function Re(){return Re=s(n().mark((function e(t,r,a){var s,u,o,i;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=new URL(r.request.url),u=s.pathname.split("/").reverse(),o=u[1]){e.next=4;break}return e.abrupt("return",new Response(null,{status:404}));case 4:return r.method="PUT",i=""+M.TENANT_USERS(o),a("[PUT]",i),e.next=9,z(i,r);case 9:return e.abrupt("return",e.sent);case 10:case"end":return e.stop()}}),e)}))),Re.apply(this,arguments)}var Le="TENANT_USERS";function Ue(e,t){return _e.apply(this,arguments)}function _e(){return _e=s(n().mark((function e(t,r){var a,s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=d(i({},r,{debug:r.debug}),"[ROUTES]","["+Le+"]"),s=a.info,e.next=3,te(t,r);case 3:if(u=e.sent){e.next=7;break}return s("401"),e.abrupt("return",new Response(null,{status:401}));case 7:e.t0=t.method,e.next="GET"===e.t0?10:"POST"===e.t0?13:"PUT"===e.t0?16:"DELETE"===e.t0?19:22;break;case 10:return e.next=12,xe(u,{request:t},s);case 12:case 15:case 18:case 21:return e.abrupt("return",e.sent);case 13:return e.next=15,ke(u,{request:t},s);case 16:return e.next=18,Te(u,{request:t},s);case 19:return e.next=21,Ne(u,{request:t},s);case 22:return e.abrupt("return",new Response("method not allowed",{status:405}));case 23:case"end":return e.stop()}}),e)}))),_e.apply(this,arguments)}function Pe(e,t){var n=new URL(t.url).pathname.split("/").reverse(),r=n[0],a=n[1],s=e[Le].replace("{tenantId}",n[2]).replace("{userId}",r);return"users"===r&&(s=e[Le].replace("{tenantId}",a)),K(t.url,s)}function Oe(e,t,n){return De.apply(this,arguments)}function De(){return De=s(n().mark((function e(t,r,a){var s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=""+M.USER_TENANTS(t.id),"object"==typeof t&&"user"in t&&t.user&&(s=""+M.USER_TENANTS(t.user.id)),a("[GET]",s),e.next=5,z(s,r);case 5:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)}))),De.apply(this,arguments)}function Ae(e,t,n){return Be.apply(this,arguments)}function Be(){return Be=s(n().mark((function e(t,r,a){var s,u,o,i;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=new URL(r.request.url),u=s.pathname.split("/").reverse(),o=u[0]){e.next=4;break}return e.abrupt("return",new Response(null,{status:404}));case 4:return r.method="DELETE",i=""+M.TENANT(o),a("[DELETE]",i),e.next=9,z(i,r);case 9:return e.abrupt("return",e.sent);case 10:case"end":return e.stop()}}),e)}))),Be.apply(this,arguments)}function qe(e,t,n){return je.apply(this,arguments)}function je(){return je=s(n().mark((function e(t,r,a){var s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r.body=r.request.body,r.method="POST",a("[POST]",s=""+M.TENANTS),e.next=6,z(s,r);case 6:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)}))),je.apply(this,arguments)}var Ge="TENANTS";function Ce(e,t){return He.apply(this,arguments)}function He(){return He=s(n().mark((function e(t,r){var a,s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=d(i({},r,{debug:r.debug}),"[ROUTES]","["+Ge+"]"),s=a.info,e.next=3,te(t,r);case 3:if(u=e.sent){e.next=7;break}return s("401"),e.abrupt("return",new Response(null,{status:401}));case 7:e.t0=t.method,e.next="GET"===e.t0?10:"POST"===e.t0?13:"DELETE"===e.t0?16:19;break;case 10:return e.next=12,Oe(u,{request:t},s);case 12:case 15:case 18:return e.abrupt("return",e.sent);case 13:return e.next=15,qe(u,{request:t},s);case 16:return e.next=18,Ae(u,{request:t},s);case 19:return e.abrupt("return",new Response("method not allowed",{status:405}));case 20:case"end":return e.stop()}}),e)}))),He.apply(this,arguments)}function Me(e,t){return K(t.url,e[Ge])}var Ke={SIGNIN:H("/auth/signin"),PROVIDERS:H("/auth/providers"),SESSION:H("/auth/session"),CSRF:H("/auth/csrf"),CALLBACK:H("/auth/callback"),SIGNOUT:H("/auth/signout"),ERROR:H("/auth/error")},Fe="SIGNIN";function We(e){return ze.apply(this,arguments)}function ze(){return ze=s(n().mark((function e(t){var r,a,s,u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=Ke[Fe],a={method:t.method,headers:t.headers},"POST"===t.method&&("function"==typeof t.clone&&(a.body=t.clone().body),s=new URL(t.url).pathname.split("/").reverse(),r=Ke[Fe]+"/"+s[0]),u=new URL(t.url),o=new URLSearchParams(u.search),r+=""!==o.toString()?"?"+o.toString():"",e.next=8,z(r,i({},a,{request:t}));case 8:return e.abrupt("return",e.sent);case 10:case"end":return e.stop()}}),e)}))),ze.apply(this,arguments)}function Je(e,t){return K(t.url,e[Fe])}function Ve(e,t){return Ye.apply(this,arguments)}function Ye(){return(Ye=s(n().mark((function e(t,r){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",z(Ke.SESSION,{method:t.method,request:t},r));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function $e(e,t){return K(t.url,e.SESSION)}function Qe(e){return Xe.apply(this,arguments)}function Xe(){return(Xe=s(n().mark((function e(t){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",z(Ke.PROVIDERS,{method:t.method,request:t}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function Ze(e,t){return K(t.url,e.PROVIDERS)}function et(e){return tt.apply(this,arguments)}function tt(){return(tt=s(n().mark((function e(t){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",z(Ke.CSRF,{method:t.method,request:t}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function nt(e,t){return K(t.url,e.CSRF)}var rt=console,at=rt.log,st=rt.error;function ut(e){return ot.apply(this,arguments)}function ot(){return ot=s(n().mark((function e(t){var r,a,s,u,o,i;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new URL(t.url).pathname.split("/").reverse(),a=r[0],s=new URL(t.url),u=new URLSearchParams(s.search),o=Ke.CALLBACK+"/"+a+(""!==u.toString()?"?"+u.toString():""),e.next=6,z(o,{request:t,method:t.method}).catch((function(e){st("an error has occurred in callback"),at(e)}));case 6:if(!(null==(i=e.sent)?void 0:i.headers.get("location"))){e.next=10;break}return e.abrupt("return",new Response(null==i?void 0:i.body,{status:302,headers:null==i?void 0:i.headers}));case 10:return e.abrupt("return",new Response(null==i?void 0:i.body,{status:null==i?void 0:i.status,headers:null==i?void 0:i.headers}));case 11:case"end":return e.stop()}}),e)}))),ot.apply(this,arguments)}function it(e,t){return K(t.url,e.CALLBACK)}var ct="SIGNOUT";function ft(e){return lt.apply(this,arguments)}function lt(){return lt=s(n().mark((function e(t){var r,a,s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=Ke[ct],a={method:t.method},"POST"===t.method&&(a.body=t.body,s=new URL(t.url).pathname.split("/").reverse(),r=Ke[ct]+"/"+s[0]),e.next=5,z(r,i({},a,{request:t}));case 5:return e.abrupt("return",e.sent);case 7:case"end":return e.stop()}}),e)}))),lt.apply(this,arguments)}function pt(e,t){return K(t.url,e[ct])}var ht="ERROR";function dt(e){return vt.apply(this,arguments)}function vt(){return(vt=s(n().mark((function e(t){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",z(Ke[ht],{method:t.method,request:t}));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function bt(e,t){return K(t.url,e[ht])}function gt(e,t){var r=d(e,"[serverAuth]").info;return function(){var a=s(n().mark((function a(s){var u,o,i,c,f,l,p,h,d,v,b,g,w,y,m,x,E,k,I;return n().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return i=s.email,c=s.password,r("Obtaining session"),f=new URL(e.api.localPath+"/api/auth/providers"),l=new Request(f,{method:"GET",headers:new Headers({host:f.host})}),n.next=6,t.POST(l);case 6:return p=n.sent,n.next=9,null==p?void 0:p.json();case 9:return h=n.sent,r("Obtaining csrf"),d=new URL(e.api.localPath+"/api/auth/csrf"),v=new Request(d,{method:"GET",headers:new Headers({host:f.host})}),n.next=15,t.POST(v);case 15:return b=n.sent,n.next=18,null==b?void 0:b.json();case 18:if(n.t0=u=n.sent,null==n.t0){n.next=23;break}n.t1=u,n.next=24;break;case 23:n.t1={};case 24:if(g=n.t1.csrfToken,w=h.credentials,y=null==b?void 0:b.headers.get("set-cookie"),m=new URL(w.callbackUrl),y){n.next=31;break}throw new Error("Unable to authenticate REST");case 31:return r("Attempting sign in to",m.href),x=new Request(m,{method:"POST",headers:new Headers({"content-type":"application/json",cookie:y}),body:JSON.stringify({email:i,password:c,csrfToken:g,callbackUrl:w.callbackUrl})}),n.next=35,t.POST(x);case 35:if(k=null==(E=n.sent)?void 0:E.headers.get("set-cookie")){n.next=39;break}throw new Error("authentication failed");case 39:return r("Server login successful"),I=null!=(o=/(nile\.session-token=.+?);/.exec(k))?o:[],n.abrupt("return",new Headers({cookie:[I[1],y].join("; ")}));case 42:case"end":return n.stop()}}),a)})));return function(e){return a.apply(this,arguments)}}()}var wt=function(e){function t(t){return e.call(this,t)||this}c(t,e);var r=t.prototype;return r.rawRequest=function(){var e=s(n().mark((function e(t,r,a,s){var u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return u=i({},a,{body:s,method:t}),e.next=3,ce(this,r,u);case 3:if(!((o=e.sent)instanceof re)){e.next=6;break}return e.abrupt("return",o.response);case 6:return e.abrupt("return",o);case 7:case"end":return e.stop()}}),e,this)})));return function(t,n,r,a){return e.apply(this,arguments)}}(),r.request=function(){var e=s(n().mark((function e(t,r,a,s){var u,o,c,f,l,p,h,d;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(u=new Headers(s?null==s?void 0:s.headers:{}),a instanceof Headers?(o=a.get(ae),c=a.get("cookie"),o&&u.set(ae,o),c&&u.set("cookie",c)):a instanceof Request&&(f=new Headers(null==a?void 0:a.headers),l=f.get(ae),p=f.get("cookie"),l&&u.set(ae,l),p&&u.set("cookie",p)),h=JSON.stringify(a),"GET"!==t){e.next=7;break}h=void 0,e.next=14;break;case 7:if(!(a instanceof Request)){e.next=13;break}return e.next=10,new Response(a.body).text();case 10:h=e.sent,e.next=14;break;case 13:(a instanceof Headers||"{}"===JSON.stringify(a)||a&&"object"==typeof a&&0===Object.values(a).length)&&(h=void 0);case 14:return d=i({},s,{headers:u}),e.next=17,this.rawRequest(t,r,d,h);case 17:return e.abrupt("return",e.sent);case 18:case"end":return e.stop()}}),e,this)})));return function(t,n,r,a){return e.apply(this,arguments)}}(),r.post=function(){var e=s(n().mark((function e(t,r,a){var s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.request("POST",r,t,a);case 2:if(!((s=e.sent)&&s.status>=200&&s.status<300)){e.next=5;break}return e.abrupt("return",s.json());case 5:return e.abrupt("return",s);case 6:case"end":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),r.get=function(){var e=s(n().mark((function e(t,r,a){var s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.request("GET",r,t,a);case 2:if(!((s=e.sent)&&s.status>=200&&s.status<300)){e.next=5;break}return e.abrupt("return",s.json());case 5:return e.abrupt("return",s);case 6:case"end":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),r.put=function(){var e=s(n().mark((function e(t,r,a){var s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.request("PUT",r,t,a);case 2:if(!((s=e.sent)&&s.status>=200&&s.status<300)){e.next=5;break}return e.abrupt("return",s.json());case 5:return e.abrupt("return",s);case 6:case"end":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),r.delete=function(){var e=s(n().mark((function e(t,r,a){var s;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.request("DELETE",r,t,a);case 2:if(!((s=e.sent)&&s.status>=200&&s.status<300)){e.next=5;break}return e.abrupt("return",s.json());case 5:return e.abrupt("return",s);case 6:case"end":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),t}(R),yt=function(e){function t(t,r){var a;return(a=e.call(this,t)||this).headers=void 0,a.createTenant=function(){var e=s(n().mark((function e(t,r){var s,u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s="string"==typeof t?new Request(""+a.api.basePath+a.tenantsUrl,{body:JSON.stringify({name:t}),method:"POST"}):t,u=new wt(a),o=a.handleHeaders(r),e.abrupt("return",u.post(s,a.tenantsUrl,o));case 4:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.getTenant=function(){var e=s(n().mark((function e(t,r){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return"string"==typeof t&&(a.tenantId=t),s=new wt(a),u=a.handleHeaders(r),e.abrupt("return",s.get(t,a.tenantUrl,u));case 4:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.listTenants=function(){var e=s(n().mark((function e(t,r){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new wt(a),u=a.handleHeaders(r),e.abrupt("return",s.get(t,a.tenantListUrl,u));case 3:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.headers=r,a}return c(t,e),t.prototype.handleHeaders=function(e){var t;if(this.headers)return e?(e.headers=new Headers(i({},this.headers,null==(t=e)?void 0:t.headers)),e):e={headers:this.headers}},o(t,[{key:"tenantsUrl",get:function(){return"/tenants"}},{key:"tenantUrl",get:function(){var e;return"/tenants/"+(null!=(e=this.tenantId)?e:"{tenantId}")}},{key:"tenantListUrl",get:function(){var e;return"/users/"+(null!=(e=this.userId)?e:"{userId}")+"/tenants"}}])}(R),mt=function(e){function t(t,r){var a;return(a=e.call(this,t)||this).headers=void 0,a.createUser=function(){var e=s(n().mark((function e(t,r){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new wt(a),u=a.handleHeaders(r),e.next=4,s.post(t,a.usersUrl,u);case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.updateUser=function(){var e=s(n().mark((function e(t,r,s){var u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return u=new wt(a),o=a.handleHeaders(s),e.next=4,u.put(r,a.usersUrl+"/"+t,o);case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})));return function(t,n,r){return e.apply(this,arguments)}}(),a.listUsers=function(){var e=s(n().mark((function e(t,r){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new wt(a),u=a.handleHeaders(r),e.next=4,s.get(t,a.tenantUsersUrl,u);case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.linkUser=function(){var e=s(n().mark((function e(t,r){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new wt(a),u=a.handleHeaders(r),e.next=4,s.put(t,a.tenantUsersUrl,u);case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.tenantUsersDeleteUrl=function(e){var t;return"/tenants/"+(null!=(t=a.tenantId)?t:"{tenantId}")+"/users/"+(null!=e?e:"{userId}")},a.getUserId=function(){var e=s(n().mark((function e(t){var r;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!(t instanceof Request)){e.next=6;break}return e.next=3,new Response(null==t?void 0:t.body).json();case 3:if(!(r=e.sent)){e.next=6;break}return e.abrupt("return",r.id);case 6:if(!("id"in t)){e.next=8;break}return e.abrupt("return",t.id);case 8:return e.abrupt("return",null);case 9:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),a.unlinkUser=function(){var e=s(n().mark((function e(t,r){var s,u,o;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new wt(a),e.next=3,a.getUserId(t);case 3:return u=e.sent,o=a.handleHeaders(r),e.next=7,s.delete(t,a.tenantUsersDeleteUrl(u),o);case 7:return e.abrupt("return",e.sent);case 8:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.me=function(){var e=s(n().mark((function e(t,r){var s,u;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new wt(a),u=a.handleHeaders(r),e.next=4,s.get(t,a.meUrl,u);case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),a.headers=r,a}return c(t,e),t.prototype.handleHeaders=function(e){var t;if(this.headers)return e?(e.headers=new Headers(i({},this.headers,null==(t=e)?void 0:t.headers)),e):e={headers:this.headers}},o(t,[{key:"usersUrl",get:function(){return"/users"}},{key:"tenantUsersUrl",get:function(){var e;return"/tenants/"+(null!=(e=this.tenantId)?e:"{tenantId}")+"/users"}},{key:"meUrl",get:function(){return"/me"}}])}(R),xt=function(){function e(e){var t;this.config=void 0,this.users=void 0,this.tenants=void 0,this.routes=void 0,this.handlers=void 0,this.config=e,this.users=new mt(e),this.tenants=new yt(e),this.routes=i({},(void 0===(t=null==e?void 0:e.routePrefix)&&(t="/api"),{SIGNIN:t+"/auth/signin",PROVIDERS:t+"/auth/providers",SESSION:t+"/auth/session",CSRF:t+"/auth/csrf",CALLBACK:t+"/auth/callback",SIGNOUT:t+"/auth/signout",ERROR:t+"/auth/error",ME:t+"/me",USERS:t+"/users",TENANTS:t+"/tenants",TENANT_USER:t+"/tenants/{tenantId}/users/{userId}",TENANT_USERS:t+"/tenants/{tenantId}/users",SIGNUP:t+"/signup"}),null==e?void 0:e.routes),this.handlers=function(e,t){var r=function(e,t){return function(){var r=s(n().mark((function r(a){return n().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!ee(e,a)){n.next=2;break}return n.abrupt("return",X(a,t));case 2:if(!me(e,a)){n.next=4;break}return n.abrupt("return",we(a,t));case 4:if(!Pe(e,a)){n.next=6;break}return n.abrupt("return",Ue(a,t));case 6:if(!Me(e,a)){n.next=8;break}return n.abrupt("return",Ce(a,t));case 8:if(!$e(e,a)){n.next=10;break}return n.abrupt("return",Ve(a,t));case 10:if(!Je(e,a)){n.next=12;break}return n.abrupt("return",We(a));case 12:if(!Ze(e,a)){n.next=14;break}return n.abrupt("return",Qe(a));case 14:if(!nt(e,a)){n.next=16;break}return n.abrupt("return",et(a));case 16:if(!it(e,a)){n.next=18;break}return n.abrupt("return",ut(a));case 18:if(!pt(e,a)){n.next=20;break}return n.abrupt("return",ft(a));case 20:if(!bt(e,a)){n.next=22;break}return n.abrupt("return",dt(a));case 22:return n.abrupt("return",new Response(null,{status:404}));case 23:case"end":return n.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}()}(e,t),a=function(e,t){return function(){var r=s(n().mark((function r(a){return n().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!Pe(e,a)){n.next=2;break}return n.abrupt("return",Ue(a,t));case 2:if(!me(e,a)){n.next=4;break}return n.abrupt("return",we(a,t));case 4:if(!Me(e,a)){n.next=6;break}return n.abrupt("return",Ce(a,t));case 6:if(!$e(e,a)){n.next=8;break}return n.abrupt("return",Ve(a,t));case 8:if(!Je(e,a)){n.next=10;break}return n.abrupt("return",We(a));case 10:if(!Ze(e,a)){n.next=12;break}return n.abrupt("return",Qe(a));case 12:if(!nt(e,a)){n.next=14;break}return n.abrupt("return",et(a));case 14:if(!it(e,a)){n.next=16;break}return n.abrupt("return",ut(a));case 16:if(!pt(e,a)){n.next=18;break}return n.abrupt("return",ft(a));case 18:return n.abrupt("return",new Response(null,{status:404}));case 19:case"end":return n.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}()}(e,t),u=function(e,t){return function(){var r=s(n().mark((function r(a){return n().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!Pe(e,a)){n.next=2;break}return n.abrupt("return",Ue(a,t));case 2:if(!Me(e,a)){n.next=4;break}return n.abrupt("return",Ce(a,t));case 4:return n.abrupt("return",new Response(null,{status:404}));case 5:case"end":return n.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}()}(e,t),o=function(e,t){return function(){var r=s(n().mark((function r(a){return n().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!Pe(e,a)){n.next=2;break}return n.abrupt("return",Ue(a,t));case 2:if(!me(e,a)){n.next=4;break}return n.abrupt("return",we(a,t));case 4:if(!Me(e,a)){n.next=6;break}return n.abrupt("return",Ce(a,t));case 6:return n.abrupt("return",new Response(null,{status:404}));case 7:case"end":return n.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}()}(e,t);return{GET:r,POST:a,DELETE:u,PUT:o}}(this.routes,e)}return e.prototype.login=function(){var e=s(n().mark((function e(t){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,gt(this.config,this.handlers)(t);case 2:this.headers=e.sent;case 3:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),o(e,[{key:"headers",set:function(e){this.users=new mt(this.config,e),this.tenants=new yt(this.config,e)}}])}(),Et=function(){function e(e){var t=this;this.config=void 0,this.api=void 0,this.manager=void 0,this.servers=void 0,this.config=new R(e,"[initial config]"),this.servers=new Map,this.api=new xt(this.config),this.manager=new j(this.config),L.subscribe(I.Tenant,(function(e){t.tenantId=e})),L.subscribe(I.User,(function(e){t.userId=e})),L.subscribe(I.Token,(function(e){t.token=e}))}var t=e.prototype;return t.setConfig=function(e){this.config=new R(e)},t.init=function(){var e=s(n().mark((function e(t){return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.config.configure(i({},this.config,t));case 2:return this.setConfig(e.sent),this.manager.clear(this.config),this.manager=new j(this.config),this.api=new xt(this.config),e.abrupt("return",this);case 8:case"end":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.getInstance=function(t){var n=i({},this.config,t),r=function(e){var t=new R(e);return G(t)}(n);if(r===G(this.config))return this;var a=this.servers.get(r);if(a){var s=new R(n);return a.setConfig(s),a.tenantId=s.tenantId,a.userId=s.userId,a.token=s.api.token,a.databaseId=s.databaseId,a}var u=new e(n);return this.servers.set(r,u),u},o(e,[{key:"databaseId",set:function(e){e&&(this.config.databaseId=e,this.api.users.databaseId=e,this.api.tenants.databaseId=e)}},{key:"userId",get:function(){return this.config.userId},set:function(e){this.databaseId=this.config.databaseId,this.config.userId=e,this.api&&(this.api.users.userId=this.config.userId,this.api.tenants.userId=this.config.userId)}},{key:"tenantId",get:function(){return this.config.tenantId},set:function(e){this.databaseId=this.config.databaseId,this.config.tenantId=e,this.api&&(this.api.users.tenantId=e,this.api.tenants.tenantId=e)}},{key:"token",get:function(){var e;return null==(e=this.config)||null==(e=e.api)?void 0:e.token},set:function(e){e&&(this.config.api.token=e,this.api&&(this.api.users.api.token=e,this.api.tenants.api.token=e))}},{key:"db",get:function(){return this.manager.getConnection(this.config)}}])}();function kt(e){return It.apply(this,arguments)}function It(){return(It=s(n().mark((function e(t){var r;return n().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new Et(t),e.next=3,r.init();case 3:return e.abrupt("return",e.sent);case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}exports.Nile=kt,exports.Server=Et,exports.default=kt;
2
- //# sourceMappingURL=server.cjs.production.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.cjs.production.min.js","sources":["../src/utils/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Event/index.ts","../src/utils/Config/index.ts","../src/db/isUUID.ts","../src/db/NileInstance.ts","../src/db/PoolProxy.ts","../src/db/DBManager.ts","../src/utils/Server/index.ts","../src/api/utils/routes/makeRestUrl.ts","../src/api/utils/routes/apiRoutes.ts","../src/api/utils/routes/urlMatches.ts","../src/api/utils/request.ts","../src/api/routes/me/index.ts","../src/api/utils/auth.ts","../src/utils/ResponseError.ts","../src/utils/fetch.ts","../src/api/routes/users/POST.ts","../src/api/routes/users/GET.ts","../src/api/routes/users/[userId]/PUT.ts","../src/api/routes/users/index.ts","../src/api/routes/tenants/[tenantId]/users/GET.ts","../src/api/routes/tenants/[tenantId]/users/POST.ts","../src/api/routes/tenants/[tenantId]/users/[userId]/DELETE.ts","../src/api/routes/tenants/[tenantId]/users/PUT.ts","../src/api/routes/tenants/[tenantId]/users/index.ts","../src/api/routes/tenants/GET.ts","../src/api/routes/tenants/[tenantId]/DELETE.ts","../src/api/routes/tenants/POST.ts","../src/api/routes/tenants/index.ts","../src/api/utils/routes/proxyRoutes.ts","../src/api/routes/auth/signin.ts","../src/api/routes/auth/session.ts","../src/api/routes/auth/providers.ts","../src/api/routes/auth/csrf.ts","../src/api/routes/auth/callback.ts","../src/api/routes/auth/signout.ts","../src/api/routes/auth/error.ts","../src/auth/index.ts","../src/utils/Requester/index.ts","../src/tenants/index.ts","../src/users/index.ts","../src/Api.ts","../src/api/utils/routes/defaultRoutes.ts","../src/api/handlers/index.ts","../src/api/handlers/GET.ts","../src/api/handlers/POST.ts","../src/api/handlers/DELETE.ts","../src/api/handlers/PUT.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 // eslint-disable-next-line no-console\n console.error('[niledb]', '[ERROR]', ...params, ...args);\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 getDatabaseId = (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 if (process.env.NILEDB_POSTGRES_URL) {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n return pgUrl.pathname.substring(1);\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, 'NILEDB_USER', 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, 'NILEDB_PASSWORD', 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, 'NILEDB_TOKEN', 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, 'NILEDB_NAME', 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, 'NILEDB_TENANT', process.env.NILEDB_TENANT);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\nexport const getLocal = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n if (process.env.NILEDB_LOCAL) {\n const { info } = Logger(config, '[local]');\n logger && info(logger, 'NILEDB_LOCAL', process.env.NILEDB_LOCAL);\n const apiUrl = new URL(process.env.NILEDB_LOCAL);\n return apiUrl.href;\n }\n return 'http://localhost:3000';\n};\n/**\n * @param cfg various overrides\n * @returns the url for REST to use\n */\nexport const getBasePath = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n let version = '';\n if (!/\\/v\\d\\//.test(String(basePath))) {\n version =\n config?.api?.version === 1 ? '' : `/v${config?.api?.version ?? 2}`;\n }\n if (basePath) {\n logger && info(logger, 'config', basePath);\n return `${basePath}${version}`;\n }\n\n if (process.env.NILEDB_API_URL) {\n logger && info(logger, 'NILEDB_API_URL', process.env.NILEDB_API_URL);\n const apiUrl = new URL(process.env.NILEDB_API_URL);\n return apiUrl.href;\n }\n\n throw new Error('NILEDB_API_URL is missing.');\n};\n\nexport const getControlPlane = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n\n if (process.env.NILEDB_CONFIGURE) {\n logger && info(logger, 'NILEDB_CONFIGURE', process.env.NILEDB_CONFIGURE);\n return process.env.NILEDB_CONFIGURE;\n }\n\n if (config?.configureUrl) {\n logger && info(logger, 'NILEDB_CONFIGURE', config.configureUrl);\n return config.configureUrl;\n }\n\n logger && info(logger, 'default', 'https://global.thenile.dev');\n return 'https://global.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_POSTGRES_URL) {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n logger && info(logger, 'NILEDB_POSTGRES_URL', pgUrl.host);\n return pgUrl.host;\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(logger, 'NILEDB_HOST', 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","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 unsubscribe(eventName: string, callback: EventFn) {\n const toRemove = this.events[eventName].findIndex((cb) => cb === callback);\n if (toRemove !== -1) {\n this.events[eventName].splice(toRemove, 1);\n }\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);\n\nexport const closeEvictPool = (cb: EventFn) =>\n eventer.unsubscribe(Events.EvictPool, cb);\n\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","import { Database, NilePoolConfig, ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getControlPlane,\n getDatabaseName,\n getDatabaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n getLocal,\n} from './envVars';\n\nexport type ConfigRoutes = {\n SIGNIN?: string;\n SESSION?: string;\n PROVIDERS?: string;\n CSRF?: string;\n CALLBACK?: string;\n SIGNOUT?: string;\n ME?: string;\n ERROR?: string;\n};\n\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n public version?: number;\n public localPath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n version,\n localPath,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n version: number;\n localPath: string;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this.version = version;\n this._token = token;\n this.localPath = localPath ?? 'http://localhost:3000';\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 routePrefix?: string;\n routes?: ConfigRoutes;\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, logger?: string) {\n const envVarConfig: EnvConfig = { config, logger };\n this.user = getUsername(envVarConfig) as string;\n this.password = getPassword(envVarConfig) as string;\n if (process.env.NODE_ENV !== 'TEST') {\n if (!this.user) {\n throw new Error(\n 'User is required. Set NILEDB_USER as an environment variable or set `user` in the config options.'\n );\n }\n if (!this.password) {\n throw new Error(\n 'Password is required. Set NILEDB_PASSWORD as an environment variable or set `password` in the config options.'\n );\n }\n }\n\n this.databaseId = getDatabaseId(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, port, ...dbConfig } = config?.db ?? {};\n const configuredHost = host ?? getDbHost(envVarConfig);\n const configuredPort = port ?? getDbPort(envVarConfig);\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n version: config?.api?.version ?? 2,\n localPath: getLocal(envVarConfig),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host: configuredHost,\n port: configuredPort,\n ...dbConfig,\n };\n if (this.databaseName) {\n this.db.database = this.databaseName;\n }\n }\n\n configure = async (config: ServerConfig): Promise<Config> => {\n const { info, error } = Logger(config, '[init]');\n\n const envVarConfig: EnvConfig = {\n config,\n };\n\n const { host, port, ...dbConfig } = config.db ?? {};\n let configuredHost = host ?? getDbHost(envVarConfig);\n const configuredPort = port ?? getDbPort(envVarConfig);\n if (configuredHost && this.databaseName && this.databaseId) {\n info('Already configured, aborting fetch');\n return this;\n }\n\n let basePath = getBasePath(envVarConfig);\n const cp = getControlPlane(envVarConfig);\n\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${cp}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n info('configuring from', 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 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 occurred');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please remove NILEDB_NAME, NILEDB_API_URL, NILEDB_POSTGRES_URL, and/or NILEDB_HOST from your environment variables.'\n );\n }\n }\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n const duckApiHost = getBasePath(envVarConfig) || apiHost; // this needs changed in the control plane response\n this.databaseId = id;\n this.databaseName = name;\n const dburl = new URL(dbHost);\n configuredHost = dburl.host;\n basePath = duckApiHost;\n }\n }\n delete envVarConfig.config?.api?.basePath;\n basePath = getBasePath(envVarConfig);\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n version: config?.api?.version ?? 2,\n localPath: getLocal(envVarConfig),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host: configuredHost,\n port: configuredPort,\n database: this.databaseName,\n ...dbConfig,\n };\n info('[config set]', this);\n return this;\n };\n}\n","export function isUUID(value: string | null | undefined) {\n if (!value) {\n return false;\n }\n const regex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return regex.test(value);\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\nimport { createProxyForPool } from './PoolProxy';\nimport { isUUID } from './isUUID';\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.db);\n\n this.pool = createProxyForPool(new Pool(remaining), this.config);\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) => {\n const { error } = Logger(config, '[after create callback]');\n if (err) {\n error('after create failed', err);\n evictPool(this.id);\n }\n });\n\n this.startTimeout();\n });\n this.pool.on('error', async (e) => {\n info('pool failed', e);\n if (this.timer) {\n clearTimeout(this.timer);\n }\n evictPool(this.id);\n });\n }\n\n startTimeout() {\n const { info } = Logger(this.config, '[NileInstance]');\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n info(\n 'Pool reached idleTimeoutMillis.',\n this.id,\n 'evicted after',\n this.config.db.idleTimeoutMillis,\n 'ms'\n );\n await this.pool.end(() => {\n info('Pool end called');\n // something odd going on here. Without the callback, pool.end() is flakey\n });\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 (isUUID(config.tenantId)) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (isUUID(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 (query.length === 1) {\n info('[tenant id]', config.tenantId);\n }\n if (query.length === 2) {\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 Logger from '../utils/Logger';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AllowAny = any;\n\nexport function createProxyForPool(pool: Pool, config: Config): Pool {\n const { info, error } = Logger(config, '[pool]');\n return new Proxy<Pool>(pool, {\n get(target: AllowAny, property) {\n if (property === 'query') {\n // give connection string a pass for these problems\n if (!config.db.connectionString) {\n if (!config.user || !config.password) {\n error(\n 'Cannot connect to the database. User and/or password are missing. Generate them at https://console.thenile.dev'\n );\n } else if (!config.db.database) {\n error(\n 'Database name is missing from the config. Call `nile.init()` or set NILEDB_ID in your .env'\n );\n }\n }\n const caller = target[property];\n return function query(...args: AllowAny) {\n info(...args);\n // @ts-expect-error - not mine\n const called = caller.apply(this, args);\n return called;\n };\n }\n return target[property];\n },\n }) as Pool;\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { closeEvictPool, watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\nimport { ServerConfig } from '../types';\n\nimport NileDatabase from './NileInstance';\nimport { isUUID } from './isUUID';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n cleared: boolean;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (isUUID(tenantId) && isUUID(userId)) {\n return `${tenantId}:${userId}`;\n }\n if (isUUID(tenantId)) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: ServerConfig) {\n const { info } = Logger(config, '[DBManager]');\n this.cleared = false;\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(this.poolWatcher(config));\n }\n poolWatcher = (config: ServerConfig) => (id: undefined | null | string) => {\n const { info } = Logger(config, '[DBManager]');\n if (id && this.connections.has(id)) {\n info('Removing', id, 'from db connection pool.');\n this.connections.delete(id);\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 existing.startTimeout();\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 // resume listening to the evict pool if a connection is requested.\n if (this.cleared) {\n this.cleared = false;\n watchEvictPool(this.poolWatcher(config));\n }\n return newOne.pool;\n };\n\n clear = (config: ServerConfig) => {\n const { info } = Logger(config, '[DBManager]');\n info('Clearing all connections', this.connections.size);\n closeEvictPool(this.poolWatcher(config));\n this.cleared = true;\n this.connections.clear();\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), 'utf8').toString('base64');\n};\n","const NILEDB_API_URL = process.env.NILEDB_API_URL;\n\nexport function makeRestUrl(path: string, qp?: Record<string, string>) {\n if (!NILEDB_API_URL) {\n throw new Error('An API url is required. Set it via NILEDB_API_URL.');\n }\n const params = new URLSearchParams(qp);\n return `${[NILEDB_API_URL, path.substring(1, path.length)].join('/')}${\n qp ? `?${params.toString()}` : ''\n }`;\n}\n","import { makeRestUrl } from './makeRestUrl';\n\ntype ApiRouteKeys = keyof typeof apiRoutes;\nexport type ApiRoutePaths = (typeof apiRoutes)[ApiRouteKeys];\nexport const apiRoutes = {\n ME: makeRestUrl('/me'),\n USERS: (tenantId?: string) =>\n makeRestUrl('/users', tenantId ? { tenantId } : undefined),\n USER: (userId: string) => makeRestUrl(`/users/${userId}`),\n TENANTS: makeRestUrl('/tenants'),\n TENANT: (tenantId: string) => makeRestUrl(`/tenants/${tenantId}`),\n SIGNUP: makeRestUrl('/signup'),\n TENANT_USERS: (tenantId: string) => makeRestUrl(`/tenants/${tenantId}/users`),\n TENANT_USER: (tenantId: string, userId: string) =>\n makeRestUrl(`/tenants/${tenantId}/users/${userId}`),\n USER_TENANTS: (userId: string) => makeRestUrl(`/users/${userId}/tenants`),\n};\n","export default function urlMatches(requestUrl: string, route: string) {\n const url = new URL(requestUrl);\n return url.pathname.startsWith(route);\n}\n","const { log } = console;\nimport { Config } from '../../utils/Config';\nimport Logger from '../../utils/Logger';\n\nexport default async function request(\n url: string,\n _init: RequestInit & { request: Request },\n config?: Config\n) {\n const { info, error } = Logger(\n { ...config, debug: config?.debug },\n '[REQUEST]',\n `[${url}]`\n );\n const { request, ...init } = _init;\n const requestUrl = new URL(request.url);\n const updatedHeaders = new Headers(request.headers);\n\n updatedHeaders.set('host', requestUrl.host);\n updatedHeaders.set('niledb-origin', requestUrl.origin);\n updatedHeaders.set(\n 'niledb-creds',\n Buffer.from(\n `${process.env.NILEDB_USER}:${process.env.NILEDB_PASSWORD}`\n ).toString('base64')\n );\n const params = { ...init, headers: updatedHeaders };\n if (params.method === 'POST' || params.method === 'PUT') {\n params.body = init.body ?? request.body;\n // @ts-expect-error - its there\n params.duplex = 'half';\n }\n\n log(`[${params.method ?? 'GET'}]`, url);\n const res = await fetch(url, { ...params }).catch((e) => {\n error('An error has occurred in the fetch', e);\n return new Response(\n 'An unexpected (most likely configuration) problem has occurred',\n { status: 500 }\n );\n });\n const loggingRes = typeof res?.clone === 'function' ? res?.clone() : null;\n info('[Response]', res?.status, res?.statusText, await loggingRes?.text());\n return res;\n}\n","import Logger from '../../../utils/Logger';\nimport { Routes } from '../../types';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\n\nconst key = 'ME';\nconst url = apiRoutes[key];\n\n/**\n * @swagger\n * /api/me:\n * get:\n * summary: Identify the principal\n * description: Returns information about the principal associated with the session\n * provided\n * operationId: me\n * responses:\n * \"200\":\n * description: Identified user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nasync function GET(\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n log('[GET]', url);\n const res = await request(url, init);\n return res;\n}\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug },\n '[ROUTES]',\n `[${key}]`\n );\n\n switch (request.method) {\n case 'GET':\n return await GET({ request }, info);\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Config } from '../../utils/Config';\nimport Logger from '../../utils/Logger';\n\nimport request from './request';\n\nexport type ActiveSession = {\n id: string;\n email: string;\n expires: Date;\n user?: {\n id: string;\n name: string;\n image: string;\n email: string;\n emailVerified: void | Date;\n };\n};\nexport default async function auth(\n req: Request,\n config: Config\n): Promise<void | ActiveSession> {\n const { info } = Logger({ ...config, debug: config.debug }, '[nileauth]');\n info('checking auth');\n\n const sessionUrl = `${config.api.basePath}/auth/session`;\n info('using session', sessionUrl);\n // handle the pass through with posts\n req.headers.delete('content-length');\n\n const res = await request(sessionUrl, { request: req });\n if (!res) {\n info('no session found');\n return undefined;\n }\n info('session active');\n return await new Response(res.body).json();\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 = 'niledb-tenant-id';\nexport const X_NILE_USER_ID = 'niledb-user-id';\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, X_NILE_TENANT);\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(opts?.headers);\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n\n const creds = Buffer.from(\n `${process.env.NILEDB_USER}:${process.env.NILEDB_PASSWORD}`,\n 'utf8'\n ).toString('base64');\n\n basicHeaders.set('niledb-creds', creds);\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 try {\n info('[fetch]', '[response]', await response.clone().json());\n } catch (e) {\n info('[fetch]', '[response]', await response.clone().text());\n }\n }\n return response;\n }\n if (response?.status === 401) {\n return new ResponseError('Unauthorized', { status: 401 });\n }\n if (response?.status === 405) {\n return new ResponseError('Method not allowed', { status: 405 });\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 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 { getTenantFromHttp } from '../../../utils/fetch';\nimport { ActiveSession } from '../../utils/auth';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n/**\n * @swagger\n * /api/users:\n * post:\n * tags:\n * - users\n * summary: Creates a user\n * description: Creates a user in the database\n * operationId: createUser\n * parameters:\n * - name: tenantId\n * description: A tenant id to add the user to when they are created\n * in: query\n * schema:\n * type: string\n * - name: newTenantName\n * description: A tenant name to create, then the user to when they are created\n * in: query\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * The `newTenant` is optional; if provided, it is used as the name of a new tenant record associated with the newly created user.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * Create User Request with Tenant:\n * summary: Creates a user and a new tenant for that user\n * description: Create User Request with Tenant\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * newTenant: My Sandbox\n * responses:\n * \"201\":\n * description: User created\n * content:\n * application/json:\n * schema:\n * $ref: \"#/components/schemas/User\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nexport async function POST(\n session: void | ActiveSession,\n init: RequestInit & { request: Request },\n log?: (...args: string[]) => void\n) {\n if (!session) {\n return new Response(null, { status: 401 });\n }\n init.body = init.request.body;\n init.method = 'POST';\n const yurl = new URL(init.request.url);\n const tenantId = yurl.searchParams.get('tenantId');\n const tenant = tenantId ?? getTenantFromHttp(init.request.headers);\n\n const url = apiRoutes.USERS(tenant ? tenant : undefined);\n log && log('[POST]', url);\n\n return await request(url, init);\n}\n","import { getTenantFromHttp } from '../../../utils/fetch';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/users:\n * get:\n * tags:\n * - users\n * summary: lists users in the tenant\n * description: Returns information about the users within the tenant\n * provided. You can also pass the a `niledb-tenant-id` in the header or in a cookie.\n * operationId: listUsers\n * parameters:\n * - name: tenantId\n * in: query\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: A list of users\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: '#/components/schemas/TenantUser'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function GET(\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n const yurl = new URL(init.request.url);\n const tenantId = yurl.searchParams.get('tenantId');\n const tenant = tenantId ?? getTenantFromHttp(init.request.headers);\n\n if (!tenant) {\n log('[GET]', '[ERROR]', 'No tenant id provided.');\n return new Response(null, { status: 404 });\n }\n const url = apiRoutes.TENANT_USERS(tenant);\n log('[GET]', url);\n init.method = 'GET';\n return await request(url, init);\n}\n","import { apiRoutes } from '../../../utils/routes/apiRoutes';\nimport fetch from '../../../utils/request';\nimport { ActiveSession } from '../../../utils/auth';\n\n/**\n * @swagger\n * /api/users/{userid}:\n * put:\n * tags:\n * - users\n * summary: update a user\n * description: updates a user within the tenant\n * operationId: updateUser\n * parameters:\n * - name: userid\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * Update a user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/UpdateUserRequest'\n * responses:\n * \"200\":\n * description: An updated user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nexport async function PUT(\n session: void | ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n if (!session) {\n return new Response(null, { status: 401 });\n }\n init.body = init.request.body;\n init.method = 'PUT';\n\n // update the user\n\n const [userId] = new URL(init.request.url).pathname.split('/').reverse();\n\n const url = apiRoutes.USER(userId);\n\n log('[PUT]', url);\n\n return await fetch(url, init);\n}\n","import { Routes } from '../../types';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport auth from '../../utils/auth';\nimport { Config } from '../../../utils/Config';\nimport Logger from '../../../utils/Logger';\n\nimport { POST } from './POST';\nimport { GET } from './GET';\nimport { PUT } from './[userId]/PUT';\n\nconst key = 'USERS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug },\n '[ROUTES]',\n `[${key}]`\n );\n const session = await auth(request, config);\n\n switch (request.method) {\n case 'GET':\n return await GET({ request }, info);\n case 'POST':\n return await POST(session, { request }, info);\n case 'PUT':\n return await PUT(session, { request }, info);\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport { ActiveSession } from '../../../../utils/auth';\nimport request from '../../../../utils/request';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * get:\n * tags:\n * - users\n * summary: List tenant users\n * description: Lists users that are associated with the specified tenant.\n * operationId: listTenantUsers\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: Users found\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: '#/components/schemas/User'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function GET(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n\n const url = `${apiRoutes.TENANT_USERS(tenantId)}`;\n log('[GET]', '[TENANT_USERS]', url);\n return await request(url, init);\n}\n","import { ActiveSession } from '../../../../utils/auth';\nimport fetch from '../../../../utils/request';\nimport { apiRoutes } from '../../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * post:\n * tags:\n * - users\n * summary: Create a user in a tenant\n * description: Creates a new user and associates that user with the specified\n * tenant.\n * operationId: createTenantUser\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * responses:\n * \"201\":\n * description: User created\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n */\nexport async function POST(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n init.body = JSON.stringify({ email: session.email });\n init.method = 'PUT';\n const url = apiRoutes.TENANT_USERS(tenantId);\n log('[PUT]', url);\n\n return await fetch(url, init);\n}\n","import { apiRoutes } from '../../../../../utils/routes/apiRoutes';\nimport fetch from '../../../../../utils/request';\nimport { ActiveSession } from '../../../../../utils/auth';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users/{email}:\n * delete:\n * tags:\n * - tenants\n * summary: removes a user from a tenant\n * description: removes an associated user from a specified\n * tenant.\n * operationId: unlinkUser \n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * - name: email \n * in: path\n * required: true\n * schema:\n * type: string\n \n * responses:\n * \"204\":\n * description: User removed\n */\n\nexport async function DELETE(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n const yurl = new URL(init.request.url);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [userId, _, tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n\n init.method = 'DELETE';\n init.body = JSON.stringify({ email: userId });\n const url = `${apiRoutes.TENANT_USER(tenantId, userId)}`;\n log('[DELETE]', url);\n\n return await fetch(url, init);\n}\n","import { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport fetch from '../../../../utils/request';\nimport { ActiveSession } from '../../../../utils/auth';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * put:\n * tags:\n * - tenants\n * summary: associates an existing user with the tenant\n * operationId: linkUser\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |\n * The email of the user you want to add to a tenant.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/AssociateUserRequest'\n * responses:\n * \"201\":\n * description: add user to tenant\n */\n\nexport async function PUT(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n\n init.method = 'PUT';\n const url = `${apiRoutes.TENANT_USERS(tenantId)}`;\n log('[PUT]', url);\n\n return await fetch(url, init);\n}\n","import { Config } from '../../../../../utils/Config';\nimport urlMatches from '../../../../utils/routes/urlMatches';\nimport { Routes } from '../../../../types';\nimport auth from '../../../../utils/auth';\nimport Logger from '../../../../../utils/Logger';\n\nimport { GET } from './GET';\nimport { POST } from './POST';\nimport { DELETE } from './[userId]/DELETE';\nimport { PUT } from './PUT';\n\nconst key = 'TENANT_USERS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug },\n '[ROUTES]',\n `[${key}]`\n );\n const session = await auth(request, config);\n\n if (!session) {\n info('401');\n return new Response(null, { status: 401 });\n }\n\n switch (request.method) {\n case 'GET':\n return await GET(session, { request }, info);\n case 'POST':\n return await POST(session, { request }, info);\n case 'PUT':\n return await PUT(session, { request }, info);\n case 'DELETE':\n return await DELETE(session, { request }, info);\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n const url = new URL(request.url);\n const [userId, possibleTenantId, tenantId] = url.pathname\n .split('/')\n .reverse();\n let route = configRoutes[key]\n .replace('{tenantId}', tenantId)\n .replace('{userId}', userId);\n if (userId === 'users') {\n route = configRoutes[key].replace('{tenantId}', possibleTenantId);\n }\n return urlMatches(request.url, route);\n}\n","import { ActiveSession } from '../../utils/auth';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants:\n * get:\n * tags:\n * - tenants\n * summary: list tenants by user\n * description: Creates a user in the database\n * operationId: listTenants\n * responses:\n * \"200\":\n * description: a list of tenants\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: \"#/components/schemas/Tenant\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function GET(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n let url = `${apiRoutes.USER_TENANTS(session.id)}`;\n if (typeof session === 'object' && 'user' in session && session.user) {\n url = `${apiRoutes.USER_TENANTS(session.user.id)}`;\n }\n log('[GET]', url);\n\n const res = await request(url, init);\n return res;\n}\n","import { ActiveSession } from '../../../utils/auth';\nimport fetch from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * delete:\n * tags:\n * - tenants\n * summary: Deletes a tenant.\n * operationId: deleteTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"204\":\n * description: Tenant deleted\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function DELETE(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n\n init.method = 'DELETE';\n const url = `${apiRoutes.TENANT(tenantId)}`;\n log('[DELETE]', url);\n\n return await fetch(url, init);\n}\n","import { ActiveSession } from '../../utils/auth';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants:\n * post:\n * tags:\n * - tenants\n * summary: Create a tenant\n * description: Creates a new tenant in a database.\n * operationId: createTenant\n * requestBody:\n * description: A wrapper for the tenant name.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateTenantRequest'\n * examples:\n * Create Tenant Request:\n * summary: Creates a named tenant\n * description: Create Tenant Request\n * value:\n * name: My Sandbox\n * responses:\n * \"201\":\n * description: Tenant created\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Database not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function POST(\n session: ActiveSession,\n init: RequestInit & { request: Request },\n log: (...args: string[]) => void\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const url = `${apiRoutes.TENANTS}`;\n log('[POST]', url);\n\n return await request(url, init);\n}\n","import { Config } from '../../../utils/Config';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\nimport auth from '../../utils/auth';\nimport Logger from '../../../utils/Logger';\n\nimport { GET } from './GET';\nimport { DELETE } from './[tenantId]/DELETE';\nimport { POST } from './POST';\n\nconst key = 'TENANTS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug },\n '[ROUTES]',\n `[${key}]`\n );\n const session = await auth(request, config);\n\n if (!session) {\n info('401');\n return new Response(null, { status: 401 });\n }\n\n switch (request.method) {\n case 'GET':\n return await GET(session, { request }, info);\n case 'POST':\n return await POST(session, { request }, info);\n case 'DELETE':\n return await DELETE(session, { request }, info);\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { makeRestUrl } from './makeRestUrl';\n\nexport const proxyRoutes = {\n SIGNIN: makeRestUrl('/auth/signin'),\n PROVIDERS: makeRestUrl('/auth/providers'),\n SESSION: makeRestUrl('/auth/session'),\n CSRF: makeRestUrl('/auth/csrf'),\n CALLBACK: makeRestUrl('/auth/callback'),\n SIGNOUT: makeRestUrl('/auth/signout'),\n ERROR: makeRestUrl('/auth/error'),\n};\n\ntype ProxyKeys = keyof typeof proxyRoutes;\n\nexport type ProxyPaths = (typeof proxyRoutes)[ProxyKeys];\n","/**\n * @swagger\n * /api/auth/signin:\n * get:\n * tags:\n * - authentication\n * summary: lists users in the tenant\n * description: Returns information about the users within the tenant\n * provided\n * operationId: signin\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: A list of users\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nimport { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nconst key = 'SIGNIN';\n\nexport default async function route(req: Request) {\n let url = proxyRoutes[key];\n\n const init: RequestInit = {\n method: req.method,\n headers: req.headers,\n };\n if (req.method === 'POST') {\n if (typeof req.clone === 'function') {\n init.body = req.clone().body;\n }\n const [provider] = new URL(req.url).pathname.split('/').reverse();\n\n url = `${proxyRoutes[key]}/${provider}`;\n }\n\n const passThroughUrl = new URL(req.url);\n const params = new URLSearchParams(passThroughUrl.search);\n\n url = `${url}${params.toString() !== '' ? `?${params.toString()}` : ''}`;\n\n const res = await request(url, { ...init, request: req });\n\n return res;\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes.SESSION,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.SESSION);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nexport default async function route(req: Request) {\n return request(proxyRoutes.PROVIDERS, {\n method: req.method,\n request: req,\n });\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.PROVIDERS);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nexport default async function route(req: Request) {\n return request(proxyRoutes.CSRF, {\n method: req.method,\n request: req,\n });\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.CSRF);\n}\n","import { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport fetch from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\n\nconst { log, error } = console;\nexport default async function route(request: Request) {\n const [provider] = new URL(request.url).pathname.split('/').reverse();\n const passThroughUrl = new URL(request.url);\n const params = new URLSearchParams(passThroughUrl.search);\n const url = `${proxyRoutes.CALLBACK}/${provider}${\n params.toString() !== '' ? `?${params.toString()}` : ''\n }`;\n\n const res = await fetch(url, {\n request,\n method: request.method,\n }).catch((e) => {\n error('an error has occurred in callback');\n log(e);\n });\n\n const location = res?.headers.get('location');\n if (location) {\n return new Response(res?.body, {\n status: 302,\n headers: res?.headers,\n });\n }\n return new Response(res?.body, {\n status: res?.status,\n headers: res?.headers,\n });\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.CALLBACK);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport fetch from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nconst key = 'SIGNOUT';\nexport default async function route(request: Request) {\n let url = proxyRoutes[key];\n\n const init: RequestInit = {\n method: request.method,\n };\n if (request.method === 'POST') {\n init.body = request.body;\n const [provider] = new URL(request.url).pathname.split('/').reverse();\n url = `${proxyRoutes[key]}/${provider}`;\n }\n\n const res = await fetch(url, { ...init, request });\n return res;\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nconst key = 'ERROR';\nexport default async function route(req: Request) {\n return request(proxyRoutes[key], {\n method: req.method,\n request: req,\n });\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Config } from '../utils/Config';\nimport Logger from '../utils/Logger';\n\n/**\n * a helper function to log in server side.\n */\nexport default function serverAuth(\n config: Config,\n handlers: {\n GET: (req: Request) => Promise<void | Response>;\n POST: (req: Request) => Promise<void | Response>;\n DELETE: (req: Request) => Promise<void | Response>;\n PUT: (req: Request) => Promise<void | Response>;\n }\n) {\n const { info } = Logger(config, '[serverAuth]');\n return async function login({\n email,\n password,\n }: {\n email: string;\n password: string;\n }) {\n info('Obtaining session');\n const sessionUrl = new URL(`${config.api.localPath}/api/auth/providers`);\n const sessionReq = new Request(sessionUrl, {\n method: 'GET',\n headers: new Headers({\n host: sessionUrl.host,\n }),\n });\n const sessionRes = await handlers.POST(sessionReq);\n const providers = await sessionRes?.json();\n\n info('Obtaining csrf');\n const csrf = new URL(`${config.api.localPath}/api/auth/csrf`);\n const csrfReq = new Request(csrf, {\n method: 'GET',\n headers: new Headers({\n host: sessionUrl.host,\n }),\n });\n const csrfRes = await handlers.POST(csrfReq);\n\n const { csrfToken } = (await csrfRes?.json()) ?? {};\n const { credentials } = providers;\n\n const csrfCookie = csrfRes?.headers.get('set-cookie');\n\n const signInUrl = new URL(credentials.callbackUrl);\n\n if (!csrfCookie) {\n throw new Error('Unable to authenticate REST');\n }\n info('Attempting sign in to', signInUrl.href);\n const postReq = new Request(signInUrl, {\n method: 'POST',\n headers: new Headers({\n 'content-type': 'application/json',\n cookie: csrfCookie,\n }),\n body: JSON.stringify({\n email,\n password,\n csrfToken,\n callbackUrl: credentials.callbackUrl,\n }),\n });\n const loginRes = await handlers.POST(postReq);\n const authCookie = loginRes?.headers.get('set-cookie');\n if (!authCookie) {\n throw new Error('authentication failed');\n }\n\n info('Server login successful');\n const [, token] = /(nile\\.session-token=.+?);/.exec(authCookie) ?? [];\n return new Headers({\n cookie: [token, csrfCookie].join('; '),\n });\n };\n}\n","import { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'DELETE' | '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 options 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 JSON.stringify(req) === '{}' ||\n (req && typeof req === 'object' && 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 async post<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('POST', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n return response.json();\n }\n return response;\n }\n\n async get<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('GET', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n return response.json();\n }\n return response;\n }\n\n async put<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('PUT', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n return response.json();\n }\n return response;\n }\n\n async delete<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('DELETE', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n return response.json();\n }\n return response;\n }\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest } from '../utils/Requester';\n\nexport interface Tenant {\n id: string;\n name?: string;\n}\n\nexport default class Tenants extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n get tenantsUrl() {\n return '/tenants';\n }\n get tenantUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }> | Headers | string,\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n let _req;\n if (typeof req === 'string') {\n _req = new Request(`${this.api.basePath}${this.tenantsUrl}`, {\n body: JSON.stringify({ name: req }),\n method: 'POST',\n });\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.post(_req, this.tenantsUrl, _init);\n };\n\n getTenant = async (\n req: NileRequest<{ id: string }> | Headers | string | void,\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n if (typeof req === 'string') {\n this.tenantId = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.get<Tenant>(req, this.tenantUrl, _init);\n };\n\n get tenantListUrl() {\n return `/users/${this.userId ?? '{userId}'}/tenants`;\n }\n\n listTenants = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<Tenant[] | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.get<Tenant[]>(req, this.tenantListUrl, _init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest } 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 headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n\n get usersUrl() {\n return '/users';\n }\n\n get tenantUsersUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n\n createUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n\n const _init = this.handleHeaders(init);\n return await _requester.post(req, this.usersUrl, _init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<User>,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, _init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<User[] | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.tenantUsersUrl, _init);\n };\n\n linkUser = async (\n req: NileRequest<{ id: string }> | Headers,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.put(req, this.tenantUsersUrl, _init);\n };\n\n tenantUsersDeleteUrl = (userId?: string) => {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users/${\n userId ?? '{userId}'\n }`;\n };\n\n getUserId = async (req: Headers | NileRequest<{ id: string }>) => {\n if (req instanceof Request) {\n const body = await new Response(req?.body).json();\n if (body) {\n return body.id;\n }\n }\n if ('id' in req) {\n return req.id;\n }\n return null;\n };\n\n unlinkUser = async (\n req: NileRequest<{ id: string }> | Headers,\n init?: RequestInit\n ): Promise<User[] | Response> => {\n const _requester = new Requester(this);\n const userId = await this.getUserId(req);\n const _init = this.handleHeaders(init);\n return await _requester.delete(\n req,\n this.tenantUsersDeleteUrl(userId),\n _init\n );\n };\n\n get meUrl() {\n return '/me';\n }\n\n me = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.meUrl, _init);\n };\n}\n","import Handlers from './api/handlers';\nimport { Routes } from './api/types';\nimport { appRoutes } from './api/utils/routes/defaultRoutes';\nimport serverAuth from './auth';\nimport Tenants from './tenants';\nimport Users from './users';\nimport { Config } from './utils/Config';\n\nexport class Api {\n config: Config;\n users: Users;\n tenants: Tenants;\n routes: Routes;\n handlers: {\n GET: (req: Request) => Promise<void | Response>;\n POST: (req: Request) => Promise<void | Response>;\n DELETE: (req: Request) => Promise<void | Response>;\n PUT: (req: Request) => Promise<void | Response>;\n };\n constructor(config: Config) {\n this.config = config;\n this.users = new Users(config);\n this.tenants = new Tenants(config);\n this.routes = {\n ...appRoutes(config?.routePrefix),\n ...config?.routes,\n };\n this.handlers = Handlers(this.routes, config);\n }\n\n set headers(headers: Headers) {\n this.users = new Users(this.config, headers);\n this.tenants = new Tenants(this.config, headers);\n }\n async login(payload: { email: string; password: string }) {\n this.headers = await serverAuth(this.config, this.handlers)(payload);\n }\n}\n","import { Routes } from '../../types';\n\nexport const appRoutes = (prefix = '/api'): Routes => ({\n SIGNIN: `${prefix}/auth/signin`,\n PROVIDERS: `${prefix}/auth/providers`,\n SESSION: `${prefix}/auth/session`,\n CSRF: `${prefix}/auth/csrf`,\n CALLBACK: `${prefix}/auth/callback`,\n SIGNOUT: `${prefix}/auth/signout`,\n ERROR: `${prefix}/auth/error`,\n ME: `${prefix}/me`,\n USERS: `${prefix}/users`,\n TENANTS: `${prefix}/tenants`,\n TENANT_USER: `${prefix}/tenants/{tenantId}/users/{userId}`,\n TENANT_USERS: `${prefix}/tenants/{tenantId}/users`,\n SIGNUP: `${prefix}/signup`,\n});\n","import { Config } from '../../utils/Config';\nimport { Routes } from '../types';\n\nimport getter from './GET';\nimport poster from './POST';\nimport deleter from './DELETE';\nimport puter from './PUT';\n\nexport default function Handlers(configRoutes: Routes, config: Config) {\n const GET = getter(configRoutes, config);\n const POST = poster(configRoutes, config);\n const DELETE = deleter(configRoutes, config);\n const PUT = puter(configRoutes, config);\n return {\n GET,\n POST,\n DELETE,\n PUT,\n };\n}\n","import me, { matches as matchesMe } from '../routes/me';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport { Routes } from '../types';\nimport * as authRoutes from '../routes/auth';\nimport { Config } from '../../utils/Config';\n\nexport default function GETTER(configRoutes: Routes, config: Config) {\n return async function GET(req: Request) {\n if (matchesMe(configRoutes, req)) {\n return me(req, config);\n }\n if (matchesUsers(configRoutes, req)) {\n return users(req, config);\n }\n\n if (matchesTenantUsers(configRoutes, req)) {\n return tenantUsers(req, config);\n }\n\n if (matchesTenants(configRoutes, req)) {\n return tenants(req, config);\n }\n\n if (authRoutes.matchSession(configRoutes, req)) {\n return authRoutes.handleSession(req, config);\n }\n\n if (authRoutes.matchSignIn(configRoutes, req)) {\n return authRoutes.handleSignIn(req);\n }\n\n if (authRoutes.matchProviders(configRoutes, req)) {\n return authRoutes.handleProviders(req);\n }\n\n if (authRoutes.matchCsrf(configRoutes, req)) {\n return authRoutes.handleCsrf(req);\n }\n\n if (authRoutes.matchCallback(configRoutes, req)) {\n return authRoutes.handleCallback(req);\n }\n if (authRoutes.matchSignOut(configRoutes, req)) {\n return authRoutes.handleSignOut(req);\n }\n if (authRoutes.matchError(configRoutes, req)) {\n return authRoutes.handleError(req);\n }\n return new Response(null, { status: 404 });\n };\n}\n","import users, { matches as matchesUsers } from '../routes/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\nimport * as authRoutes from '../routes/auth';\n\nexport default function POSTER(configRoutes: Routes, config: Config) {\n return async function POST(req: Request) {\n // order matters for tenantUsers\n if (matchesTenantUsers(configRoutes, req)) {\n return tenantUsers(req, config);\n }\n\n if (matchesUsers(configRoutes, req)) {\n return users(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n return tenants(req, config);\n }\n\n if (authRoutes.matchSession(configRoutes, req)) {\n return authRoutes.handleSession(req, config);\n }\n\n if (authRoutes.matchSignIn(configRoutes, req)) {\n return authRoutes.handleSignIn(req);\n }\n\n if (authRoutes.matchProviders(configRoutes, req)) {\n return authRoutes.handleProviders(req);\n }\n\n if (authRoutes.matchCsrf(configRoutes, req)) {\n return authRoutes.handleCsrf(req);\n }\n\n if (authRoutes.matchCallback(configRoutes, req)) {\n return authRoutes.handleCallback(req);\n }\n if (authRoutes.matchSignOut(configRoutes, req)) {\n return authRoutes.handleSignOut(req);\n }\n return new Response(null, { status: 404 });\n };\n}\n","import tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantsUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\n\nexport default function DELETER(configRoutes: Routes, config: Config) {\n return async function DELETE(req: Request) {\n if (matchesTenantsUsers(configRoutes, req)) {\n return tenantUsers(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n return tenants(req, config);\n }\n return new Response(null, { status: 404 });\n };\n}\n","import users, { matches as matchesUsers } from '../routes/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\n\nexport default function PUTER(configRoutes: Routes, config: Config) {\n return async function PUT(req: Request) {\n if (matchesTenantUsers(configRoutes, req)) {\n return tenantUsers(req, config);\n }\n if (matchesUsers(configRoutes, req)) {\n return users(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n return tenants(req, config);\n }\n return new Response(null, { status: 404 });\n };\n}\n","import { Pool } from 'pg';\n\nimport { ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { getServerId, makeServerId } from './utils/Server';\nimport { Api } from './Api';\n\nexport class 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, '[initial config]');\n this.servers = new Map();\n this.api = new Api(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\n this.manager.clear(this.config);\n this.manager = new DbManager(this.config);\n this.api = new Api(this.config);\n return this;\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.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.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.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.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\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 // propagate 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 const newServer = new Server(_config);\n\n this.servers.set(serverId, newServer);\n\n return newServer;\n }\n}\n\nexport async function create(config?: ServerConfig): Promise<Server> {\n const server = new Server(config);\n return await server.init();\n}\n\nexport default create;\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","getLocal","NILEDB_LOCAL","_Logger7","URL","href","getBasePath","_config$api4","_config$api5","_config$api$version","_config$api6","basePath","version","test","NILEDB_API_URL","Error","getControlPlane","NILEDB_CONFIGURE","configureUrl","getDbHost","db","host","NILEDB_POSTGRES_URL","pgUrl","NILEDB_HOST","getDbPort","_config$db","_config$db2","port","Number","NILEDB_PORT","Events","ApiConfig","_createClass","_ref","cookieKey","localPath","this","_token","key","get","set","value","Config","_config$api$cookieKey2","_config$api$version2","_this","databaseId","routePrefix","routes","_tenantId","_userId","configure","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_envVarConfig$config","_config$api$cookieKey","_Logger","envVarConfig","_ref3","dbConfig","configuredHost","configuredPort","cp","url","res","database","possibleError","json","message","_database","apiHost","dbHost","name","id","duckApiHost","dburl","wrap","_context","prev","next","_objectWithoutPropertiesLoose","_excluded","abrupt","searchParams","fetch","headers","Authorization","sent","clone","status","t0","text","_extends","stop","_x","pathname","substring","NILEDB_ID","getDatabaseId","tenantId","NILEDB_TENANT","getTenantId","Boolean","userId","_ref4","_excluded2","eventer","Eventer","events","_proto","prototype","publish","eventName","callbackList","_step","_iterator","_createForOfIteratorHelperLoose","done","callback","subscribe","push","unsubscribe","toRemove","findIndex","cb","splice","updateTenantId","Tenant","updateUserId","User","watchEvictPool","EvictPool","evictPool","val","isUUID","NileDatabase","pool","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","Proxy","target","property","connectionString","caller","createProxyForPool","Pool","startTimeout","on","client","makeAfterCreate","err","_Logger2","_callee2","e","_context2","clearTimeout","_x2","_this2","setTimeout","_callee3","_context3","end","_Logger4","conn","query","join","DBManager","connections","cleared","poolWatcher","has","getConnection","makeId","existing","size","newOne","clear","Map","makeServerId","Buffer","from","JSON","stringify","toString","makeRestUrl","path","qp","URLSearchParams","apiRoutes","ME","USERS","undefined","USER","TENANTS","TENANT","SIGNUP","TENANT_USERS","TENANT_USER","USER_TENANTS","urlMatches","requestUrl","route","startsWith","log","request","_x3","_request","_init","_params$method","init","updatedHeaders","_init$body","loggingRes","Headers","origin","method","body","duplex","Response","t1","t2","statusText","t3","GET","_GET","_x4","_route","matches","configRoutes","auth","_auth","req","sessionUrl","ResponseError","response","X_NILE_TENANT","X_NILE_USER_ID","getTokenFromCookie","_headers$get","cookie","split","_cookies","cookieParts","_cookie","slice","_step2","_iterator2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","decodeJwt","sub","_fetch","_fetch2","opts","_response$status","basicHeaders","creds","useableUrl","errorHandler","msg","_message","includes","replace","encodeURIComponent","t4","t5","errors","POST","_POST","session","yurl","tenant","PUT","_PUT","_URL$pathname$split$r","reverse","_yurl$pathname$split$","email","DELETE","_DELETE","_","_url$pathname$split$r","possibleTenantId","proxyRoutes","SIGNIN","PROVIDERS","SESSION","CSRF","CALLBACK","SIGNOUT","ERROR","passThroughUrl","search","provider","serverAuth","handlers","_login","_yield$csrfRes$json","_exec","sessionReq","sessionRes","providers","csrf","csrfReq","csrfRes","csrfToken","credentials","csrfCookie","signInUrl","postReq","loginRes","authCookie","Request","callbackUrl","exec","Requester","_Config","call","_inheritsLoose","rawRequest","_rawRequest","_headers","Object","values","_x5","_x6","_x7","_x8","post","_post","_x9","_x10","_x11","_get","_callee4","_context4","_x12","_x13","_x14","put","_put","_callee5","_context5","_x15","_x16","_x17","_delete2","_callee6","_context6","_x18","_x19","_x20","Tenants","createTenant","_req","_requester","tenantsUrl","handleHeaders","getTenant","tenantUrl","listTenants","tenantListUrl","_init2","_this$tenantId","_this$userId","Users","createUser","usersUrl","updateUser","listUsers","tenantUsersUrl","linkUser","tenantUsersDeleteUrl","getUserId","_ref5","unlinkUser","_ref6","me","_ref7","_callee7","_context7","meUrl","_this$tenantId2","Api","prefix","users","tenants","appRoutes","matchesMe","matchesUsers","matchesTenantUsers","tenantUsers","matchesTenants","authRoutes","getter","poster","matchesTenantsUsers","deleter","puter","Handlers","login","payload","Server","manager","servers","DbManager","Token","setConfig","getInstance","_config","serverId","getServerId","updatedConfig","newServer","_this$config","create","_create","server"],"mappings":"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"}