@niledatabase/server 2.1.1 → 2.1.2-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs.development.js","sources":["../src/utils/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Config/index.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 { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nexport default function Logger(\n config: void | Config | ServerConfig,\n ...params: unknown[]\n) {\n return {\n info(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.info('[niledb]', ...params, ...args);\n }\n },\n warn(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[niledb]', ...params, ...args);\n }\n },\n error(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.error('[niledb]', '[ERROR]', ...params, ...args);\n }\n },\n };\n}\n","import 'dotenv/config';\nimport { ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nexport type EnvConfig = {\n logger?: string;\n config?: ServerConfig;\n};\n\nexport const getDatbaseId = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[databaseId]');\n if (config?.databaseId) {\n logger && info(logger, 'config', config.databaseId);\n return String(config?.databaseId);\n }\n logger && info(logger, 'env', process.env.NILEDB_ID);\n return process.env.NILEDB_ID;\n};\nexport const getUsername = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[username]');\n if (config?.user) {\n logger && info(logger, 'config', config.user);\n return String(config?.user);\n }\n logger && info(logger, '.env', process.env.NILEDB_USER);\n return process.env.NILEDB_USER;\n};\n\nexport const getPassword = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const log = logProtector(logger);\n const { info } = Logger(config, '[password]');\n if (config?.password) {\n log && info(logger, 'config', config.password);\n\n return String(config.password);\n }\n\n log && info(logger, '.env', process.env.NILEDB_PASSWORD);\n return process.env.NILEDB_PASSWORD;\n};\n\nexport const getInfoBearer = (cfg: EnvConfig) => {\n return `${getUsername(cfg)}:${getPassword(cfg)}`;\n};\n\nexport const getToken = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[token]');\n if (config?.api?.token) {\n logger && info(logger, 'config', config.api?.token);\n return String(config.api?.token);\n }\n if (process.env.NILEDB_TOKEN) {\n logger && info(logger, '.env', process.env.NILEDB_TOKEN);\n return process.env.NILEDB_TOKEN;\n }\n return undefined;\n};\n\nexport const getDatabaseName = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[databaseName]');\n if (config?.databaseName) {\n logger && info(logger, 'config', config.databaseName);\n return String(config.databaseName);\n }\n if (process.env.NILEDB_NAME) {\n logger && info(logger, 'config', process.env.NILEDB_NAME);\n return process.env.NILEDB_NAME;\n }\n return null;\n};\n\nexport const getTenantId = (cfg: EnvConfig): string | null => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[tenantId]');\n if (config?.tenantId) {\n logger && info(logger, 'config', config.tenantId);\n return config.tenantId;\n }\n\n if (process.env.NILEDB_TENANT) {\n logger && info(logger, '.env', process.env.NILEDB_TENANT);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\nexport const getBasePath = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n if (basePath) {\n logger && info(logger, 'config', config?.api?.basePath);\n return basePath;\n }\n\n if (process.env.NILEDB_API) {\n logger && info(logger, '.env', process.env.NILEDB_API);\n return `https://${process.env.NILEDB_API}`;\n }\n\n logger && info(logger, 'default', process.env.NILEDB_API);\n return 'https://api.thenile.dev';\n};\n\nexport function getDbHost(cfg: EnvConfig) {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.host]');\n\n if (config?.db && config.db.host) {\n logger && info(logger, 'config', config?.db.host);\n return config.db.host;\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(logger, '.env', process.env.NILEDB_HOST);\n return process.env.NILEDB_HOST;\n }\n\n logger && info(logger, 'default', 'db.thenile.dev');\n return 'db.thenile.dev';\n}\n\nexport function getDbPort(cfg: EnvConfig): number {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.port]');\n if (config?.db?.port && config.db.port != null) {\n logger && info(logger, 'config', config?.db.port);\n return Number(config.db?.port);\n }\n\n if (process.env.NILEDB_PORT) {\n logger && info(logger, 'config', process.env.NILEDB_PORT);\n return Number(process.env.NILEDB_PORT);\n }\n logger && info(logger, 'default', 5432);\n return 5432;\n}\n\n// don't let people accidentally log secrets to production\nconst logProtector = (logger?: string) => {\n return process.env.NODE_ENV === 'development' ||\n process.env.NODE_ENV === 'test'\n ? logger\n : null;\n};\n","import syncFetch from 'sync-fetch';\n\nimport { NilePoolConfig, ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getDatabaseName,\n getDatbaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n} from './envVars';\n\ntype Database = {\n name: string;\n apiHost: string;\n dbHost: string;\n id: string;\n message?: string; // is actually an error\n status: 'READY' | string;\n};\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this._token = token;\n }\n\n public get token(): string | undefined {\n return this._token;\n }\n\n public set token(value: string | undefined) {\n this._token = value;\n }\n}\n\nexport class Config {\n user: string;\n password: string;\n databaseId: string;\n databaseName: string;\n\n debug: boolean;\n\n db: NilePoolConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(config: ServerConfig, allowPhoneHome?: boolean) {\n const { info, error } = Logger(config, '[config]');\n\n const envVarConfig: EnvConfig = {\n config,\n };\n if (allowPhoneHome) {\n envVarConfig.logger = '[config]';\n }\n this.databaseId = getDatbaseId(envVarConfig) as string;\n this.user = getUsername(envVarConfig) as string;\n this.password = getPassword(envVarConfig) as string;\n this.databaseName = getDatabaseName(envVarConfig) as string;\n this._tenantId = getTenantId(envVarConfig);\n this.debug = Boolean(config?.debug);\n\n let basePath = getBasePath(envVarConfig);\n\n let host = getDbHost(envVarConfig);\n const port = getDbPort(envVarConfig);\n\n this._userId = config?.userId;\n\n if (allowPhoneHome && (!host || !this.databaseName || !this.databaseId)) {\n const database = getInfo(config);\n info('[fetched database]', database);\n if (process.env.NODE_ENV !== 'TEST') {\n if ('message' in database) {\n if ('statusCode' in database) {\n error(database);\n throw new Error('HTTP error has occured');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please set or remove NILEDB_API, NILEDB_NAME, and NILEDB_HOST in your .env file.'\n );\n }\n }\n\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n this.databaseId = id;\n this.databaseName = name;\n // gotta do something dumb here\n const dburl = new URL(dbHost);\n const apiurl = new URL(apiHost);\n host = dburl.host;\n basePath = apiurl.origin;\n }\n }\n }\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host,\n port,\n database: this.databaseName,\n ...(typeof config?.db === 'object' ? config.db : {}),\n };\n if (allowPhoneHome) {\n info(this);\n }\n }\n}\n\nfunction getInfo(config: ServerConfig): Database {\n const basePath = getBasePath({ config });\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${basePath}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n const { info, error } = Logger(config, '[getInfo]');\n info(url.href);\n const res = syncFetch(url, {\n headers: {\n Authorization: `Bearer ${getInfoBearer({ config })}`,\n },\n });\n const possibleError = res.clone();\n try {\n const json: Database = res.json();\n if (res.status === 404) {\n info('is the configured databaseName correct?');\n }\n if (json.status && json.status !== 'READY') {\n return { message: 'Database is not ready yet' } as Database;\n }\n return json;\n } catch (e) {\n const message = possibleError.text();\n error(message);\n return { message } as Database;\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';\nimport { getToken } from './Config/envVars';\nimport Logger from './Logger';\n\nexport const X_NILE_TENANT = 'x-nile-tenantId';\nexport const X_NILE_USER_ID = 'x-nile-userId';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config: Config) {\n const cookieTenant = getTokenFromCookie(headers, 'tenantId');\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const { info, error } = Logger(config, '[server]');\n\n const url = `${config.api?.basePath}${path}`;\n const cookieKey = config.api?.cookieKey;\n const headers = new Headers(opts?.headers);\n const basicHeaders = new Headers();\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n basicHeaders.set('Authorization', `Bearer ${token}`);\n } else if (getToken({ config })) {\n basicHeaders.set('Authorization', `Bearer ${getToken({ config })}`);\n }\n }\n\n const tenantId = getTenantFromHttp(headers, config);\n updateTenantId(tenantId);\n const userId = getUserFromHttp(headers, config);\n updateUserId(userId);\n if (url.includes('{tenantId}') && !tenantId) {\n return new ResponseError('tenantId is not set for request', {\n status: 400,\n });\n }\n const useableUrl = url\n .replace('{tenantId}', encodeURIComponent(String(tenantId)))\n .replace('{userId}', encodeURIComponent(String(userId)));\n\n info('[fetch]', useableUrl);\n\n const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n error('[fetch]', '[response]', e);\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n if (typeof response.clone === 'function') {\n info('[fetch]', '[response]', await response.clone().json());\n }\n return response;\n }\n\n let res;\n const errorHandler =\n typeof response?.clone === 'function' ? response.clone() : null;\n let msg = '';\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n if (errorHandler) {\n msg = await errorHandler.text();\n if (msg) {\n error('[fetch]', '[response]', `[status: ${errorHandler.status}]`, msg);\n }\n }\n if (!msg) {\n error('[fetch]', '[response]', e);\n }\n }\n if (msg) {\n return new ResponseError(msg, { status: errorHandler?.status });\n }\n\n if (res && 'message' in res) {\n const { message } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n 'UNHANDLED ERROR'\n );\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\n\nimport { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three optios here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n isEmpty(req) ||\n (isObject(req) && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n post = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('POST', url, req, init);\n };\n\n get = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('GET', url, req, init);\n };\n\n put = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('PUT', url, req, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\nimport { ResponseError } from '../utils/ResponseError';\nimport {\n X_NILE_TENANT,\n X_NILE_USER_ID,\n getTenantFromHttp,\n} from '../utils/fetch';\nimport { updateToken, updateUserId } from '../utils/Event';\nimport { CreateBasicUserRequest, LoginUserResponse } from '../users';\n\nexport interface TenantSSORegistration {\n configUrl: string;\n clientId: string;\n clientSecret: string;\n redirectURI: string;\n emailDomains: Array<string>;\n enabled?: boolean;\n}\n\nexport interface SSOProvider {\n readonly id?: string;\n tenantId?: string;\n provider?: string;\n configUrl: string;\n clientSecret?: string;\n clientId: string;\n redirectURI: string;\n emailDomains?: Array<string>;\n enabled?: boolean;\n}\nexport default class Auth extends Config {\n constructor(config: Config) {\n super(config);\n }\n get loginUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/login`;\n }\n\n login = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers({ 'content-type': 'application/json' });\n const _requester = new Requester(this);\n\n const params =\n req instanceof Request\n ? new URL(req.url).searchParams\n : new URLSearchParams();\n\n const sso = params.get('sso');\n\n if (sso === 'true') {\n const providerRes = await this.listProviders(\n (req as Request).clone(),\n init\n );\n // if you have a provider, log them in\n if (\n providerRes &&\n providerRes.status >= 200 &&\n providerRes.status < 300\n ) {\n const providers = await new Response(providerRes.body).json();\n if (providers.length > 0) {\n if (providers.length > 1) {\n return new Response(JSON.stringify(providers), { status: 200 });\n // a user has to make a choice\n }\n\n // is there a way to do this? probably not.\n headers.set(X_NILE_TENANT, providers[0].tenantId);\n headers.append(\n 'set-cookie',\n `tenantId=${providers[0].tenantId}; path=/; httponly;`\n );\n // const ssoResp = await this.loginSSO(req);\n return new Response(\n JSON.stringify({\n redirectURI: `${this.api.basePath}${this.loginSSOUrl('okta')}`,\n }),\n { status: 200 }\n );\n // make it a client side redirect, because of the headers\n // if there is no provider, require a password.\n }\n }\n }\n\n const res = await _requester.post(req, this.loginUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { tenants } = token;\n const tenant = tenants?.values();\n const tenantId = tenant?.next().value;\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n updateToken(token.token.jwt);\n\n return new Response(JSON.stringify(token), { status: 200, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n loginSSO = (redirectUrl: string) => {\n const ssoLogin = async (\n req: NileRequest<unknown>\n ): NileResponse<Response> => {\n const headers = new Headers();\n const body = await (req as Request).formData();\n const accessToken = (await body.get('access_token')) as string;\n const tenantId = (await body.get('tenantId')) as string;\n const cookie = `${this.api?.cookieKey}=${accessToken}; path=/; samesite=lax; httponly;`;\n updateToken(accessToken);\n headers.append('set-cookie', cookie);\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n headers.set('Location', redirectUrl);\n return new Response(null, {\n headers,\n status: 303,\n });\n };\n return ssoLogin;\n };\n\n loginSSOUrl = (provider: string) => {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }/auth/oidc/providers/${provider}/login`;\n };\n\n get signUpUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users`;\n }\n\n signUp = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers();\n const _requester = new Requester(this);\n const res = await _requester.post(req, this.signUpUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token?.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { id } = token;\n updateToken(token.token?.jwt);\n updateUserId(id);\n headers.set(X_NILE_USER_ID, id);\n headers.append('set-cookie', `userId=${id}; path=/; httponly;`);\n return new Response(JSON.stringify(token), { status: 201, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n updateProviderUrl(providerName: string) {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers/${encodeURIComponent(providerName)}`;\n }\n\n get listTenantProvidersUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers`;\n }\n\n listTenantProviders = async (\n req: NileRequest<void | Headers>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.listTenantProvidersUrl, init);\n };\n\n createProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.post(req, this.updateProviderUrl(providerName), init);\n };\n\n updateProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.put(req, this.updateProviderUrl(providerName), init);\n };\n\n providerUrl(email?: undefined | string) {\n return `/databases/${encodeURIComponent(\n this.databaseId\n )}/tenants/auth/oidc/providers${\n email ? `?email=${encodeURIComponent(email)}` : ''\n }`;\n }\n\n listProviders = async (\n req: NileRequest<void | CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n let body: { email: string } | undefined;\n // this is a get. Get the email from the response body so the request is filtered.\n if (req && 'body' in req) {\n body = await new Response(req.body as BodyInit).json();\n }\n return _requester.get(req, this.providerUrl(body?.email), init);\n };\n\n getSSOCallbackUrl = (param: Headers | string) => {\n let tenantId;\n if (typeof tenantId === 'string') {\n tenantId = param;\n } else if (param instanceof Headers) {\n tenantId = getTenantFromHttp(param, this);\n }\n\n return `/databases/${this.databaseId}/tenants/${tenantId}/auth/oidc/callback`;\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface CreateBasicUserRequest {\n email: string;\n password: string;\n preferredName?: string;\n newTenant?: string;\n}\nexport const LoginUserResponseTokenTypeEnum = {\n AccessToken: 'ACCESS_TOKEN',\n RefreshToken: 'REFRESH_TOKEN',\n IdToken: 'ID_TOKEN',\n} as const;\nexport type LoginUserResponseTokenTypeEnum =\n (typeof LoginUserResponseTokenTypeEnum)[keyof typeof LoginUserResponseTokenTypeEnum];\n\nexport interface LoginUserResponseToken {\n jwt: string;\n maxAge: number;\n type: LoginUserResponseTokenTypeEnum;\n}\nexport interface LoginUserResponse {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n id: string;\n token: LoginUserResponseToken;\n}\nexport interface User {\n id?: string;\n tenants?: Set<string>;\n email?: string;\n preferredName?: string;\n}\n\nexport default class Users extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n get baseUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}`;\n }\n\n get usersUrl() {\n return `${this.baseUrl}/users`;\n }\n\n get tenantUsersUrl() {\n return `${this.baseUrl}/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n\n createTenantUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const _requester = new Requester(this);\n return await _requester.post(req, this.tenantUsersUrl, init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.usersUrl, init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<User>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, init);\n };\n\n listTenantUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.tenantUsersUrl, init);\n };\n\n get meUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/me`;\n }\n\n me = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.meUrl, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface Tenant {\n id: string;\n name?: string;\n}\n\nexport default class Tenants extends Config {\n constructor(config: Config) {\n super(config);\n }\n get tenantsUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants`;\n }\n get tenantUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.post(req, this.tenantsUrl, init);\n };\n\n getTenant = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.tenantUrl, init);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate } from '../types';\nimport Logger from '../utils/Logger';\n\nclass NileDatabase {\n pool: Pool;\n tenantId?: undefined | null | string;\n userId?: undefined | null | string;\n id: string;\n config: Config;\n timer: NodeJS.Timeout | undefined;\n\n constructor(config: Config, id: string) {\n const { warn, info } = Logger(config, '[NileInstance]');\n this.id = id;\n const poolConfig = {\n min: 0,\n max: 10,\n idleTimeoutMillis: 30000,\n ...config.db,\n };\n const { afterCreate, ...remaining } = poolConfig;\n\n config.db = poolConfig;\n this.config = config;\n info(this.config);\n\n this.pool = new Pool(remaining);\n\n if (typeof afterCreate === 'function') {\n warn(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.pool.on('connect', async (client) => {\n info('pool connected');\n const afterCreate: AfterCreate = makeAfterCreate(config);\n afterCreate(client, (err, _client) => {\n if (err) {\n _client.release();\n }\n });\n this.startTimeout();\n });\n this.pool.on('error', async (e) => {\n info('pool failed', e);\n });\n }\n\n startTimeout() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n await this.pool.end();\n evictPool(this.id);\n }, this.config.db.idleTimeoutMillis);\n }\n}\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config): AfterCreate {\n const { warn, info } = Logger(config, '[afterCreate]');\n return (conn, done) => {\n conn.on('error', function errorHandler(error: Error) {\n warn('Connection was terminated by server', error);\n done(error, conn);\n });\n\n if (config.tenantId) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (config.userId) {\n if (!config.tenantId) {\n warn('A user id cannot be set in context without a tenant id');\n }\n query.push(`SET nile.user_id = '${config.userId}'`);\n }\n\n // in this example we use pg driver's connection API\n conn.query(query.join(';'), function (err: Error) {\n if (config.tenantId) {\n info('[tenant id]', config.tenantId);\n }\n if (config.userId) {\n info('[user id]', config.userId);\n }\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\n\nimport NileDatabase from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: Config) {\n const { info } = Logger(config, '[DBManager]');\n this.connections = new Map();\n // add the base one, so you can at least query\n const id = this.makeId();\n info('constructor', id);\n this.connections.set(id, new NileDatabase(new Config(config), id));\n watchEvictPool((id) => {\n if (id && this.connections.has(id)) {\n this.connections.delete(id);\n }\n });\n }\n\n getConnection(config: Config): Pool {\n const { info } = Logger(config, '[DBManager]');\n const id = this.makeId(config.tenantId, config.userId);\n const existing = this.connections.get(id);\n info('# of instances:', this.connections.size);\n if (existing) {\n info('returning existing', id);\n return existing.pool;\n }\n const newOne = new NileDatabase(new Config(config), id);\n this.connections.set(id, newOne);\n info('created new', id);\n info('# of instances:', this.connections.size);\n return newOne.pool;\n }\n}\n","import { ServerConfig } from '../../types';\nimport { Config } from '../Config';\n\nexport const getServerId = (config: ServerConfig) => {\n const cfg = new Config(config);\n return makeServerId(cfg);\n};\nexport const makeServerId = (config: Config) => {\n return Buffer.from(JSON.stringify(config), 'base64').toString();\n};\n","import { Pool } from 'pg';\n\nimport { InstanceConfig, ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport Auth from './auth';\nimport Users from './users';\nimport Tenants from './tenants';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { getServerId, makeServerId } from './utils/Server';\n\ntype Api = {\n auth: Auth;\n users: Users;\n tenants: Tenants;\n};\n\nconst init = (config: Config): [Api] => {\n const auth = new Auth(config);\n const users = new Users(config);\n const tenants = new Tenants(config);\n return [\n {\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 as ServerConfig, true);\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\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, false);\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.databaseId = val;\n this.api.auth.databaseId = val;\n this.api.users.databaseId = val;\n this.api.tenants.databaseId = val;\n }\n }\n\n get userId(): string | undefined | null {\n return this.config.userId;\n }\n\n set userId(userId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.auth.userId = this.config.userId;\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.auth.tenantId = tenantId;\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.auth.api.token = token;\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\n // only need to interact with the knex object\n return this.manager.getConnection(this.config);\n }\n\n /**\n * A utility function if you want to manage different NileDB instances yourself\n * returns the global Server object, an existing server that's already been configured,\n * or a new one if the config isn't in the cache\n */\n\n getInstance(config: 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, false);\n existing.setConfig(updatedConfig);\n // propagage special config items\n existing.tenantId = updatedConfig.tenantId;\n existing.userId = updatedConfig.userId;\n existing.token = updatedConfig.api.token;\n existing.databaseId = updatedConfig.databaseId;\n return existing;\n }\n\n this.servers.set(serverId, new Server(_config));\n return this.servers.get(serverId) as unknown as Server;\n }\n}\n\n// export default Server;\nexport default function Nile(config?: ServerConfig) {\n const server = new Server(config);\n // server.setConfig(new Config(config as ServerConfig, false));\n return server;\n}\n","import { default as Server } from './Server';\n\nmodule.exports = Server;\nexport default Server;\n"],"names":["Logger","config","_len","arguments","length","params","Array","_key","info","debug","_console","_len2","args","_key2","console","apply","concat","warn","_console2","_len3","_key3","error","_console3","_len4","_key4","getDatbaseId","cfg","logger","_Logger","databaseId","String","process","env","NILEDB_ID","getUsername","_Logger2","user","NILEDB_USER","getPassword","log","logProtector","_Logger3","password","NILEDB_PASSWORD","getInfoBearer","getToken","_config$api","_Logger4","api","token","_config$api2","_config$api3","NILEDB_TOKEN","undefined","getDatabaseName","_Logger5","databaseName","NILEDB_NAME","getTenantId","_Logger6","tenantId","NILEDB_TENANT","getBasePath","_config$api4","_Logger7","basePath","_config$api5","NILEDB_API","getDbHost","_Logger8","db","host","NILEDB_HOST","getDbPort","_config$db","_Logger9","port","_config$db2","Number","NILEDB_PORT","ApiConfig","_ref","cookieKey","_token","_createClass","key","get","set","value","Config","allowPhoneHome","_config$api$cookieKey","_tenantId","_userId","envVarConfig","Boolean","userId","database","getInfo","Error","apiHost","dbHost","name","id","dburl","URL","apiurl","origin","_extends","url","searchParams","href","res","syncFetch","headers","Authorization","possibleError","clone","json","status","message","e","text","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$get","cookie","split","_cookies","parts","cookieParts","_cookie","slice","join","_iterator2","_step2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","jwt","decodeJwt","sub","_fetch","_x","_x2","_x3","_fetch2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","opts","_response$status","basicHeaders","authHeader","useableUrl","errorHandler","msg","_res","_res2","_res2$errors","_message","wrap","_callee$","_context","prev","next","Headers","includes","abrupt","replace","encodeURIComponent","fetch","sent","t0","t1","t2","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","isEmpty","isObject","Object","values","_x14","_x15","_x16","_x17","Auth","login","_requester","sso","providerRes","providers","_this$api","tenants","tenant","URLSearchParams","listProviders","append","redirectURI","loginSSOUrl","loginUrl","loginSSO","redirectUrl","ssoLogin","_this$api2","accessToken","formData","provider","_this$tenantId","signUp","_this$api3","_token$token","_token$token2","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","pool","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","_objectWithoutPropertiesLoose","_excluded","Pool","startTimeout","on","client","makeAfterCreate","err","_client","release","_this2","clearTimeout","setTimeout","end","conn","query","DBManager","connections","Map","makeId","has","getConnection","existing","size","newOne","getServerId","makeServerId","Buffer","from","toString","auth","users","Server","manager","servers","DbManager","setConfig","getInstance","_config","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/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Config/index.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 { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nexport default function Logger(\n config: void | Config | ServerConfig,\n ...params: unknown[]\n) {\n return {\n info(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.info('[niledb]', ...params, ...args);\n }\n },\n warn(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[niledb]', ...params, ...args);\n }\n },\n error(...args: unknown[]) {\n if (config?.debug) {\n // eslint-disable-next-line no-console\n console.error('[niledb]', '[ERROR]', ...params, ...args);\n }\n },\n };\n}\n","import 'dotenv/config';\nimport { ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nexport type EnvConfig = {\n logger?: string;\n config?: ServerConfig;\n};\n\nexport const getDatbaseId = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[databaseId]');\n if (config?.databaseId) {\n logger && info(logger, 'config', config.databaseId);\n return String(config?.databaseId);\n }\n logger && info(logger, 'env', process.env.NILEDB_ID);\n return process.env.NILEDB_ID;\n};\nexport const getUsername = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[username]');\n if (config?.user) {\n logger && info(logger, 'config', config.user);\n return String(config?.user);\n }\n logger && info(logger, '.env', process.env.NILEDB_USER);\n return process.env.NILEDB_USER;\n};\n\nexport const getPassword = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const log = logProtector(logger);\n const { info } = Logger(config, '[password]');\n if (config?.password) {\n log && info(logger, 'config', config.password);\n\n return String(config.password);\n }\n\n log && info(logger, '.env', process.env.NILEDB_PASSWORD);\n return process.env.NILEDB_PASSWORD;\n};\n\nexport const getInfoBearer = (cfg: EnvConfig) => {\n return `${getUsername(cfg)}:${getPassword(cfg)}`;\n};\n\nexport const getToken = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[token]');\n if (config?.api?.token) {\n logger && info(logger, 'config', config.api?.token);\n return String(config.api?.token);\n }\n if (process.env.NILEDB_TOKEN) {\n logger && info(logger, '.env', process.env.NILEDB_TOKEN);\n return process.env.NILEDB_TOKEN;\n }\n return undefined;\n};\n\nexport const getDatabaseName = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[databaseName]');\n if (config?.databaseName) {\n logger && info(logger, 'config', config.databaseName);\n return String(config.databaseName);\n }\n if (process.env.NILEDB_NAME) {\n logger && info(logger, 'config', process.env.NILEDB_NAME);\n return process.env.NILEDB_NAME;\n }\n return null;\n};\n\nexport const getTenantId = (cfg: EnvConfig): string | null => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[tenantId]');\n if (config?.tenantId) {\n logger && info(logger, 'config', config.tenantId);\n return config.tenantId;\n }\n\n if (process.env.NILEDB_TENANT) {\n logger && info(logger, '.env', process.env.NILEDB_TENANT);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\nexport const getBasePath = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n if (basePath) {\n logger && info(logger, 'config', config?.api?.basePath);\n return basePath;\n }\n\n if (process.env.NILEDB_API) {\n logger && info(logger, '.env', process.env.NILEDB_API);\n return `https://${process.env.NILEDB_API}`;\n }\n\n logger && info(logger, 'default', process.env.NILEDB_API);\n return 'https://api.thenile.dev';\n};\n\nexport function getDbHost(cfg: EnvConfig) {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.host]');\n\n if (config?.db && config.db.host) {\n logger && info(logger, 'config', config?.db.host);\n return config.db.host;\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(logger, '.env', process.env.NILEDB_HOST);\n return process.env.NILEDB_HOST;\n }\n\n logger && info(logger, 'default', 'db.thenile.dev');\n return 'db.thenile.dev';\n}\n\nexport function getDbPort(cfg: EnvConfig): number {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.port]');\n if (config?.db?.port && config.db.port != null) {\n logger && info(logger, 'config', config?.db.port);\n return Number(config.db?.port);\n }\n\n if (process.env.NILEDB_PORT) {\n logger && info(logger, 'config', process.env.NILEDB_PORT);\n return Number(process.env.NILEDB_PORT);\n }\n logger && info(logger, 'default', 5432);\n return 5432;\n}\n\n// don't let people accidentally log secrets to production\nconst logProtector = (logger?: string) => {\n return process.env.NODE_ENV === 'development' ||\n process.env.NODE_ENV === 'test'\n ? logger\n : null;\n};\n","import syncFetch from 'sync-fetch';\n\nimport { NilePoolConfig, ServerConfig } from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getDatabaseName,\n getDatbaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n} from './envVars';\n\ntype Database = {\n name: string;\n apiHost: string;\n dbHost: string;\n id: string;\n message?: string; // is actually an error\n status: 'READY' | string;\n};\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath: string;\n cookieKey: string;\n token: string | undefined;\n }) {\n this.basePath = basePath;\n this.cookieKey = cookieKey;\n this._token = token;\n }\n\n public get token(): string | undefined {\n return this._token;\n }\n\n public set token(value: string | undefined) {\n this._token = value;\n }\n}\n\nexport class Config {\n user: string;\n password: string;\n databaseId: string;\n databaseName: string;\n\n debug: boolean;\n\n db: NilePoolConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(config: ServerConfig, allowPhoneHome?: boolean) {\n const { info, error } = Logger(config, '[config]');\n\n const envVarConfig: EnvConfig = {\n config,\n };\n if (allowPhoneHome) {\n envVarConfig.logger = '[config]';\n }\n this.databaseId = getDatbaseId(envVarConfig) as string;\n this.user = getUsername(envVarConfig) as string;\n this.password = getPassword(envVarConfig) as string;\n this.databaseName = getDatabaseName(envVarConfig) as string;\n this._tenantId = getTenantId(envVarConfig);\n this.debug = Boolean(config?.debug);\n\n let basePath = getBasePath(envVarConfig);\n\n let host = getDbHost(envVarConfig);\n const port = getDbPort(envVarConfig);\n\n this._userId = config?.userId;\n\n if (allowPhoneHome && (!host || !this.databaseName || !this.databaseId)) {\n const database = getInfo(config);\n info('[fetched database]', database);\n if (process.env.NODE_ENV !== 'TEST') {\n if ('message' in database) {\n if ('statusCode' in database) {\n error(database);\n throw new Error('HTTP error has occured');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please set or remove NILEDB_API, NILEDB_NAME, and NILEDB_HOST in your .env file.'\n );\n }\n }\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n this.databaseId = id;\n this.databaseName = name;\n // gotta do something dumb here\n const dburl = new URL(dbHost);\n const apiurl = new URL(apiHost);\n host = dburl.host;\n basePath = apiurl.origin;\n }\n }\n }\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host,\n port,\n database: this.databaseName,\n ...(typeof config?.db === 'object' ? config.db : {}),\n };\n if (allowPhoneHome) {\n info(this);\n }\n }\n}\n\nfunction getInfo(config: ServerConfig): Database {\n const basePath = getBasePath({ config });\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${basePath}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n const { info, error } = Logger(config, '[getInfo]');\n info(url.href);\n const res = syncFetch(url, {\n headers: {\n Authorization: `Bearer ${getInfoBearer({ config })}`,\n },\n });\n const possibleError = res.clone();\n try {\n const json: Database = res.json();\n if (res.status === 404) {\n info('is the configured databaseName correct?');\n }\n if (json.status && json.status !== 'READY') {\n return { message: 'Database is not ready yet' } as Database;\n }\n return json;\n } catch (e) {\n const message = possibleError.text();\n error(message);\n return { message } as Database;\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';\nimport { getToken } from './Config/envVars';\nimport Logger from './Logger';\n\nexport const X_NILE_TENANT = 'x-nile-tenantId';\nexport const X_NILE_USER_ID = 'x-nile-userId';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config: Config) {\n const cookieTenant = getTokenFromCookie(headers, 'tenantId');\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const { info, error } = Logger(config, '[server]');\n\n const url = `${config.api?.basePath}${path}`;\n const cookieKey = config.api?.cookieKey;\n const headers = new Headers(opts?.headers);\n const basicHeaders = new Headers();\n basicHeaders.set('content-type', 'application/json; charset=utf-8');\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n basicHeaders.set('Authorization', `Bearer ${token}`);\n } else if (getToken({ config })) {\n basicHeaders.set('Authorization', `Bearer ${getToken({ config })}`);\n }\n }\n\n const tenantId = getTenantFromHttp(headers, config);\n updateTenantId(tenantId);\n const userId = getUserFromHttp(headers, config);\n updateUserId(userId);\n if (url.includes('{tenantId}') && !tenantId) {\n return new ResponseError('tenantId is not set for request', {\n status: 400,\n });\n }\n const useableUrl = url\n .replace('{tenantId}', encodeURIComponent(String(tenantId)))\n .replace('{userId}', encodeURIComponent(String(userId)));\n\n info('[fetch]', useableUrl);\n\n const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n error('[fetch]', '[response]', e);\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n if (typeof response.clone === 'function') {\n info('[fetch]', '[response]', await response.clone().json());\n }\n return response;\n }\n\n let res;\n const errorHandler =\n typeof response?.clone === 'function' ? response.clone() : null;\n let msg = '';\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n if (errorHandler) {\n msg = await errorHandler.text();\n if (msg) {\n error('[fetch]', '[response]', `[status: ${errorHandler.status}]`, msg);\n }\n }\n if (!msg) {\n error('[fetch]', '[response]', e);\n }\n }\n if (msg) {\n return new ResponseError(msg, { status: errorHandler?.status });\n }\n\n if (res && 'message' in res) {\n const { message } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n message\n );\n return new ResponseError(message, { status: 400 });\n }\n\n error(\n '[fetch]',\n '[response]',\n `[status: ${errorHandler?.status}]`,\n 'UNHANDLED ERROR'\n );\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isObject from 'lodash/isObject';\n\nimport { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three optios here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n isEmpty(req) ||\n (isObject(req) && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n post = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('POST', url, req, init);\n };\n\n get = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('GET', url, req, init);\n };\n\n put = async (\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> => {\n return await this.request('PUT', url, req, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\nimport { ResponseError } from '../utils/ResponseError';\nimport {\n X_NILE_TENANT,\n X_NILE_USER_ID,\n getTenantFromHttp,\n} from '../utils/fetch';\nimport { updateToken, updateUserId } from '../utils/Event';\nimport { CreateBasicUserRequest, LoginUserResponse } from '../users';\n\nexport interface TenantSSORegistration {\n configUrl: string;\n clientId: string;\n clientSecret: string;\n redirectURI: string;\n emailDomains: Array<string>;\n enabled?: boolean;\n}\n\nexport interface SSOProvider {\n readonly id?: string;\n tenantId?: string;\n provider?: string;\n configUrl: string;\n clientSecret?: string;\n clientId: string;\n redirectURI: string;\n emailDomains?: Array<string>;\n enabled?: boolean;\n}\nexport default class Auth extends Config {\n constructor(config: Config) {\n super(config);\n }\n get loginUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/login`;\n }\n\n login = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers({ 'content-type': 'application/json' });\n const _requester = new Requester(this);\n\n const params =\n req instanceof Request\n ? new URL(req.url).searchParams\n : new URLSearchParams();\n\n const sso = params.get('sso');\n\n if (sso === 'true') {\n const providerRes = await this.listProviders(\n (req as Request).clone(),\n init\n );\n // if you have a provider, log them in\n if (\n providerRes &&\n providerRes.status >= 200 &&\n providerRes.status < 300\n ) {\n const providers = await new Response(providerRes.body).json();\n if (providers.length > 0) {\n if (providers.length > 1) {\n return new Response(JSON.stringify(providers), { status: 200 });\n // a user has to make a choice\n }\n\n // is there a way to do this? probably not.\n headers.set(X_NILE_TENANT, providers[0].tenantId);\n headers.append(\n 'set-cookie',\n `tenantId=${providers[0].tenantId}; path=/; httponly;`\n );\n // const ssoResp = await this.loginSSO(req);\n return new Response(\n JSON.stringify({\n redirectURI: `${this.api.basePath}${this.loginSSOUrl('okta')}`,\n }),\n { status: 200 }\n );\n // make it a client side redirect, because of the headers\n // if there is no provider, require a password.\n }\n }\n }\n\n const res = await _requester.post(req, this.loginUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { tenants } = token;\n const tenant = tenants?.values();\n const tenantId = tenant?.next().value;\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n updateToken(token.token.jwt);\n\n return new Response(JSON.stringify(token), { status: 200, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n loginSSO = (redirectUrl: string) => {\n const ssoLogin = async (\n req: NileRequest<unknown>\n ): NileResponse<Response> => {\n const headers = new Headers();\n const body = await (req as Request).formData();\n const accessToken = (await body.get('access_token')) as string;\n const tenantId = (await body.get('tenantId')) as string;\n const cookie = `${this.api?.cookieKey}=${accessToken}; path=/; samesite=lax; httponly;`;\n updateToken(accessToken);\n headers.append('set-cookie', cookie);\n headers.set(X_NILE_TENANT, tenantId);\n headers.append('set-cookie', `tenantId=${tenantId}; path=/; httponly;`);\n headers.set('Location', redirectUrl);\n return new Response(null, {\n headers,\n status: 303,\n });\n };\n return ssoLogin;\n };\n\n loginSSOUrl = (provider: string) => {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }/auth/oidc/providers/${provider}/login`;\n };\n\n get signUpUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users`;\n }\n\n signUp = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const headers = new Headers();\n const _requester = new Requester(this);\n const res = await _requester.post(req, this.signUpUrl, init).catch((e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n return e;\n });\n if (res instanceof ResponseError) {\n return res.response;\n }\n if (res && res.status >= 200 && res.status < 300) {\n const token: LoginUserResponse = await res.json();\n const cookie = `${this.api?.cookieKey}=${token.token?.jwt}; path=/; samesite=lax; httponly;`;\n headers.append('set-cookie', cookie);\n const { id } = token;\n updateToken(token.token?.jwt);\n updateUserId(id);\n headers.set(X_NILE_USER_ID, id);\n headers.append('set-cookie', `userId=${id}; path=/; httponly;`);\n return new Response(JSON.stringify(token), { status: 201, headers });\n }\n const text = await res.text();\n return new Response(text, { status: res.status });\n };\n\n updateProviderUrl(providerName: string) {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers/${encodeURIComponent(providerName)}`;\n }\n\n get listTenantProvidersUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ? encodeURIComponent(this.tenantId) : '{tenantId}'\n }/auth/oidc/providers`;\n }\n\n listTenantProviders = async (\n req: NileRequest<void | Headers>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.listTenantProvidersUrl, init);\n };\n\n createProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.post(req, this.updateProviderUrl(providerName), init);\n };\n\n updateProvider = async (\n req: NileRequest<SSOProvider>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration> => {\n const _requester = new Requester(this);\n const providerName = 'okta';\n return _requester.put(req, this.updateProviderUrl(providerName), init);\n };\n\n providerUrl(email?: undefined | string) {\n return `/databases/${encodeURIComponent(\n this.databaseId\n )}/tenants/auth/oidc/providers${\n email ? `?email=${encodeURIComponent(email)}` : ''\n }`;\n }\n\n listProviders = async (\n req: NileRequest<void | CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<TenantSSORegistration[]> => {\n const _requester = new Requester(this);\n let body: { email: string } | undefined;\n // this is a get. Get the email from the response body so the request is filtered.\n if (req && 'body' in req) {\n body = await new Response(req.body as BodyInit).json();\n }\n return _requester.get(req, this.providerUrl(body?.email), init);\n };\n\n getSSOCallbackUrl = (param: Headers | string) => {\n let tenantId;\n if (typeof tenantId === 'string') {\n tenantId = param;\n } else if (param instanceof Headers) {\n tenantId = getTenantFromHttp(param, this);\n }\n\n return `/databases/${this.databaseId}/tenants/${tenantId}/auth/oidc/callback`;\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface CreateBasicUserRequest {\n email: string;\n password: string;\n preferredName?: string;\n newTenant?: string;\n}\nexport const LoginUserResponseTokenTypeEnum = {\n AccessToken: 'ACCESS_TOKEN',\n RefreshToken: 'REFRESH_TOKEN',\n IdToken: 'ID_TOKEN',\n} as const;\nexport type LoginUserResponseTokenTypeEnum =\n (typeof LoginUserResponseTokenTypeEnum)[keyof typeof LoginUserResponseTokenTypeEnum];\n\nexport interface LoginUserResponseToken {\n jwt: string;\n maxAge: number;\n type: LoginUserResponseTokenTypeEnum;\n}\nexport interface LoginUserResponse {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n id: string;\n token: LoginUserResponseToken;\n}\nexport interface User {\n id?: string;\n tenants?: Set<string>;\n email?: string;\n preferredName?: string;\n}\n\nexport default class Users extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n get baseUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}`;\n }\n\n get usersUrl() {\n return `${this.baseUrl}/users`;\n }\n\n get tenantUsersUrl() {\n return `${this.baseUrl}/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n\n createTenantUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): NileResponse<LoginUserResponse> => {\n const _requester = new Requester(this);\n return await _requester.post(req, this.tenantUsersUrl, init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.usersUrl, init);\n };\n\n updateUser = async (\n userId: string,\n req: NileRequest<User>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.put(req, `${this.usersUrl}/${userId}`, init);\n };\n\n listTenantUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): NileResponse<User[]> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.tenantUsersUrl, init);\n };\n\n get meUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/users/me`;\n }\n\n me = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<User> => {\n const _requester = new Requester(this);\n return await _requester.get(req, this.meUrl, init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest, NileResponse } from '../utils/Requester';\n\nexport interface Tenant {\n id: string;\n name?: string;\n}\n\nexport default class Tenants extends Config {\n constructor(config: Config) {\n super(config);\n }\n get tenantsUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants`;\n }\n get tenantUrl() {\n return `/databases/${encodeURIComponent(this.databaseId)}/tenants/${\n this.tenantId ?? '{tenantId}'\n }`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.post(req, this.tenantsUrl, init);\n };\n\n getTenant = async (\n req: NileRequest<void>,\n init?: RequestInit\n ): NileResponse<Tenant> => {\n const _requester = new Requester(this);\n return _requester.get(req, this.tenantUrl, init);\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate } from '../types';\nimport Logger from '../utils/Logger';\n\nclass NileDatabase {\n pool: Pool;\n tenantId?: undefined | null | string;\n userId?: undefined | null | string;\n id: string;\n config: Config;\n timer: NodeJS.Timeout | undefined;\n\n constructor(config: Config, id: string) {\n const { warn, info } = Logger(config, '[NileInstance]');\n this.id = id;\n const poolConfig = {\n min: 0,\n max: 10,\n idleTimeoutMillis: 30000,\n ...config.db,\n };\n const { afterCreate, ...remaining } = poolConfig;\n\n config.db = poolConfig;\n this.config = config;\n info(this.config);\n\n this.pool = new Pool(remaining);\n\n if (typeof afterCreate === 'function') {\n warn(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.pool.on('connect', async (client) => {\n info('pool connected');\n const afterCreate: AfterCreate = makeAfterCreate(config);\n afterCreate(client, (err, _client) => {\n if (err) {\n _client.release();\n }\n });\n this.startTimeout();\n });\n this.pool.on('error', async (e) => {\n info('pool failed', e);\n });\n }\n\n startTimeout() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(async () => {\n await this.pool.end();\n evictPool(this.id);\n }, this.config.db.idleTimeoutMillis);\n }\n}\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config): AfterCreate {\n const { warn, info } = Logger(config, '[afterCreate]');\n return (conn, done) => {\n conn.on('error', function errorHandler(error: Error) {\n warn('Connection was terminated by server', error);\n done(error, conn);\n });\n\n if (config.tenantId) {\n const query = [`SET nile.tenant_id = '${config.tenantId}'`];\n if (config.userId) {\n if (!config.tenantId) {\n warn('A user id cannot be set in context without a tenant id');\n }\n query.push(`SET nile.user_id = '${config.userId}'`);\n }\n\n // in this example we use pg driver's connection API\n conn.query(query.join(';'), function (err: Error) {\n if (config.tenantId) {\n info('[tenant id]', config.tenantId);\n }\n if (config.userId) {\n info('[user id]', config.userId);\n }\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\n\nimport NileDatabase from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: Config) {\n const { info } = Logger(config, '[DBManager]');\n this.connections = new Map();\n // add the base one, so you can at least query\n const id = this.makeId();\n info('constructor', id);\n this.connections.set(id, new NileDatabase(new Config(config), id));\n watchEvictPool((id) => {\n if (id && this.connections.has(id)) {\n this.connections.delete(id);\n }\n });\n }\n\n getConnection(config: Config): Pool {\n const { info } = Logger(config, '[DBManager]');\n const id = this.makeId(config.tenantId, config.userId);\n const existing = this.connections.get(id);\n info('# of instances:', this.connections.size);\n if (existing) {\n info('returning existing', id);\n return existing.pool;\n }\n const newOne = new NileDatabase(new Config(config), id);\n this.connections.set(id, newOne);\n info('created new', id);\n info('# of instances:', this.connections.size);\n return newOne.pool;\n }\n}\n","import { ServerConfig } from '../../types';\nimport { Config } from '../Config';\n\nexport const getServerId = (config: ServerConfig) => {\n const cfg = new Config(config);\n return makeServerId(cfg);\n};\nexport const makeServerId = (config: Config) => {\n return Buffer.from(JSON.stringify(config), 'base64').toString();\n};\n","import { Pool } from 'pg';\n\nimport { ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport Auth from './auth';\nimport Users from './users';\nimport Tenants from './tenants';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { getServerId, makeServerId } from './utils/Server';\n\ntype Api = {\n auth: Auth;\n users: Users;\n tenants: Tenants;\n};\n\nconst init = (config: Config): [Api] => {\n const auth = new Auth(config);\n const users = new Users(config);\n const tenants = new Tenants(config);\n return [\n {\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 as ServerConfig, true);\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\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, false);\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.databaseId = val;\n this.api.auth.databaseId = val;\n this.api.users.databaseId = val;\n this.api.tenants.databaseId = val;\n }\n }\n\n get userId(): string | undefined | null {\n return this.config.userId;\n }\n\n set userId(userId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.auth.userId = this.config.userId;\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.auth.tenantId = tenantId;\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.auth.api.token = token;\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\n // only need to interact with the knex object\n return this.manager.getConnection(this.config);\n }\n\n /**\n * A utility function if you want to manage different NileDB instances yourself\n * returns the global Server object, an existing server that's already been configured,\n * or a new one if the config isn't in the cache\n */\n\n getInstance(config: ServerConfig): Server {\n const _config = { ...this.config, ...config };\n const serverId = getServerId(_config);\n const currentServerId = makeServerId(this.config);\n if (serverId === currentServerId) {\n return this;\n }\n const existing = this.servers.get(serverId);\n\n if (existing) {\n // be sure the config is up to date\n const updatedConfig = new Config(_config, false);\n existing.setConfig(updatedConfig);\n // propagage special config items\n existing.tenantId = updatedConfig.tenantId;\n existing.userId = updatedConfig.userId;\n existing.token = updatedConfig.api.token;\n existing.databaseId = updatedConfig.databaseId;\n return existing;\n }\n\n this.servers.set(serverId, new Server(_config));\n return this.servers.get(serverId) as unknown as Server;\n }\n}\n\n// export default Server;\nexport default function Nile(config?: ServerConfig) {\n const server = new Server(config);\n // server.setConfig(new Config(config as ServerConfig, false));\n return server;\n}\n","import { default as Server } from './Server';\n\nmodule.exports = Server;\nexport default Server;\n"],"names":["Logger","config","_len","arguments","length","params","Array","_key","info","debug","_console","_len2","args","_key2","console","apply","concat","warn","_console2","_len3","_key3","error","_console3","_len4","_key4","getDatbaseId","cfg","logger","_Logger","databaseId","String","process","env","NILEDB_ID","getUsername","_Logger2","user","NILEDB_USER","getPassword","log","logProtector","_Logger3","password","NILEDB_PASSWORD","getInfoBearer","getToken","_config$api","_Logger4","api","token","_config$api2","_config$api3","NILEDB_TOKEN","undefined","getDatabaseName","_Logger5","databaseName","NILEDB_NAME","getTenantId","_Logger6","tenantId","NILEDB_TENANT","getBasePath","_config$api4","_Logger7","basePath","_config$api5","NILEDB_API","getDbHost","_Logger8","db","host","NILEDB_HOST","getDbPort","_config$db","_Logger9","port","_config$db2","Number","NILEDB_PORT","ApiConfig","_ref","cookieKey","_token","_createClass","key","get","set","value","Config","allowPhoneHome","_config$api$cookieKey","_tenantId","_userId","envVarConfig","Boolean","userId","database","getInfo","Error","apiHost","dbHost","name","id","dburl","URL","apiurl","origin","_extends","url","searchParams","href","res","syncFetch","headers","Authorization","possibleError","clone","json","status","message","e","text","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$get","cookie","split","_cookies","parts","cookieParts","_cookie","slice","join","_iterator2","_step2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","jwt","decodeJwt","sub","_fetch","_x","_x2","_x3","_fetch2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","path","opts","_response$status","basicHeaders","authHeader","useableUrl","errorHandler","msg","_res","_res2","_res2$errors","_message","wrap","_callee$","_context","prev","next","Headers","includes","abrupt","replace","encodeURIComponent","fetch","sent","t0","t1","t2","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","isEmpty","isObject","Object","values","_x14","_x15","_x16","_x17","Auth","login","_requester","sso","providerRes","providers","_this$api","tenants","tenant","URLSearchParams","listProviders","append","redirectURI","loginSSOUrl","loginUrl","loginSSO","redirectUrl","ssoLogin","_this$api2","accessToken","formData","provider","_this$tenantId","signUp","_this$api3","_token$token","_token$token2","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","pool","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","_objectWithoutPropertiesLoose","_excluded","Pool","startTimeout","on","client","makeAfterCreate","err","_client","release","_this2","clearTimeout","setTimeout","end","conn","query","DBManager","connections","Map","makeId","has","getConnection","existing","size","newOne","getServerId","makeServerId","Buffer","from","toString","auth","users","Server","manager","servers","DbManager","setConfig","getInstance","_config","serverId","currentServerId","updatedConfig","_this$config","Nile","server","module","exports"],"mappings":"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"}