@niledatabase/server 1.0.0-alpha.201 → 1.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.
package/README.md CHANGED
@@ -10,9 +10,9 @@ import Server from '@niledatabase/server';
10
10
  const connection = {
11
11
  user: process.env.NILE_USER,
12
12
  password: process.env.NILE_PASSWORD,
13
- host: process.env.NILE_DB_HOST,
14
13
  };
15
14
  const nile = Server({
15
+ workspace: String(process.env.NILE_WORKSPACE),
16
16
  database: String(process.env.NILE_DATABASE),
17
17
  api: {
18
18
  basePath: String(process.env.BASE_PATH),
@@ -1044,7 +1044,7 @@ var Auth = /*#__PURE__*/function (_Config) {
1044
1044
  };
1045
1045
  _this.loginSSOUrl = function (provider) {
1046
1046
  var _this$tenantId;
1047
- return "/databases/" + encodeURIComponent(_this.database) + "/tenants/" + ((_this$tenantId = _this.tenantId) != null ? _this$tenantId : '{tenantId}') + "/auth/oidc/providers/" + provider + "/login";
1047
+ return "/workspaces/" + encodeURIComponent(_this.workspace) + "/databases/" + encodeURIComponent(_this.database) + "/tenants/" + ((_this$tenantId = _this.tenantId) != null ? _this$tenantId : '{tenantId}') + "/auth/oidc/providers/" + provider + "/login";
1048
1048
  };
1049
1049
  _this.signUp = /*#__PURE__*/function () {
1050
1050
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(req, init) {
@@ -1196,32 +1196,32 @@ var Auth = /*#__PURE__*/function (_Config) {
1196
1196
  } else if (param instanceof Headers) {
1197
1197
  tenantId = getTenantFromHttp(param, _this);
1198
1198
  }
1199
- return _this.api.basePath + "/databases/" + _this.database + "/tenants/" + tenantId + "/auth/oidc/callback";
1199
+ return _this.api.basePath + "/workspaces/" + _this.workspace + "/databases/" + _this.database + "/tenants/" + tenantId + "/auth/oidc/callback";
1200
1200
  };
1201
1201
  return _this;
1202
1202
  }
1203
1203
  _inheritsLoose(Auth, _Config);
1204
1204
  var _proto = Auth.prototype;
1205
1205
  _proto.updateProviderUrl = function updateProviderUrl(providerName) {
1206
- return "/databases/" + encodeURIComponent(this.database) + "/tenants/" + (this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}') + "/auth/oidc/providers/" + encodeURIComponent(providerName);
1206
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/tenants/" + (this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}') + "/auth/oidc/providers/" + encodeURIComponent(providerName);
1207
1207
  };
1208
1208
  _proto.providerUrl = function providerUrl(email) {
1209
- return "/databases/" + encodeURIComponent(this.database) + "/tenants/auth/oidc/providers" + (email ? "?email=" + encodeURIComponent(email) : '');
1209
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/tenants/auth/oidc/providers" + (email ? "?email=" + encodeURIComponent(email) : '');
1210
1210
  };
1211
1211
  return _createClass(Auth, [{
1212
1212
  key: "loginUrl",
1213
1213
  get: function get() {
1214
- return "/databases/" + encodeURIComponent(this.database) + "/users/login";
1214
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/users/login";
1215
1215
  }
1216
1216
  }, {
1217
1217
  key: "signUpUrl",
1218
1218
  get: function get() {
1219
- return "/databases/" + encodeURIComponent(this.database) + "/users";
1219
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/users";
1220
1220
  }
1221
1221
  }, {
1222
1222
  key: "listTenantProvidersUrl",
1223
1223
  get: function get() {
1224
- return "/databases/" + encodeURIComponent(this.database) + "/tenants/" + (this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}') + "/auth/oidc/providers";
1224
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/tenants/" + (this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}') + "/auth/oidc/providers";
1225
1225
  }
1226
1226
  }]);
1227
1227
  }(Config);
@@ -1341,7 +1341,7 @@ var Users = /*#__PURE__*/function (_Config) {
1341
1341
  return _createClass(Users, [{
1342
1342
  key: "baseUrl",
1343
1343
  get: function get() {
1344
- return "/databases/" + encodeURIComponent(this.database);
1344
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database);
1345
1345
  }
1346
1346
  }, {
1347
1347
  key: "usersUrl",
@@ -1357,7 +1357,7 @@ var Users = /*#__PURE__*/function (_Config) {
1357
1357
  }, {
1358
1358
  key: "meUrl",
1359
1359
  get: function get() {
1360
- return "/databases/" + encodeURIComponent(this.database) + "/users/me";
1360
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/users/me";
1361
1361
  }
1362
1362
  }]);
1363
1363
  }(Config);
@@ -1408,13 +1408,13 @@ var Tenants = /*#__PURE__*/function (_Config) {
1408
1408
  return _createClass(Tenants, [{
1409
1409
  key: "tenantsUrl",
1410
1410
  get: function get() {
1411
- return "/databases/" + encodeURIComponent(this.database) + "/tenants";
1411
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/tenants";
1412
1412
  }
1413
1413
  }, {
1414
1414
  key: "tenantUrl",
1415
1415
  get: function get() {
1416
1416
  var _this$tenantId;
1417
- return "/databases/" + encodeURIComponent(this.database) + "/tenants/" + ((_this$tenantId = this.tenantId) != null ? _this$tenantId : '{tenantId}');
1417
+ return "/workspaces/" + encodeURIComponent(this.workspace) + "/databases/" + encodeURIComponent(this.database) + "/tenants/" + ((_this$tenantId = this.tenantId) != null ? _this$tenantId : '{tenantId}');
1418
1418
  }
1419
1419
  }]);
1420
1420
  }(Config);
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs.development.js","sources":["../src/utils/Config.ts","../src/utils/ResponseError.ts","../src/utils/Event/index.ts","../src/utils/fetch.ts","../src/utils/Requester/index.ts","../src/auth/index.ts","../src/users/index.ts","../src/tenants/index.ts","../src/db/NileInstance.ts","../src/db/DBManager.ts","../src/utils/Server/index.ts","../src/Server.ts","../src/index.ts"],"sourcesContent":["import { PgConnectionConfig, PoolConfig, ServerConfig } from '../types';\n\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this._token = token;\n }\n\n public get token(): string | undefined {\n return this._token;\n }\n\n public set token(value: string | undefined) {\n this._token = value;\n }\n}\n\nconst niledatabase_url = 'thenile.dev';\ntype DBConfig = {\n connection: PgConnectionConfig;\n pool?: PoolConfig;\n};\nexport class Config {\n database: string;\n workspace?: string;\n\n db: DBConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(_config?: ServerConfig) {\n // always provided\n this.database = String(_config?.database);\n this.workspace = String(_config?.workspace);\n\n // set the context\n this._tenantId = _config?.tenantId;\n this._userId = _config?.userId;\n\n // api config\n this.api = new ApiConfig({\n basePath: _config?.api?.basePath ?? `https://api.${niledatabase_url}`,\n cookieKey: _config?.api?.cookieKey ?? 'token',\n token: _config?.api?.token,\n });\n\n // db config\n const host: string =\n _config?.db &&\n _config.db.connection &&\n typeof _config.db?.connection !== 'string' &&\n 'host' in _config.db.connection\n ? String(_config.db.connection.host)\n : `db.${niledatabase_url}`;\n\n const port: number =\n _config?.db?.connection &&\n typeof _config.db?.connection !== 'string' &&\n 'port' in _config.db.connection\n ? Number(_config.db?.connection?.port)\n : 5432;\n\n const connection = {\n host,\n port,\n database: _config?.database,\n ...(typeof _config?.db?.connection === 'object'\n ? _config.db.connection\n : {}),\n } as PgConnectionConfig;\n\n this.db = {\n ..._config?.db,\n connection,\n };\n }\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","type BusValues = undefined | null | string;\ntype EventFn = (params: BusValues) => void;\nenum Events {\n User = 'userId',\n Tenant = 'tenantId',\n Token = 'token',\n EvictPool = 'EvictPool',\n}\nclass Eventer {\n events: { [key: string]: EventFn[] };\n constructor() {\n this.events = {};\n }\n publish(eventName: string, value: BusValues) {\n // Get all the callback functions of the current event\n const callbackList = this.events[eventName];\n\n // execute each callback function\n if (callbackList) {\n for (const callback of callbackList) {\n callback(value);\n }\n }\n }\n // Subscribe to events\n subscribe(eventName: string, callback: EventFn) {\n // initialize this event\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n\n // store the callback function of the subscriber\n this.events[eventName].push(callback);\n }\n}\n\n// tenantId manager\nconst eventer = new Eventer();\n\nexport const updateTenantId = (tenantId: BusValues) => {\n eventer.publish(Events.Tenant, tenantId);\n};\n\nexport const watchTenantId = (cb: EventFn) =>\n eventer.subscribe(Events.Tenant, cb);\n\nexport const updateUserId = (userId: BusValues) => {\n eventer.publish(Events.User, userId);\n};\n\nexport const watchUserId = (cb: EventFn) => eventer.subscribe(Events.User, cb);\n\nexport const updateToken = (val: BusValues) => {\n eventer.publish(Events.Token, val);\n};\n\nexport const watchToken = (cb: EventFn) => eventer.subscribe(Events.Token, cb);\n\nexport const watchEvictPool = (cb: EventFn) =>\n eventer.subscribe(Events.EvictPool, cb);\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","import { decodeJwt } from 'jose';\n\nimport { ResponseError } from './ResponseError';\nimport { Config } from './Config';\nimport { NileRequest } from './Requester';\nimport { updateTenantId, updateUserId } from './Event';\n\nexport const X_NILE_TENANT = 'x-nile-tenantId';\nexport const X_NILE_USER_ID = 'x-nile-userId';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config: Config) {\n const cookieTenant = getTokenFromCookie(headers, 'tenantId');\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const url = `${config.api?.basePath}${path}`;\n const cookieKey = config.api?.cookieKey;\n const headers = new Headers(opts?.headers);\n const basicHeaders = new Headers();\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n basicHeaders.set('Authorization', `Bearer ${token}`);\n } else if (config.api?.token) {\n basicHeaders.set('Authorization', `Bearer ${config.api?.token}`);\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 const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.log(e);\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n return response;\n }\n\n let res;\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n /* do the default */\n }\n if (res && 'message' in res) {\n const { message } = res;\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n return new ResponseError(message, { status: 400 });\n }\n\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\n\nimport { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three optios here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n isEmpty(req) ||\n (isObject(req) && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n post = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('POST', url, req, init);\n };\n\n get = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('GET', url, req, init);\n };\n\n put = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('PUT', url, req, init);\n };\n}\n","import { RestModels } from '@niledatabase/js';\n\nimport { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\nimport { ResponseError } from '../utils/ResponseError';\nimport {\n X_NILE_TENANT,\n X_NILE_USER_ID,\n getTenantFromHttp,\n} from '../utils/fetch';\nimport { updateToken, updateUserId } from '../utils/Event';\n\nexport default class Auth extends Config {\n constructor(config: Config) {\n super(config);\n }\n get loginUrl() {\n return `/databases/${encodeURIComponent(this.database)}/users/login`;\n }\n\n login = async (\n req: NileRequest<RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.LoginUserResponse> => {\n const headers = new Headers({ 'content-type': 'application/json' });\n const _requester = new Requester(this);\n\n const params =\n req instanceof Request\n ? new URL(req.url).searchParams\n : new URLSearchParams();\n\n const sso = params.get('sso');\n\n if (sso === 'true') {\n const providerRes = await this.listProviders(\n (req as Request).clone(),\n init\n );\n // if you have a provider, log them in\n if (\n providerRes &&\n providerRes.status >= 200 &&\n providerRes.status < 300\n ) {\n const providers = await new Response(providerRes.body).json();\n if (providers.length > 0) {\n if (providers.length > 1) {\n return new Response(JSON.stringify(providers), { status: 200 });\n // a user has to make a choice\n }\n\n // is there a way to do this? probably not.\n headers.set(X_NILE_TENANT, providers[0].tenantId);\n headers.append(\n 'set-cookie',\n `tenantId=${providers[0].tenantId}; path=/; httponly;`\n );\n // const ssoResp = await this.loginSSO(req);\n return new Response(\n JSON.stringify({\n redirectURI: `${this.api.basePath}${this.loginSSOUrl('okta')}`,\n }),\n { status: 200 }\n );\n // make it a client side redirect, because of the headers\n // if there is no provider, require a password.\n }\n }\n }\n\n const res = await _requester.post(req, this.loginUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: RestModels.LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { tenants } = token;\n const tenant = tenants?.values();\n const tenantId = tenant?.next().value;\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n updateToken(token.token.jwt);\n\n return new Response(JSON.stringify(token), { status: 200, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n loginSSO = (redirectUrl: string) => {\n const ssoLogin = async (\n req: NileRequest<unknown>\n ): NileResponse<RestModels.TenantSSORegistration[]> => {\n const headers = new Headers();\n const body = await (req as Request).formData();\n const accessToken = (await body.get('access_token')) as string;\n const tenantId = (await body.get('tenantId')) as string;\n const cookie = `${this.api?.cookieKey}=${accessToken}; path=/; samesite=lax; httponly;`;\n updateToken(accessToken);\n headers.append('set-cookie', cookie);\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n headers.set('Location', redirectUrl);\n return new Response(null, {\n headers,\n status: 303,\n });\n };\n return ssoLogin;\n };\n\n loginSSOUrl = (provider: string) => {\n return `/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }/auth/oidc/providers/${provider}/login`;\n };\n\n get signUpUrl() {\n return `/databases/${encodeURIComponent(this.database)}/users`;\n }\n\n signUp = async (\n req: NileRequest<RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.LoginUserResponse> => {\n const headers = new Headers();\n const _requester = new Requester(this);\n const res = await _requester.post(req, this.signUpUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: RestModels.LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token?.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { id } = token;\n updateToken(token.token?.jwt);\n updateUserId(id);\n headers.set(X_NILE_USER_ID, id);\n headers.append('set-cookie', `userId=${id}; path=/; httponly;`);\n return new Response(JSON.stringify(token), { status: 201, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n updateProviderUrl(providerName: string) {\n return `/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers/${encodeURIComponent(providerName)}`;\n }\n\n get listTenantProvidersUrl() {\n return `/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers`;\n }\n\n listTenantProviders = async (\n req: NileRequest<void | Headers>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.listTenantProvidersUrl, init);\n };\n\n createProvider = async (\n req: NileRequest<RestModels.RegisterTenantSSORequest>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.post(req, this.updateProviderUrl(providerName), init);\n };\n\n updateProvider = async (\n req: NileRequest<RestModels.RegisterTenantSSORequest>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.put(req, this.updateProviderUrl(providerName), init);\n };\n\n providerUrl(email?: undefined | string) {\n return `/databases/${encodeURIComponent(\n this.database\n )}/tenants/auth/oidc/providers${\n email ? `?email=${encodeURIComponent(email)}` : ''\n }`;\n }\n\n listProviders = async (\n req: NileRequest<void | RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n let body: { email: string } | undefined;\n // this is a get. Get the email from the response body so the request is filtered.\n if (req && 'body' in req) {\n body = await new Response(req.body as BodyInit).json();\n }\n return _requester.get(req, this.providerUrl(body?.email), init);\n };\n\n getSSOCallbackUrl = (param: Headers | string) => {\n let tenantId;\n if (typeof tenantId === 'string') {\n tenantId = param;\n } else if (param instanceof Headers) {\n tenantId = getTenantFromHttp(param, this);\n }\n\n return `${this.api.basePath}/databases/${this.database}/tenants/${tenantId}/auth/oidc/callback`;\n };\n}\n","import { RestModels } from '@niledatabase/js';\n\nimport { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport default class Users extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n get baseUrl() {\n return `/databases/${encodeURIComponent(this.database)}`;\n }\n\n get usersUrl() {\n return `${this.baseUrl}/users`;\n }\n\n get tenantUsersUrl() {\n return `${this.baseUrl}/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n\n createTenantUser = async (\n req: NileRequest<RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.LoginUserResponse> => {\n const _requester = new Requester(this);\n return await _requester.post(req, this.tenantUsersUrl, init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<RestModels.User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.usersUrl, init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<RestModels.UpdateUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.User> => {\n const _requester = new Requester(this);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, init);\n };\n\n listTenantUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<RestModels.User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.tenantUsersUrl, init);\n };\n\n get meUrl() {\n return `/databases/${encodeURIComponent(this.database)}/users/me`;\n }\n\n me = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<RestModels.User> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.meUrl, init);\n };\n}\n","import { RestModels } from '@niledatabase/js';\n\nimport { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport default class Tenants extends Config {\n constructor(config: Config) {\n super(config);\n }\n get tenantsUrl() {\n return `/databases/${encodeURIComponent(this.database)}/tenants`;\n }\n get tenantUrl() {\n return `/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }>,\n init?: RequestInit\n ): NileResponse<RestModels.Tenant> => {\n const _requester = new Requester(this);\n return _requester.post(req, this.tenantsUrl, init);\n };\n\n getTenant = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<RestModels.Tenant> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.tenantUrl, init);\n };\n}\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport knex, { Knex } from 'knex';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate, PgConnectionConfig, PoolConfig } from '../types';\n\nclass NileDatabase {\n knex: Knex;\n tenantId?: undefined | null | string;\n userId?: undefined | null | string;\n id: string;\n config: any;\n timer: NodeJS.Timeout | undefined;\n\n constructor(config: Config, id: string) {\n this.id = id;\n const poolConfig: PoolConfig = {\n min: 0,\n max: 10,\n idleTimeoutMillis: 30000,\n ...config.db.pool,\n };\n\n const database =\n (config.db.connection as PgConnectionConfig)?.database ?? config.database;\n\n this.config = {\n ...config,\n db: {\n ...config.db,\n connection: {\n ...(config.db.connection as PgConnectionConfig),\n database,\n },\n pool: poolConfig,\n },\n };\n\n this.knex = knex({ ...this.config.db, client: 'pg' });\n\n if (config.db.pool?.afterCreate) {\n console.log(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n } else {\n const afterCreate: AfterCreate = makeAfterCreate(config);\n poolConfig.afterCreate = afterCreate;\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.knex.on('query', async () => {\n this.startTimeout();\n });\n }\n\n startTimeout() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n await this.knex.client.pool.destroy();\n await this.knex.destroy();\n evictPool(this.id);\n }, this.config.db.pool.idleTimeoutMillis);\n }\n}\n\nexport type NileDatabaseI = (table?: string) => Knex;\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config): AfterCreate {\n return (conn, done) => {\n conn.on('error', function errorHandler(error: unknown) {\n console.log('Connection was terminated by server', error);\n done(error, conn);\n });\n\n if (config.tenantId) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (config.userId) {\n if (!config.tenantId) {\n console.warn(\n 'A user id cannot be set in context without a tenant id'\n );\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: unknown) {\n console.log(\n 'tenant id and user id set',\n config.userId,\n config.tenantId\n );\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\n\nimport NileDatabase, { NileDatabaseI } from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: Config) {\n this.connections = new Map();\n // add the base one, so you can at least query\n const id = this.makeId();\n this.connections.set(id, new NileDatabase(new Config(config), id));\n watchEvictPool((id) => {\n if (id && this.connections.has(id)) {\n this.connections.delete(id);\n }\n });\n }\n\n getConnection(config: Config): NileDatabaseI {\n const id = this.makeId(config.tenantId, config.userId);\n const existing = this.connections.get(id);\n if (existing) {\n return existing as unknown as NileDatabaseI;\n }\n this.connections.set(id, new NileDatabase(new Config(config), id));\n return this.connections.get(id) as unknown as NileDatabaseI;\n }\n}\n","import { ServerConfig } from '../../types';\nimport { Config } from '../Config';\n\nexport const getServerId = (config: ServerConfig) => {\n const cfg = new Config(config);\n return makeServerId(cfg);\n};\nexport const makeServerId = (config: Config) => {\n return Buffer.from(JSON.stringify(config), 'base64').toString();\n};\n","import { InstanceConfig, PgConnectionConfig, ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport Auth from './auth';\nimport Users from './users';\nimport Tenants from './tenants';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager, { NileDatabaseI } from './db';\nimport DBManager from './db/DBManager';\nimport { getServerId, makeServerId } from './utils/Server';\n\ntype Api = {\n auth: Auth;\n users: Users;\n tenants: Tenants;\n};\n\nconst init = (config: Config): [Api] => {\n const auth = new Auth(config);\n const users = new Users(config);\n const tenants = new Tenants(config);\n return [\n {\n auth,\n users,\n tenants,\n },\n ];\n};\n\nclass Server {\n config: Config;\n api: Api;\n private manager: DbManager;\n private servers: Map<string, Server>;\n\n constructor(config?: ServerConfig) {\n this.config = new Config(config);\n this.servers = new Map();\n const [api] = init(this.config);\n this.api = api;\n this.manager = new DBManager(this.config);\n\n watchTenantId((tenantId) => {\n this.tenantId = tenantId;\n });\n watchUserId((userId) => {\n this.userId = userId;\n });\n watchToken((token) => {\n this.token = token;\n });\n }\n\n setConfig(cfg: Config) {\n this.config = new Config(cfg);\n }\n\n set database(val: string | void) {\n if (val) {\n this.config.database = val;\n (this.config.db.connection as PgConnectionConfig).database = val;\n this.api.auth.database = val;\n this.api.users.database = val;\n this.api.tenants.database = val;\n }\n }\n\n set workspace(val: string | void) {\n if (val) {\n this.config.workspace = val;\n this.api.auth.workspace = val;\n this.api.users.workspace = val;\n this.api.tenants.workspace = 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.database = this.config.database;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.auth.userId = this.config.userId;\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.database = this.config.database;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.auth.tenantId = tenantId;\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.auth.api.token = token;\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): NileDatabaseI {\n // only need to interact with the knex object\n //@ts-expect-error - because that's where it is in the proxy\n return this.manager.getConnection(this.config).knex;\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: InstanceConfig): Server {\n const _config = { ...this.config, ...config };\n const serverId = getServerId(_config);\n const currentServerId = makeServerId(this.config);\n if (serverId === currentServerId) {\n return this;\n }\n const existing = this.servers.get(serverId);\n\n if (existing) {\n // be sure the config is up to date\n const updatedConfig = new Config(_config);\n existing.setConfig(updatedConfig);\n // propagage special config items\n existing.tenantId = updatedConfig.tenantId;\n existing.userId = updatedConfig.userId;\n existing.token = updatedConfig.api.token;\n existing.workspace = updatedConfig.workspace;\n existing.database = updatedConfig.database;\n return existing;\n }\n\n this.servers.set(serverId, new Server(_config));\n return this.servers.get(serverId) as unknown as Server;\n }\n}\n\n// export default Server;\nexport default function Nile(config: ServerConfig) {\n const server = new Server(config);\n server.setConfig(new Config(config as ServerConfig));\n return server;\n}\n","import { default as Server } from './Server';\n\nmodule.exports = Server;\nexport default Server;\n"],"names":["ApiConfig","_ref","basePath","cookieKey","token","_token","_createClass","key","get","set","value","niledatabase_url","Config","_config","_config$api$basePath","_config$api","_config$api$cookieKey","_config$api2","_config$api3","_config$db","_config$db2","_config$db3","_config$db4","_config$db5","database","workspace","db","api","_tenantId","_userId","String","tenantId","userId","host","connection","port","Number","_extends","ResponseError","body","init","response","Response","Events","Eventer","events","_proto","prototype","publish","eventName","callbackList","_iterator","_createForOfIteratorHelperLoose","_step","done","callback","subscribe","push","eventer","updateTenantId","Tenant","watchTenantId","cb","updateUserId","User","watchUserId","updateToken","val","Token","watchToken","watchEvictPool","EvictPool","evictPool","X_NILE_TENANT","X_NILE_USER_ID","getTokenFromCookie","headers","_headers$get","cookie","split","_cookies","parts","cookieParts","_cookie","slice","join","name","_iterator2","_step2","getTenantFromHttp","config","cookieTenant","getUserFromHttp","_headers$get2","jwt","decodeJwt","sub","_fetch","_x","_x2","_x3","_fetch2","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","opts","_response$status","url","basicHeaders","authHeader","_config$api4","useableUrl","res","_res","message","_res2","_res2$errors","_message","wrap","_callee$","_context","prev","next","Headers","includes","abrupt","status","replace","encodeURIComponent","fetch","e","console","log","sent","json","t0","errors","stop","Requester","_Config","_this","call","post","req","request","_ref2","_callee2","_callee2$","_context2","_x4","_x5","_x6","put","_ref3","_callee3","_callee3$","_context3","_x7","_x8","_x9","_inheritsLoose","rawRequest","_rawRequest","_callee4","method","_init","_callee4$","_context4","_x10","_x11","_x12","_x13","_request","_callee5","_headers","_callee5$","_context5","Request","JSON","stringify","undefined","text","isEmpty","isObject","Object","values","length","_x14","_x15","_x16","_x17","Auth","login","_requester","params","sso","providerRes","providers","_this$api","tenants","tenant","URL","searchParams","URLSearchParams","listProviders","clone","append","redirectURI","loginSSOUrl","loginUrl","error","loginSSO","redirectUrl","ssoLogin","_this$api2","accessToken","formData","provider","_this$tenantId","signUp","_this$api3","_token$token","_token$token2","id","signUpUrl","listTenantProviders","_ref4","listTenantProvidersUrl","createProvider","_ref5","providerName","updateProviderUrl","updateProvider","_ref6","_callee6","_callee6$","_context6","_ref7","_callee7","_body","_callee7$","_context7","providerUrl","email","getSSOCallbackUrl","param","Users","createTenantUser","tenantUsersUrl","listUsers","usersUrl","updateUser","listTenantUsers","me","meUrl","baseUrl","Tenants","createTenant","tenantsUrl","getTenant","tenantUrl","NileDatabase","_config$db$connection","_config$db$connection2","_config$db$pool","knex","timer","poolConfig","min","max","idleTimeoutMillis","pool","client","afterCreate","makeAfterCreate","startTimeout","on","_this2","clearTimeout","setTimeout","destroy","conn","errorHandler","query","warn","err","DBManager","connections","Map","makeId","has","getConnection","existing","getServerId","cfg","makeServerId","Buffer","from","toString","auth","users","Server","manager","servers","setConfig","getInstance","serverId","currentServerId","updatedConfig","_this$config","Nile","server","module","exports"],"mappings":"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"}
1
+ {"version":3,"file":"server.cjs.development.js","sources":["../src/utils/Config.ts","../src/utils/ResponseError.ts","../src/utils/Event/index.ts","../src/utils/fetch.ts","../src/utils/Requester/index.ts","../src/auth/index.ts","../src/users/index.ts","../src/tenants/index.ts","../src/db/NileInstance.ts","../src/db/DBManager.ts","../src/utils/Server/index.ts","../src/Server.ts","../src/index.ts"],"sourcesContent":["import { PgConnectionConfig, PoolConfig, ServerConfig } from '../types';\n\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this._token = token;\n }\n\n public get token(): string | undefined {\n return this._token;\n }\n\n public set token(value: string | undefined) {\n this._token = value;\n }\n}\n\nconst niledatabase_url = 'thenile.dev';\ntype DBConfig = {\n connection: PgConnectionConfig;\n pool?: PoolConfig;\n};\nexport class Config {\n database: string;\n workspace: string;\n\n db: DBConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(_config?: ServerConfig) {\n // always provided\n this.database = String(_config?.database);\n this.workspace = String(_config?.workspace);\n\n // set the context\n this._tenantId = _config?.tenantId;\n this._userId = _config?.userId;\n\n // api config\n this.api = new ApiConfig({\n basePath: _config?.api?.basePath ?? `https://api.${niledatabase_url}`,\n cookieKey: _config?.api?.cookieKey ?? 'token',\n token: _config?.api?.token,\n });\n\n // db config\n const host: string =\n _config?.db &&\n _config.db.connection &&\n typeof _config.db?.connection !== 'string' &&\n 'host' in _config.db.connection\n ? String(_config.db.connection.host)\n : `db.${niledatabase_url}`;\n\n const port: number =\n _config?.db?.connection &&\n typeof _config.db?.connection !== 'string' &&\n 'port' in _config.db.connection\n ? Number(_config.db?.connection?.port)\n : 5432;\n\n const connection = {\n host,\n port,\n database: _config?.database,\n ...(typeof _config?.db?.connection === 'object'\n ? _config.db.connection\n : {}),\n } as PgConnectionConfig;\n\n this.db = {\n ..._config?.db,\n connection,\n };\n }\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","type BusValues = undefined | null | string;\ntype EventFn = (params: BusValues) => void;\nenum Events {\n User = 'userId',\n Tenant = 'tenantId',\n Token = 'token',\n EvictPool = 'EvictPool',\n}\nclass Eventer {\n events: { [key: string]: EventFn[] };\n constructor() {\n this.events = {};\n }\n publish(eventName: string, value: BusValues) {\n // Get all the callback functions of the current event\n const callbackList = this.events[eventName];\n\n // execute each callback function\n if (callbackList) {\n for (const callback of callbackList) {\n callback(value);\n }\n }\n }\n // Subscribe to events\n subscribe(eventName: string, callback: EventFn) {\n // initialize this event\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n\n // store the callback function of the subscriber\n this.events[eventName].push(callback);\n }\n}\n\n// tenantId manager\nconst eventer = new Eventer();\n\nexport const updateTenantId = (tenantId: BusValues) => {\n eventer.publish(Events.Tenant, tenantId);\n};\n\nexport const watchTenantId = (cb: EventFn) =>\n eventer.subscribe(Events.Tenant, cb);\n\nexport const updateUserId = (userId: BusValues) => {\n eventer.publish(Events.User, userId);\n};\n\nexport const watchUserId = (cb: EventFn) => eventer.subscribe(Events.User, cb);\n\nexport const updateToken = (val: BusValues) => {\n eventer.publish(Events.Token, val);\n};\n\nexport const watchToken = (cb: EventFn) => eventer.subscribe(Events.Token, cb);\n\nexport const watchEvictPool = (cb: EventFn) =>\n eventer.subscribe(Events.EvictPool, cb);\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","import { decodeJwt } from 'jose';\n\nimport { ResponseError } from './ResponseError';\nimport { Config } from './Config';\nimport { NileRequest } from './Requester';\nimport { updateTenantId, updateUserId } from './Event';\n\nexport const X_NILE_TENANT = 'x-nile-tenantId';\nexport const X_NILE_USER_ID = 'x-nile-userId';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config: Config) {\n const cookieTenant = getTokenFromCookie(headers, 'tenantId');\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const url = `${config.api?.basePath}${path}`;\n const cookieKey = config.api?.cookieKey;\n const headers = new Headers(opts?.headers);\n const basicHeaders = new Headers();\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n basicHeaders.set('Authorization', `Bearer ${token}`);\n } else if (config.api?.token) {\n basicHeaders.set('Authorization', `Bearer ${config.api?.token}`);\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 const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.log(e);\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n return response;\n }\n\n let res;\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n /* do the default */\n }\n if (res && 'message' in res) {\n const { message } = res;\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n return new ResponseError(message, { status: 400 });\n }\n\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\n\nimport { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three optios here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n isEmpty(req) ||\n (isObject(req) && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n post = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('POST', url, req, init);\n };\n\n get = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('GET', url, req, init);\n };\n\n put = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('PUT', url, req, init);\n };\n}\n","import { RestModels } from '@niledatabase/js';\n\nimport { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\nimport { ResponseError } from '../utils/ResponseError';\nimport {\n X_NILE_TENANT,\n X_NILE_USER_ID,\n getTenantFromHttp,\n} from '../utils/fetch';\nimport { updateToken, updateUserId } from '../utils/Event';\n\nexport default class Auth extends Config {\n constructor(config: Config) {\n super(config);\n }\n get loginUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/users/login`;\n }\n\n login = async (\n req: NileRequest<RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.LoginUserResponse> => {\n const headers = new Headers({ 'content-type': 'application/json' });\n const _requester = new Requester(this);\n\n const params =\n req instanceof Request\n ? new URL(req.url).searchParams\n : new URLSearchParams();\n\n const sso = params.get('sso');\n\n if (sso === 'true') {\n const providerRes = await this.listProviders(\n (req as Request).clone(),\n init\n );\n // if you have a provider, log them in\n if (\n providerRes &&\n providerRes.status >= 200 &&\n providerRes.status < 300\n ) {\n const providers = await new Response(providerRes.body).json();\n if (providers.length > 0) {\n if (providers.length > 1) {\n return new Response(JSON.stringify(providers), { status: 200 });\n // a user has to make a choice\n }\n\n // is there a way to do this? probably not.\n headers.set(X_NILE_TENANT, providers[0].tenantId);\n headers.append(\n 'set-cookie',\n `tenantId=${providers[0].tenantId}; path=/; httponly;`\n );\n // const ssoResp = await this.loginSSO(req);\n return new Response(\n JSON.stringify({\n redirectURI: `${this.api.basePath}${this.loginSSOUrl('okta')}`,\n }),\n { status: 200 }\n );\n // make it a client side redirect, because of the headers\n // if there is no provider, require a password.\n }\n }\n }\n\n const res = await _requester.post(req, this.loginUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: RestModels.LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { tenants } = token;\n const tenant = tenants?.values();\n const tenantId = tenant?.next().value;\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n updateToken(token.token.jwt);\n\n return new Response(JSON.stringify(token), { status: 200, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n loginSSO = (redirectUrl: string) => {\n const ssoLogin = async (\n req: NileRequest<unknown>\n ): NileResponse<RestModels.TenantSSORegistration[]> => {\n const headers = new Headers();\n const body = await (req as Request).formData();\n const accessToken = (await body.get('access_token')) as string;\n const tenantId = (await body.get('tenantId')) as string;\n const cookie = `${this.api?.cookieKey}=${accessToken}; path=/; samesite=lax; httponly;`;\n updateToken(accessToken);\n headers.append('set-cookie', cookie);\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n headers.set('Location', redirectUrl);\n return new Response(null, {\n headers,\n status: 303,\n });\n };\n return ssoLogin;\n };\n\n loginSSOUrl = (provider: string) => {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }/auth/oidc/providers/${provider}/login`;\n };\n\n get signUpUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/users`;\n }\n\n signUp = async (\n req: NileRequest<RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.LoginUserResponse> => {\n const headers = new Headers();\n const _requester = new Requester(this);\n const res = await _requester.post(req, this.signUpUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: RestModels.LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token?.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { id } = token;\n updateToken(token.token?.jwt);\n updateUserId(id);\n headers.set(X_NILE_USER_ID, id);\n headers.append('set-cookie', `userId=${id}; path=/; httponly;`);\n return new Response(JSON.stringify(token), { status: 201, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n updateProviderUrl(providerName: string) {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers/${encodeURIComponent(providerName)}`;\n }\n\n get listTenantProvidersUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers`;\n }\n\n listTenantProviders = async (\n req: NileRequest<void | Headers>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.listTenantProvidersUrl, init);\n };\n\n createProvider = async (\n req: NileRequest<RestModels.RegisterTenantSSORequest>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.post(req, this.updateProviderUrl(providerName), init);\n };\n\n updateProvider = async (\n req: NileRequest<RestModels.RegisterTenantSSORequest>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.put(req, this.updateProviderUrl(providerName), init);\n };\n\n providerUrl(email?: undefined | string) {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(\n this.database\n )}/tenants/auth/oidc/providers${\n email ? `?email=${encodeURIComponent(email)}` : ''\n }`;\n }\n\n listProviders = async (\n req: NileRequest<void | RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n let body: { email: string } | undefined;\n // this is a get. Get the email from the response body so the request is filtered.\n if (req && 'body' in req) {\n body = await new Response(req.body as BodyInit).json();\n }\n return _requester.get(req, this.providerUrl(body?.email), init);\n };\n\n getSSOCallbackUrl = (param: Headers | string) => {\n let tenantId;\n if (typeof tenantId === 'string') {\n tenantId = param;\n } else if (param instanceof Headers) {\n tenantId = getTenantFromHttp(param, this);\n }\n\n return `${this.api.basePath}/workspaces/${this.workspace}/databases/${this.database}/tenants/${tenantId}/auth/oidc/callback`;\n };\n}\n","import { RestModels } from '@niledatabase/js';\n\nimport { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport default class Users extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n get baseUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}`;\n }\n\n get usersUrl() {\n return `${this.baseUrl}/users`;\n }\n\n get tenantUsersUrl() {\n return `${this.baseUrl}/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n\n createTenantUser = async (\n req: NileRequest<RestModels.CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.LoginUserResponse> => {\n const _requester = new Requester(this);\n return await _requester.post(req, this.tenantUsersUrl, init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<RestModels.User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.usersUrl, init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<RestModels.UpdateUserRequest>,\n init?: RequestInit\n ): NileResponse<RestModels.User> => {\n const _requester = new Requester(this);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, init);\n };\n\n listTenantUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<RestModels.User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.tenantUsersUrl, init);\n };\n\n get meUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/users/me`;\n }\n\n me = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<RestModels.User> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.meUrl, init);\n };\n}\n","import { RestModels } from '@niledatabase/js';\n\nimport { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport default class Tenants extends Config {\n constructor(config: Config) {\n super(config);\n }\n get tenantsUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/tenants`;\n }\n get tenantUrl() {\n return `/workspaces/${encodeURIComponent(\n this.workspace\n )}/databases/${encodeURIComponent(this.database)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }>,\n init?: RequestInit\n ): NileResponse<RestModels.Tenant> => {\n const _requester = new Requester(this);\n return _requester.post(req, this.tenantsUrl, init);\n };\n\n getTenant = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<RestModels.Tenant> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.tenantUrl, init);\n };\n}\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport knex, { Knex } from 'knex';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate, PgConnectionConfig, PoolConfig } from '../types';\n\nclass NileDatabase {\n knex: Knex;\n tenantId?: undefined | null | string;\n userId?: undefined | null | string;\n id: string;\n config: any;\n timer: NodeJS.Timeout | undefined;\n\n constructor(config: Config, id: string) {\n this.id = id;\n const poolConfig: PoolConfig = {\n min: 0,\n max: 10,\n idleTimeoutMillis: 30000,\n ...config.db.pool,\n };\n\n const database =\n (config.db.connection as PgConnectionConfig)?.database ?? config.database;\n\n this.config = {\n ...config,\n db: {\n ...config.db,\n connection: {\n ...(config.db.connection as PgConnectionConfig),\n database,\n },\n pool: poolConfig,\n },\n };\n\n this.knex = knex({ ...this.config.db, client: 'pg' });\n\n if (config.db.pool?.afterCreate) {\n console.log(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n } else {\n const afterCreate: AfterCreate = makeAfterCreate(config);\n poolConfig.afterCreate = afterCreate;\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.knex.on('query', async () => {\n this.startTimeout();\n });\n }\n\n startTimeout() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n await this.knex.client.pool.destroy();\n await this.knex.destroy();\n evictPool(this.id);\n }, this.config.db.pool.idleTimeoutMillis);\n }\n}\n\nexport type NileDatabaseI = (table?: string) => Knex;\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config): AfterCreate {\n return (conn, done) => {\n conn.on('error', function errorHandler(error: unknown) {\n console.log('Connection was terminated by server', error);\n done(error, conn);\n });\n\n if (config.tenantId) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (config.userId) {\n if (!config.tenantId) {\n console.warn(\n 'A user id cannot be set in context without a tenant id'\n );\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: unknown) {\n console.log(\n 'tenant id and user id set',\n config.userId,\n config.tenantId\n );\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\n\nimport NileDatabase, { NileDatabaseI } from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: Config) {\n this.connections = new Map();\n // add the base one, so you can at least query\n const id = this.makeId();\n this.connections.set(id, new NileDatabase(new Config(config), id));\n watchEvictPool((id) => {\n if (id && this.connections.has(id)) {\n this.connections.delete(id);\n }\n });\n }\n\n getConnection(config: Config): NileDatabaseI {\n const id = this.makeId(config.tenantId, config.userId);\n const existing = this.connections.get(id);\n if (existing) {\n return existing as unknown as NileDatabaseI;\n }\n this.connections.set(id, new NileDatabase(new Config(config), id));\n return this.connections.get(id) as unknown as NileDatabaseI;\n }\n}\n","import { ServerConfig } from '../../types';\nimport { Config } from '../Config';\n\nexport const getServerId = (config: ServerConfig) => {\n const cfg = new Config(config);\n return makeServerId(cfg);\n};\nexport const makeServerId = (config: Config) => {\n return Buffer.from(JSON.stringify(config), 'base64').toString();\n};\n","import { InstanceConfig, PgConnectionConfig, ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport Auth from './auth';\nimport Users from './users';\nimport Tenants from './tenants';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager, { NileDatabaseI } from './db';\nimport DBManager from './db/DBManager';\nimport { getServerId, makeServerId } from './utils/Server';\n\ntype Api = {\n auth: Auth;\n users: Users;\n tenants: Tenants;\n};\n\nconst init = (config: Config): [Api] => {\n const auth = new Auth(config);\n const users = new Users(config);\n const tenants = new Tenants(config);\n return [\n {\n auth,\n users,\n tenants,\n },\n ];\n};\n\nclass Server {\n config: Config;\n api: Api;\n private manager: DbManager;\n private servers: Map<string, Server>;\n\n constructor(config?: ServerConfig) {\n this.config = new Config(config);\n this.servers = new Map();\n const [api] = init(this.config);\n this.api = api;\n this.manager = new DBManager(this.config);\n\n watchTenantId((tenantId) => {\n this.tenantId = tenantId;\n });\n watchUserId((userId) => {\n this.userId = userId;\n });\n watchToken((token) => {\n this.token = token;\n });\n }\n\n setConfig(cfg: Config) {\n this.config = new Config(cfg);\n }\n\n set database(val: string | void) {\n if (val) {\n this.config.database = val;\n (this.config.db.connection as PgConnectionConfig).database = val;\n this.api.auth.database = val;\n this.api.users.database = val;\n this.api.tenants.database = val;\n }\n }\n\n set workspace(val: string | void) {\n if (val) {\n this.config.workspace = val;\n this.api.auth.workspace = val;\n this.api.users.workspace = val;\n this.api.tenants.workspace = 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.database = this.config.database;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.auth.userId = this.config.userId;\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.database = this.config.database;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.auth.tenantId = tenantId;\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.auth.api.token = token;\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): NileDatabaseI {\n // only need to interact with the knex object\n //@ts-expect-error - because that's where it is in the proxy\n return this.manager.getConnection(this.config).knex;\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: InstanceConfig): Server {\n const _config = { ...this.config, ...config };\n const serverId = getServerId(_config);\n const currentServerId = makeServerId(this.config);\n if (serverId === currentServerId) {\n return this;\n }\n const existing = this.servers.get(serverId);\n\n if (existing) {\n // be sure the config is up to date\n const updatedConfig = new Config(_config);\n existing.setConfig(updatedConfig);\n // propagage special config items\n existing.tenantId = updatedConfig.tenantId;\n existing.userId = updatedConfig.userId;\n existing.token = updatedConfig.api.token;\n existing.workspace = updatedConfig.workspace;\n existing.database = updatedConfig.database;\n return existing;\n }\n\n this.servers.set(serverId, new Server(_config));\n return this.servers.get(serverId) as unknown as Server;\n }\n}\n\n// export default Server;\nexport default function Nile(config: ServerConfig) {\n const server = new Server(config);\n server.setConfig(new Config(config as ServerConfig));\n return server;\n}\n","import { default as Server } from './Server';\n\nmodule.exports = Server;\nexport default Server;\n"],"names":["ApiConfig","_ref","basePath","cookieKey","token","_token","_createClass","key","get","set","value","niledatabase_url","Config","_config","_config$api$basePath","_config$api","_config$api$cookieKey","_config$api2","_config$api3","_config$db","_config$db2","_config$db3","_config$db4","_config$db5","database","workspace","db","api","_tenantId","_userId","String","tenantId","userId","host","connection","port","Number","_extends","ResponseError","body","init","response","Response","Events","Eventer","events","_proto","prototype","publish","eventName","callbackList","_iterator","_createForOfIteratorHelperLoose","_step","done","callback","subscribe","push","eventer","updateTenantId","Tenant","watchTenantId","cb","updateUserId","User","watchUserId","updateToken","val","Token","watchToken","watchEvictPool","EvictPool","evictPool","X_NILE_TENANT","X_NILE_USER_ID","getTokenFromCookie","headers","_headers$get","cookie","split","_cookies","parts","cookieParts","_cookie","slice","join","name","_iterator2","_step2","getTenantFromHttp","config","cookieTenant","getUserFromHttp","_headers$get2","jwt","decodeJwt","sub","_fetch","_x","_x2","_x3","_fetch2","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","opts","_response$status","url","basicHeaders","authHeader","_config$api4","useableUrl","res","_res","message","_res2","_res2$errors","_message","wrap","_callee$","_context","prev","next","Headers","includes","abrupt","status","replace","encodeURIComponent","fetch","e","console","log","sent","json","t0","errors","stop","Requester","_Config","_this","call","post","req","request","_ref2","_callee2","_callee2$","_context2","_x4","_x5","_x6","put","_ref3","_callee3","_callee3$","_context3","_x7","_x8","_x9","_inheritsLoose","rawRequest","_rawRequest","_callee4","method","_init","_callee4$","_context4","_x10","_x11","_x12","_x13","_request","_callee5","_headers","_callee5$","_context5","Request","JSON","stringify","undefined","text","isEmpty","isObject","Object","values","length","_x14","_x15","_x16","_x17","Auth","login","_requester","params","sso","providerRes","providers","_this$api","tenants","tenant","URL","searchParams","URLSearchParams","listProviders","clone","append","redirectURI","loginSSOUrl","loginUrl","error","loginSSO","redirectUrl","ssoLogin","_this$api2","accessToken","formData","provider","_this$tenantId","signUp","_this$api3","_token$token","_token$token2","id","signUpUrl","listTenantProviders","_ref4","listTenantProvidersUrl","createProvider","_ref5","providerName","updateProviderUrl","updateProvider","_ref6","_callee6","_callee6$","_context6","_ref7","_callee7","_body","_callee7$","_context7","providerUrl","email","getSSOCallbackUrl","param","Users","createTenantUser","tenantUsersUrl","listUsers","usersUrl","updateUser","listTenantUsers","me","meUrl","baseUrl","Tenants","createTenant","tenantsUrl","getTenant","tenantUrl","NileDatabase","_config$db$connection","_config$db$connection2","_config$db$pool","knex","timer","poolConfig","min","max","idleTimeoutMillis","pool","client","afterCreate","makeAfterCreate","startTimeout","on","_this2","clearTimeout","setTimeout","destroy","conn","errorHandler","query","warn","err","DBManager","connections","Map","makeId","has","getConnection","existing","getServerId","cfg","makeServerId","Buffer","from","toString","auth","users","Server","manager","servers","setConfig","getInstance","serverId","currentServerId","updatedConfig","_this$config","Nile","server","module","exports"],"mappings":"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"}