@niledatabase/server 3.0.0-alpha.37 → 3.0.0-alpha.39
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/dist/api/routes/auth/index.d.ts +1 -0
- package/dist/api/routes/auth/verify-request.d.ts +4 -0
- package/dist/api/types.d.ts +1 -0
- package/dist/api/utils/routes/proxyRoutes.d.ts +1 -0
- package/dist/server.cjs.development.js +166 -132
- package/dist/server.cjs.development.js.map +1 -1
- package/dist/server.cjs.production.min.js +1 -1
- package/dist/server.cjs.production.min.js.map +1 -1
- package/dist/server.esm.js +166 -132
- package/dist/server.esm.js.map +1 -1
- package/dist/users/types.d.ts +1 -0
- package/package.json +2 -2
package/dist/server.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.esm.js","sources":["../src/users/types.ts","../src/utils/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Config/index.ts","../src/utils/Event/index.ts","../src/db/PoolProxy.ts","../src/db/NileInstance.ts","../src/db/DBManager.ts","../src/api/utils/routes/makeRestUrl.ts","../src/api/utils/routes/apiRoutes.ts","../src/api/utils/routes/urlMatches.ts","../src/api/utils/request.ts","../src/api/routes/me/index.ts","../src/api/utils/auth.ts","../src/utils/ResponseError.ts","../src/utils/fetch.ts","../src/api/routes/users/POST.ts","../src/api/routes/users/GET.ts","../src/api/routes/users/[userId]/PUT.ts","../src/api/routes/users/index.ts","../src/api/routes/tenants/[tenantId]/users/GET.ts","../src/api/routes/tenants/[tenantId]/users/POST.ts","../src/api/routes/tenants/[tenantId]/users/[userId]/DELETE.ts","../src/api/routes/tenants/[tenantId]/users/PUT.ts","../src/api/routes/tenants/[tenantId]/users/index.ts","../src/api/routes/tenants/GET.ts","../src/api/routes/tenants/[tenantId]/GET.ts","../src/api/routes/tenants/[tenantId]/DELETE.ts","../src/api/routes/tenants/[tenantId]/PUT.ts","../src/api/routes/tenants/POST.ts","../src/api/routes/tenants/index.ts","../src/api/utils/routes/proxyRoutes.ts","../src/api/routes/auth/signin.ts","../src/api/routes/auth/session.ts","../src/api/routes/auth/providers.ts","../src/api/routes/auth/csrf.ts","../src/api/routes/auth/callback.ts","../src/api/routes/auth/signout.ts","../src/api/routes/auth/error.ts","../src/api/handlers/GET.ts","../src/api/routes/signup/POST.ts","../src/api/routes/signup/index.tsx","../src/api/handlers/POST.ts","../src/api/handlers/DELETE.ts","../src/api/handlers/PUT.ts","../src/api/handlers/index.ts","../src/api/utils/routes/defaultRoutes.ts","../src/utils/Requester/index.ts","../src/auth/index.ts","../src/tenants/index.ts","../src/users/index.ts","../src/Api.ts","../src/Server.ts"],"sourcesContent":["export 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 email: string;\n name: string | null;\n familyName: string | null;\n givenName: string | null;\n picture: string | null;\n created: string;\n updated: string;\n tenants: { id: string }[];\n}\n","/* eslint-disable no-console */\nimport { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[33m';\nconst reset = '\\x1b[0m';\n\nconst baseLogger = (config: void | ServerConfig, ...params: unknown[]) => ({\n info(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.info(\n `[niledb][DEBUG]${params.join('')} ${message}`,\n meta ? `\\n${JSON.stringify(meta, null, 2)}` : ''\n );\n }\n },\n debug(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.debug(\n `[niledb][DEBUG]${params.join('')} ${message}`,\n meta ? `\\n${JSON.stringify(meta, null, 2)}` : ''\n );\n }\n },\n warn(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.warn(\n `${yellow}[niledb][WARN]${reset}${params.join('')} ${message}`,\n JSON.stringify(meta, null, 2)\n );\n }\n },\n error(message: string | unknown, meta?: Record<string, unknown>) {\n console.error(\n `${red}[niledb][ERROR]${reset}${params.join('')} ${message}`,\n meta\n );\n },\n});\n\nexport default function Logger(\n config?: Config | ServerConfig,\n ...params: unknown[]\n) {\n const base = baseLogger(config, params);\n const info = config?.logger?.info ?? base.info;\n const debug = config?.logger?.debug ?? base.debug;\n const warn = config?.logger?.warn ?? base.warn;\n const error = config?.logger?.error ?? base.error;\n return { info, warn, error, debug };\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 getSecureCookies = (cfg: EnvConfig) => {\n const { config } = cfg;\n if (process.env.NILEDB_SECURECOOKIES) {\n return Boolean(process.env.NILEDB_SECURECOOKIES);\n }\n return config?.secureCookies;\n};\nexport const getDatabaseId = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[databaseId]');\n if (config?.databaseId) {\n logger && info(`${logger}[config] ${config.databaseId}`);\n return String(config?.databaseId);\n }\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n return pgUrl.pathname.substring(1);\n } catch (e) {\n // ok to fail\n }\n }\n logger && info(`${logger}[NILEDB_ID] ${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 if (process.env.NILEDB_POSTGRES_URL) {\n const url = new URL(process.env.NILEDB_POSTGRES_URL);\n if (url.username) {\n return url.username;\n }\n }\n logger && info(`${logger}[NILEDB_USER] ${process.env.NILEDB_USER}`);\n return process.env.NILEDB_USER;\n};\n\nexport const getPassword = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const log = logProtector(logger);\n const { info } = Logger(config, '[password]');\n if (config?.password) {\n log && info(`${logger}[config] ${config.password}`);\n\n return String(config.password);\n }\n if (process.env.NILEDB_POSTGRES_URL) {\n const url = new URL(process.env.NILEDB_POSTGRES_URL);\n if (url.password) {\n return url.password;\n }\n }\n\n logger && info(`${logger}[NILEDB_PASSWORD] ${process.env.NILEDB_PASSWORD}`);\n return process.env.NILEDB_PASSWORD;\n};\n\nexport const getInfoBearer = (cfg: EnvConfig) => {\n return `${getUsername(cfg)}:${getPassword(cfg)}`;\n};\n\nexport const getToken = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[token]');\n if (config?.api?.token) {\n logger && info(`${logger}[config] ${config.api?.token}`);\n return String(config.api?.token);\n }\n if (process.env.NILEDB_TOKEN) {\n logger && info(`${logger}[NILEDB_TOKEN] ${process.env.NILEDB_TOKEN}`);\n return process.env.NILEDB_TOKEN;\n }\n return undefined;\n};\n\nexport const getDatabaseName = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[databaseName]');\n if (config?.databaseName) {\n logger && info(`${logger}[config] ${config.databaseName}`);\n return String(config.databaseName);\n }\n if (process.env.NILEDB_NAME) {\n logger && info(`${logger}[NILEDB_NAME] ${process.env.NILEDB_NAME}`);\n return process.env.NILEDB_NAME;\n }\n\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n return pgUrl.pathname.substring(1);\n } catch (e) {\n // ok to fail\n }\n }\n return null;\n};\n\nexport const getTenantId = (cfg: EnvConfig): string | null => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[tenantId]');\n if (config?.tenantId) {\n logger && info(`${logger}[config] ${config.tenantId}`);\n return config.tenantId;\n }\n\n if (process.env.NILEDB_TENANT) {\n logger && info(`${logger}[NILEDB_TENANT] ${process.env.NILEDB_TENANT}`);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\n/**\n * @param cfg various overrides\n * @returns the url for REST to use\n */\nexport const getBasePath = (cfg: EnvConfig): undefined | string => {\n const { config, logger } = cfg;\n const { warn, info, error } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n if (basePath) {\n logger && info(`${logger}[config] ${basePath}`);\n return basePath;\n }\n\n if (process.env.NILEDB_API_URL) {\n logger && info(`${logger}[NILEDB_API_URL] ${process.env.NILEDB_API_URL}`);\n try {\n const apiUrl = new URL(process.env.NILEDB_API_URL);\n return apiUrl.href;\n } catch (e) {\n if (e instanceof Error) {\n error(e.stack);\n }\n }\n }\n\n warn('not set. Must run auto-configuration');\n return undefined;\n};\n\nexport const getControlPlane = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n\n if (config?.configureUrl) {\n logger && info(`${logger}[config] ${config.configureUrl}`);\n return config.configureUrl;\n }\n\n if (process.env.NILEDB_CONFIGURE) {\n logger &&\n info(`${logger}[NILEDB_CONFIGURE] ${process.env.NILEDB_CONFIGURE}`);\n // backwards compatible, but not really\n if (!process.env.NILEDB_CONFIGURE.startsWith('http')) {\n return `https://${process.env.NILEDB_CONFIGURE}`;\n }\n return process.env.NILEDB_CONFIGURE;\n }\n\n logger && info(`${logger}[default] https://global.thenile.dev`);\n return 'https://global.thenile.dev';\n};\n\nexport function getDbHost(cfg: EnvConfig) {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.host]');\n\n if (config?.db && config.db.host) {\n logger && info(`${logger}[config] ${config?.db.host}`);\n return config.db.host;\n }\n\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n logger && info(`${logger}[NILEDB_POSTGRES_URL] ${pgUrl.hostname}`);\n return pgUrl.hostname;\n } catch (e) {\n // ok to fail\n }\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(`${logger}[NILEDB_HOST] ${process.env.NILEDB_HOST}`);\n return process.env.NILEDB_HOST;\n }\n\n logger && info(`${logger}[default] db.thenile.dev`);\n return 'db.thenile.dev';\n}\n\nexport function getDbPort(cfg: EnvConfig): number {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.port]');\n if (config?.db?.port && config.db.port != null) {\n logger && info(`${logger}[config] ${config?.db.port}`);\n return Number(config.db?.port);\n }\n\n if (process.env.NILEDB_PORT) {\n logger && info(`${logger}[NILEDB_PORT] ${process.env.NILEDB_PORT}`);\n return Number(process.env.NILEDB_PORT);\n }\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n if (pgUrl.port) {\n return Number(pgUrl.port);\n }\n } catch (e) {\n // ok to fail\n }\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 {\n Database,\n LoggerType,\n NilePoolConfig,\n ServerConfig,\n} from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getControlPlane,\n getDatabaseName,\n getDatabaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n getSecureCookies,\n} from './envVars';\n\nexport type ConfigRoutes = {\n SIGNIN?: string;\n SESSION?: string;\n PROVIDERS?: string;\n CSRF?: string;\n CALLBACK?: string;\n SIGNOUT?: string;\n ME?: string;\n ERROR?: string;\n TENANTS?: string;\n TENANT_USERS?: string;\n USERS?: string;\n};\n\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string | undefined;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath?: string | undefined;\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 routePrefix?: string;\n routes?: ConfigRoutes;\n logger?: LoggerType;\n secureCookies?: boolean | undefined;\n\n debug: boolean;\n\n db: NilePoolConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(config?: ServerConfig, logger?: string) {\n const envVarConfig: EnvConfig = { config, logger };\n this.user = getUsername(envVarConfig) as string;\n this.logger = config?.logger;\n this.password = getPassword(envVarConfig) as string;\n if (process.env.NODE_ENV !== 'TEST') {\n if (!this.user) {\n throw new Error(\n 'User is required. Set NILEDB_USER as an environment variable or set `user` in the config options.'\n );\n }\n if (!this.password) {\n throw new Error(\n 'Password is required. Set NILEDB_PASSWORD as an environment variable or set `password` in the config options.'\n );\n }\n }\n\n this.secureCookies = getSecureCookies(envVarConfig);\n this.databaseId = getDatabaseId(envVarConfig) as string;\n this.databaseName = getDatabaseName(envVarConfig) as string;\n this._tenantId = getTenantId(envVarConfig);\n this.debug = Boolean(config?.debug);\n this._userId = config?.userId;\n\n const basePath = getBasePath(envVarConfig);\n const { host, port, ...dbConfig } = config?.db ?? {};\n const configuredHost = host ?? getDbHost(envVarConfig);\n const configuredPort = port ?? getDbPort(envVarConfig);\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host: configuredHost,\n port: configuredPort,\n ...dbConfig,\n };\n if (this.databaseName) {\n this.db.database = this.databaseName;\n }\n }\n\n configure = async (config: ServerConfig): Promise<Config> => {\n const { info, error, debug } = Logger(config, '[init]');\n\n const envVarConfig: EnvConfig = {\n config,\n };\n\n const { host, port, ...dbConfig } = config.db ?? {};\n let configuredHost = host ?? getDbHost(envVarConfig);\n const configuredPort = port ?? getDbPort(envVarConfig);\n let basePath = getBasePath(envVarConfig);\n if (configuredHost && this.databaseName && this.databaseId && basePath) {\n info('Already configured, aborting fetch');\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: configuredHost,\n port: configuredPort,\n database: this.databaseName,\n ...dbConfig,\n };\n info('[config set]', { db: this.db, api: this.api });\n return this;\n }\n\n const cp = getControlPlane(envVarConfig);\n\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${cp}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n info(`configuring from ${url.href}`);\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${getInfoBearer({ config })}`,\n },\n }).catch(() => {\n error(`Unable to auto-configure. is ${url} available?`);\n });\n if (!res) {\n return this;\n }\n let database: Database;\n const possibleError = res.clone();\n try {\n const json: Database = await res.json();\n if (res.status === 404) {\n info('is the configured databaseName correct?');\n }\n if (json.status && json.status !== 'READY') {\n database = { message: 'Database is not ready yet' } as Database;\n } else {\n database = json;\n }\n } catch (e) {\n const message = await possibleError.text();\n debug('Unable to auto-configure');\n error(message);\n database = { message } as Database;\n }\n info('[fetched database]', database);\n if (process.env.NODE_ENV !== 'TEST') {\n if ('message' in database) {\n if ('statusCode' in database) {\n error(database);\n throw new Error('HTTP error has occurred');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please remove NILEDB_NAME, NILEDB_API_URL, NILEDB_POSTGRES_URL, and/or NILEDB_HOST from your environment variables.'\n );\n }\n }\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n basePath = basePath || apiHost;\n this.databaseId = id;\n this.databaseName = name;\n const dburl = new URL(dbHost);\n configuredHost = dburl.hostname;\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: configuredHost,\n port: configuredPort,\n database: this.databaseName,\n ...dbConfig,\n };\n info('[config set]', { db: this.db, api: this.api });\n return this;\n };\n}\n","type BusValues = undefined | null | string;\ntype EventFn = (params: BusValues) => void;\nenum Events {\n User = 'userId',\n Tenant = 'tenantId',\n Token = 'token',\n EvictPool = 'EvictPool',\n}\nclass Eventer {\n private events: { [key: string]: EventFn[] } = {};\n\n // Publish event and notify all subscribers\n publish(eventName: string, value: BusValues) {\n const callbackList = this.events[eventName];\n if (callbackList) {\n for (const callback of callbackList) {\n callback(value);\n }\n }\n }\n\n // Subscribe to events\n subscribe(eventName: string, callback: EventFn) {\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n this.events[eventName].push(callback);\n }\n\n // Unsubscribe from an event\n unsubscribe(eventName: string, callback: EventFn) {\n const callbackList = this.events[eventName];\n\n if (!callbackList) {\n return; // Early exit if no event exists\n }\n\n const index = callbackList.indexOf(callback);\n if (index !== -1) {\n callbackList.splice(index, 1); // Remove the callback\n }\n\n // If there are no more listeners, clean up the event\n if (callbackList.length === 0) {\n delete this.events[eventName];\n }\n }\n}\n\n// tenantId manager\nconst eventer = new Eventer();\n\nexport const updateTenantId = (tenantId: BusValues) => {\n eventer.publish(Events.Tenant, tenantId);\n};\n\nexport const watchTenantId = (cb: EventFn) =>\n eventer.subscribe(Events.Tenant, cb);\n\nexport const updateUserId = (userId: BusValues) => {\n eventer.publish(Events.User, userId);\n};\n\nexport const watchUserId = (cb: EventFn) => eventer.subscribe(Events.User, cb);\n\nexport const updateToken = (val: BusValues) => {\n eventer.publish(Events.Token, val);\n};\n\nexport const watchToken = (cb: EventFn) => eventer.subscribe(Events.Token, cb);\n\nexport const watchEvictPool = (cb: EventFn) =>\n eventer.subscribe(Events.EvictPool, cb);\n\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport Logger from '../utils/Logger';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AllowAny = any;\n\nexport function createProxyForPool(pool: Pool, config: Config): Pool {\n const { info, error } = Logger(config, '[pool]');\n return new Proxy<Pool>(pool, {\n get(target: AllowAny, property) {\n if (property === 'query') {\n // give connection string a pass for these problems\n if (!config.db.connectionString) {\n if (!config.user || !config.password) {\n error(\n 'Cannot connect to the database. User and/or password are missing. Generate them at https://console.thenile.dev'\n );\n } else if (!config.db.database) {\n error(\n 'Database name is missing from the config. Call `nile.init()` or set NILEDB_ID in your .env'\n );\n }\n }\n const caller = target[property];\n return function query(...args: AllowAny) {\n info('query', ...args);\n // @ts-expect-error - not mine\n const called = caller.apply(this, args);\n return called;\n };\n }\n return target[property];\n },\n }) as Pool;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate } from '../types';\nimport Logger from '../utils/Logger';\n\nimport { createProxyForPool } from './PoolProxy';\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, debug } = 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 debug(`Connection pool config ${JSON.stringify(this.config.db)}`);\n\n this.pool = createProxyForPool(new Pool(remaining), this.config);\n\n if (typeof afterCreate === 'function') {\n warn(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.pool.on('connect', async (client) => {\n debug(`pool connected ${this.id}`);\n this.startTimeout();\n const afterCreate: AfterCreate = makeAfterCreate(\n config,\n `${this.id}-${this.timer}`\n );\n afterCreate(client, (err) => {\n const { error } = Logger(config, '[after create callback]');\n if (err) {\n clearTimeout(this.timer);\n error('after create failed', {\n message: err.message,\n stack: err.stack,\n });\n evictPool(this.id);\n }\n });\n });\n this.pool.on('error', (err) => {\n clearTimeout(this.timer);\n info(`pool ${this.id} failed`, {\n message: err.message,\n stack: err.stack,\n });\n evictPool(this.id);\n });\n this.pool.on('release', (destroy) => {\n if (destroy) {\n clearTimeout(this.timer);\n evictPool(this.id);\n debug(`destroying pool ${this.id}`);\n }\n });\n }\n\n startTimeout() {\n const { debug } = Logger(this.config, '[NileInstance]');\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(() => {\n debug(\n `Pool reached idleTimeoutMillis. ${this.id} evicted after ${\n Number(this.config.db.idleTimeoutMillis) ?? 30000\n }ms`\n );\n this.pool.end(() => {\n clearTimeout(this.timer);\n evictPool(this.id);\n });\n }, Number(this.config.db.idleTimeoutMillis) ?? 30000);\n }\n shutdown() {\n const { debug } = Logger(this.config, '[NileInstance]');\n debug(`attempting to shut down ${this.id}`);\n clearTimeout(this.timer);\n this.pool.end(() => {\n debug(`${this.id} has been shut down`);\n });\n }\n}\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config, id: string): AfterCreate {\n const { error, warn, debug } = Logger(config, '[afterCreate]');\n return (conn, done) => {\n conn.on('error', function errorHandler(e: Error) {\n error(`Connection ${id} was terminated by server`, {\n message: e.message,\n stack: e.stack,\n });\n done(e, 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 (err) {\n error('query connection failed', {\n cause: err.cause,\n stack: err.stack,\n message: err.message,\n name: err.name,\n id,\n });\n } else {\n if (query.length === 1) {\n debug(`connection context set: tenantId=${config.tenantId}`);\n }\n if (query.length === 2) {\n debug(\n `connection context set: tenantId=${config.tenantId} userId=${config.userId}`\n );\n }\n }\n\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\nimport { ServerConfig } from '../types';\n\nimport NileDatabase from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n cleared: boolean;\n private poolWatcherFn: (id: undefined | null | string) => void;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: ServerConfig) {\n this.cleared = false;\n this.connections = new Map();\n this.poolWatcherFn = this.poolWatcher(config);\n watchEvictPool(this.poolWatcherFn);\n }\n poolWatcher = (config: ServerConfig) => (id: undefined | null | string) => {\n const { info, warn } = Logger(config, '[DBManager]');\n if (id && this.connections.has(id)) {\n info(`Removing ${id} from db connection pool.`);\n const connection = this.connections.get(id);\n connection?.shutdown();\n this.connections.delete(id);\n } else {\n warn(`missed eviction of ${id}`);\n }\n };\n\n getConnection = (config: ServerConfig): Pool => {\n const { info } = Logger(config, '[DBManager]');\n const id = this.makeId(config.tenantId, config.userId);\n\n const existing = this.connections.get(id);\n info(`# of instances: ${this.connections.size}`);\n if (existing) {\n info(`returning existing ${id}`);\n existing.startTimeout();\n return existing.pool;\n }\n const newOne = new NileDatabase(new Config(config), id);\n this.connections.set(id, newOne);\n info(`created new ${id}`);\n info(`# of instances: ${this.connections.size}`);\n if (this.cleared) {\n this.cleared = false;\n }\n return newOne.pool;\n };\n\n clear = (config: ServerConfig) => {\n const { info } = Logger(config, '[DBManager]');\n info(`Clearing all connections ${this.connections.size}`);\n this.cleared = true;\n this.connections.clear();\n };\n}\n","import { Config } from '../../../utils/Config';\n\nconst NILEDB_API_URL = process.env.NILEDB_API_URL;\n\nfunction filterNullUndefined(\n obj?: Record<string, string | null>\n): { [k: string]: string | null } | undefined {\n if (!obj) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) => value !== null && value !== undefined\n )\n );\n}\n\nexport function makeRestUrl(\n config: Config,\n path: string,\n qp?: Record<string, string | null>\n) {\n const url = config.api.basePath || NILEDB_API_URL;\n if (!url) {\n throw new Error(\n 'An API url is required. Set it via NILEDB_API_URL. Was auto configuration run?'\n );\n }\n const params = new URLSearchParams(\n filterNullUndefined(qp) as Record<string, string>\n );\n const strParams = params.toString();\n return `${[url, path.substring(1, path.length)].join('/')}${\n strParams ? `?${strParams}` : ''\n }`;\n}\n","import { Config } from '../../../utils/Config';\n\nimport { makeRestUrl } from './makeRestUrl';\n\ntype ApiRouteKeys = keyof typeof apiRoutes;\nexport type ApiRoutePaths = (typeof apiRoutes)[ApiRouteKeys];\nexport const apiRoutes = (config: Config) => ({\n ME: makeRestUrl(config, '/me'),\n USERS: (qp: { tenantId?: null | string; newTenantName?: null | string }) =>\n makeRestUrl(config, '/users', qp),\n USER: (userId: string) => makeRestUrl(config, `/users/${userId}`),\n TENANTS: makeRestUrl(config, '/tenants'),\n TENANT: (tenantId: string) => makeRestUrl(config, `/tenants/${tenantId}`),\n SIGNUP: makeRestUrl(config, '/signup'),\n TENANT_USERS: (tenantId: string) =>\n makeRestUrl(config, `/tenants/${tenantId}/users`),\n TENANT_USER: (tenantId: string, userId: string) =>\n makeRestUrl(config, `/tenants/${tenantId}/users/${userId}`),\n USER_TENANTS: (userId: string) =>\n makeRestUrl(config, `/users/${userId}/tenants`),\n});\n","export default function urlMatches(requestUrl: string, route: string) {\n const url = new URL(requestUrl);\n return url.pathname.startsWith(route);\n}\n","import { Config } from '../../utils/Config';\nimport Logger from '../../utils/Logger';\n\nexport default async function request(\n url: string,\n _init: RequestInit & { request: Request },\n config: Config\n) {\n const { info, error } = Logger(config, '[REQUEST]');\n const { request, ...init } = _init;\n const requestUrl = new URL(request.url);\n const updatedHeaders = new Headers(request.headers);\n\n updatedHeaders.set('host', requestUrl.host);\n updatedHeaders.set('niledb-origin', requestUrl.origin);\n const params = { ...init, headers: updatedHeaders };\n if (params.method === 'POST' || params.method === 'PUT') {\n params.body = init.body ?? request.body;\n // @ts-expect-error - its there\n params.duplex = 'half';\n }\n\n try {\n const res = await fetch(url, { ...params }).catch((e) => {\n error('An error has occurred in the fetch', {\n message: e.message,\n stack: e.stack,\n });\n return new Response(\n 'An unexpected (most likely configuration) problem has occurred',\n { status: 500 }\n );\n });\n const loggingRes = typeof res?.clone === 'function' ? res?.clone() : null;\n info(`[${params.method ?? 'GET'}] ${url}`, {\n status: res?.status,\n statusText: res?.statusText,\n text: await loggingRes?.text(),\n });\n return res;\n } catch (e) {\n if (e instanceof Error) {\n error('An error has occurred in the fetch', {\n message: e.message,\n stack: e.stack,\n });\n }\n return new Response(\n 'An unexpected (most likely configuration) problem has occurred',\n { status: 500 }\n );\n }\n}\n","import { Routes } from '../../types';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\n\nconst key = 'ME';\n\n/**\n * @swagger\n * /api/me:\n * get:\n * summary: Identify the principal\n * description: Returns information about the principal associated with the session\n * provided\n * operationId: me\n * responses:\n * \"200\":\n * description: Identified user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nasync function GET(\n url: string,\n init: RequestInit & { request: Request },\n config: Config\n) {\n const res = await request(url, init, config);\n return res;\n}\n\nexport default async function route(request: Request, config: Config) {\n const url = apiRoutes(config)[key];\n\n switch (request.method) {\n case 'GET':\n return await GET(url, { request }, config);\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Config } from '../../utils/Config';\nimport Logger from '../../utils/Logger';\n\nimport request from './request';\n\nexport type JWT = {\n email: string;\n sub: string;\n id: string;\n iat: number;\n exp: number;\n jti: string;\n};\n\nexport type ActiveSession = {\n id: string;\n email: string;\n expires: Date;\n user?: {\n id: string;\n name: string;\n image: string;\n email: string;\n emailVerified: void | Date;\n };\n};\nexport default async function auth(\n req: Request,\n config: Config\n): Promise<void | ActiveSession> {\n const { info, error } = Logger(config, '[nileauth]');\n info('checking auth');\n\n const sessionUrl = `${config.api.basePath}/auth/session`;\n info(`using session${sessionUrl}`);\n // handle the pass through with posts\n req.headers.delete('content-length');\n\n const res = await request(sessionUrl, { request: req }, config);\n if (!res) {\n info('no session found');\n return undefined;\n }\n info('session active');\n try {\n return await new Response(res.body).json();\n } catch (e) {\n error(e);\n return undefined;\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","import { decodeJwt } from 'jose';\n\nimport { ResponseError } from './ResponseError';\nimport { Config } from './Config';\nimport { NileRequest } from './Requester';\nimport { updateTenantId, updateUserId } from './Event';\nimport { getToken } from './Config/envVars';\nimport Logger from './Logger';\n\nexport const X_NILE_TENANT = 'niledb-tenant-id';\nexport const X_NILE_USER_ID = 'niledb-user-id';\nexport const X_NILE_SECURECOOKIES = 'niledb-useSecureCookies';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config?: Config) {\n const cookieTenant = getTokenFromCookie(headers, X_NILE_TENANT);\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config?.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport function makeBasicHeaders(config: Config, opts?: RequestInit) {\n const headers = new Headers(opts?.headers);\n headers.set('content-type', 'application/json; charset=utf-8');\n const cookieKey = config.api?.cookieKey;\n\n // this is old, but still maybe something worth keeping.\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n } else if (getToken({ config })) {\n headers.set('Authorization', `Bearer ${getToken({ config })}`);\n }\n }\n if (config.secureCookies) {\n headers.set(X_NILE_SECURECOOKIES, 'true');\n }\n return headers;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const { debug, error } = Logger(config, '[server]');\n\n const url = `${config.api?.basePath}${path}`;\n const headers = new Headers(opts?.headers);\n const tenantId = getTenantFromHttp(headers, config);\n const basicHeaders = makeBasicHeaders(config, opts);\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 debug(`[fetch] ${useableUrl}`);\n\n try {\n const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n error('[fetch][response]', { message: e.message, stack: e.stack });\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n if (typeof response.clone === 'function') {\n try {\n debug(\n `[fetch][response][${opts?.method ?? 'GET'}] ${\n response.status\n } ${useableUrl}`,\n {\n body: await response.clone().json(),\n }\n );\n } catch (e) {\n debug(\n `[fetch][response][${opts?.method ?? 'GET'}] ${\n response.status\n } ${useableUrl}`,\n {\n body: await response.clone().text(),\n }\n );\n }\n }\n return response;\n }\n if (response?.status === 404) {\n return new ResponseError('Not found', { status: 404 });\n }\n\n if (response?.status === 401) {\n return new ResponseError('Unauthorized', { status: 401 });\n }\n if (response?.status === 405) {\n return new ResponseError('Method not allowed', { status: 405 });\n }\n let res;\n const errorHandler =\n typeof response?.clone === 'function' ? response.clone() : null;\n let msg = '';\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n if (errorHandler) {\n msg = await errorHandler.text();\n if (msg) {\n error(`[fetch][response] status: ${errorHandler.status}]`, {\n message: msg,\n });\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(`[fetch][response] status: ${errorHandler?.status}] ${message}`);\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n error(`[fetch][response] status: ${errorHandler?.status}] ${message}`);\n return new ResponseError(message, { status: 400 });\n }\n error(\n `[fetch][response] status: ${errorHandler?.status}] UNHANDLED ERROR`,\n {\n res,\n }\n );\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n } catch (e) {\n return new ResponseError('an unexpected error has occurred', {\n status: 500,\n });\n }\n}\n","import { getTenantFromHttp } from '../../../utils/fetch';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport { Config } from '../../../utils/Config';\n/**\n * @swagger\n * /api/users:\n * post:\n * tags:\n * - users\n * summary: Creates a user\n * description: Creates a user in the database\n * operationId: createUser\n * parameters:\n * - name: tenantId\n * description: A tenant id to add the user to when they are created\n * in: query\n * schema:\n * type: string\n * - name: newTenantName\n * description: A tenant name to create, then the user to when they are created\n * in: query\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * The `newTenant` is optional; if provided, it is used as the name of a new tenant record associated with the newly created user.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * Create User Request with Tenant:\n * summary: Creates a user and a new tenant for that user\n * description: Create User Request with Tenant\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * newTenant: My Sandbox\n * responses:\n * \"201\":\n * description: User created\n * content:\n * application/json:\n * schema:\n * $ref: \"#/components/schemas/User\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nexport async function POST(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const yurl = new URL(init.request.url);\n const tenantId = yurl.searchParams.get('tenantId');\n const newTenantName = yurl.searchParams.get('newTenantName');\n const tenant = tenantId ?? getTenantFromHttp(init.request.headers);\n\n const url = apiRoutes(config).USERS({ tenantId: tenant, newTenantName });\n\n return await request(url, init, config);\n}\n","import { getTenantFromHttp } from '../../../utils/fetch';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport { Config } from '../../../utils/Config';\n\n/**\n * @swagger\n * /api/users:\n * get:\n * tags:\n * - users\n * summary: lists users in the tenant\n * description: Returns information about the users within the tenant\n * provided. You can also pass the a `niledb-tenant-id` in the header or in a cookie.\n * operationId: listUsers\n * parameters:\n * - name: tenantId\n * in: query\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: A list of users\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: '#/components/schemas/TenantUser'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function GET(\n config: Config,\n init: RequestInit & { request: Request },\n log: (message: string | unknown, meta?: Record<string, unknown>) => void\n) {\n const yurl = new URL(init.request.url);\n const tenantId = yurl.searchParams.get('tenantId');\n const tenant = tenantId ?? getTenantFromHttp(init.request.headers);\n\n if (!tenant) {\n log('[GET] No tenant id provided.');\n return new Response(null, { status: 404 });\n }\n const url = apiRoutes(config).TENANT_USERS(tenant);\n init.method = 'GET';\n return await request(url, init, config);\n}\n","import { apiRoutes } from '../../../utils/routes/apiRoutes';\nimport fetch from '../../../utils/request';\nimport { ActiveSession } from '../../../utils/auth';\nimport { Config } from '../../../../utils/Config';\n\n/**\n * @swagger\n * /api/users/{userid}:\n * put:\n * tags:\n * - users\n * summary: update a user\n * description: updates a user within the tenant\n * operationId: updateUser\n * parameters:\n * - name: userid\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * Update a user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/UpdateUserRequest'\n * responses:\n * \"200\":\n * description: An updated user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nexport async function PUT(\n config: Config,\n session: void | ActiveSession,\n init: RequestInit & { request: Request }\n) {\n if (!session) {\n return new Response(null, { status: 401 });\n }\n init.body = init.request.body;\n init.method = 'PUT';\n\n // update the user\n\n const [userId] = new URL(init.request.url).pathname.split('/').reverse();\n\n const url = apiRoutes(config).USER(userId);\n\n return await fetch(url, init, config);\n}\n","import { Routes } from '../../types';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport auth from '../../utils/auth';\nimport { Config } from '../../../utils/Config';\nimport Logger from '../../../utils/Logger';\n\nimport { POST } from './POST';\nimport { GET } from './GET';\nimport { PUT } from './[userId]/PUT';\n\nconst key = 'USERS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const session = await auth(request, config);\n\n switch (request.method) {\n case 'GET':\n return await GET(config, { request }, info);\n case 'POST':\n return await POST(config, { request });\n case 'PUT':\n return await PUT(config, session, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport { Config } from '../../../../../utils/Config';\nimport request from '../../../../utils/request';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * get:\n * tags:\n * - users\n * summary: List tenant users\n * description: Lists users that are associated with the specified tenant.\n * operationId: listTenantUsers\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: Users found\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: '#/components/schemas/User'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function GET(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n\n const url = `${apiRoutes(config).TENANT_USERS(tenantId)}`;\n return await request(url, init, config);\n}\n","import { ActiveSession } from '../../../../utils/auth';\nimport fetch from '../../../../utils/request';\nimport { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport { Config } from '../../../../../utils/Config';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * post:\n * tags:\n * - users\n * summary: Create a user in a tenant\n * description: Creates a new user and associates that user with the specified\n * tenant.\n * operationId: createTenantUser\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * responses:\n * \"201\":\n * description: User created\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n */\nexport async function POST(\n config: Config,\n session: ActiveSession,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n init.body = JSON.stringify({ email: session.email });\n init.method = 'PUT';\n const url = apiRoutes(config).TENANT_USERS(tenantId);\n\n return await fetch(url, init, config);\n}\n","import { apiRoutes } from '../../../../../utils/routes/apiRoutes';\nimport fetch from '../../../../../utils/request';\nimport { Config } from '../../../../../../utils/Config';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users/{email}:\n * delete:\n * tags:\n * - tenants\n * summary: removes a user from a tenant\n * description: removes an associated user from a specified\n * tenant.\n * operationId: unlinkUser \n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * - name: email \n * in: path\n * required: true\n * schema:\n * type: string\n \n * responses:\n * \"204\":\n * description: User removed\n */\n\nexport async function DELETE(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [userId, _, tenantId] = yurl.pathname.split('/').reverse();\n\n init.method = 'DELETE';\n init.body = JSON.stringify({ email: userId });\n const url = `${apiRoutes(config).TENANT_USER(tenantId, userId)}`;\n\n return await fetch(url, init, config);\n}\n","import { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport fetch from '../../../../utils/request';\nimport { Config } from '../../../../../utils/Config';\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * put:\n * tags:\n * - tenants\n * summary: associates an existing user with the tenant\n * operationId: linkUser\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |\n * The email of the user you want to add to a tenant.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/AssociateUserRequest'\n * responses:\n * \"201\":\n * description: add user to tenant\n */\n\nexport async function PUT(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n\n init.method = 'PUT';\n const url = `${apiRoutes(config).TENANT_USERS(tenantId)}`;\n\n return await fetch(url, init, config);\n}\n","import { Config } from '../../../../../utils/Config';\nimport urlMatches from '../../../../utils/routes/urlMatches';\nimport { Routes } from '../../../../types';\nimport auth from '../../../../utils/auth';\nimport Logger from '../../../../../utils/Logger';\n\nimport { GET } from './GET';\nimport { POST } from './POST';\nimport { DELETE } from './[userId]/DELETE';\nimport { PUT } from './PUT';\n\nconst key = 'TENANT_USERS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const session = await auth(request, config);\n\n if (!session) {\n info('401');\n return new Response(null, { status: 401 });\n }\n const yurl = new URL(request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n\n if (!tenantId) {\n info('No tenant id found in path');\n return new Response(null, { status: 404 });\n }\n\n switch (request.method) {\n case 'GET':\n return await GET(config, { request });\n case 'POST':\n return await POST(config, session, { request });\n case 'PUT':\n return await PUT(config, { request });\n case 'DELETE':\n return await DELETE(config, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n const url = new URL(request.url);\n const [userId, possibleTenantId, tenantId] = url.pathname\n .split('/')\n .reverse();\n let route = configRoutes[key]\n .replace('{tenantId}', tenantId)\n .replace('{userId}', userId);\n if (userId === 'users') {\n route = configRoutes[key].replace('{tenantId}', possibleTenantId);\n }\n return urlMatches(request.url, route);\n}\n","import { Config } from '../../../utils/Config';\nimport { ActiveSession } from '../../utils/auth';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants:\n * get:\n * tags:\n * - tenants\n * summary: list tenants by user\n * description: Creates a user in the database\n * operationId: listTenants\n * responses:\n * \"200\":\n * description: a list of tenants\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: \"#/components/schemas/Tenant\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function GET(\n config: Config,\n session: ActiveSession,\n init: RequestInit & { request: Request }\n) {\n let url = `${apiRoutes(config).USER_TENANTS(session.id)}`;\n if (typeof session === 'object' && 'user' in session && session.user) {\n url = `${apiRoutes(config).USER_TENANTS(session.user.id)}`;\n }\n\n const res = await request(url, init, config);\n return res;\n}\n","import { Config } from '../../../../utils/Config';\nimport request from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * get:\n * tags:\n * - tenants\n * summary: Obtains a specific tenant.\n * operationId: getTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: the desired tenant\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function GET(\n config: Config,\n init: RequestInit & { request: Request },\n log: (message: string | unknown, meta?: Record<string, unknown>) => void\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n log('[GET] No tenant id provided.');\n return new Response(null, { status: 404 });\n }\n\n init.method = 'GET';\n const url = `${apiRoutes(config).TENANT(tenantId)}`;\n\n return await request(url, init, config);\n}\n","import { Config } from '../../../../utils/Config';\nimport fetch from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * delete:\n * tags:\n * - tenants\n * summary: Deletes a tenant.\n * operationId: deleteTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"204\":\n * description: Tenant deleted\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function DELETE(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n\n init.method = 'DELETE';\n const url = `${apiRoutes(config).TENANT(tenantId)}`;\n\n return await fetch(url, init, config);\n}\n","import { Config } from '../../../../utils/Config';\nimport fetch from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * put:\n * tags:\n * - tenants\n * summary: Obtains a specific tenant.\n * operationId: updateTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"201\":\n * description: update an existing tenant\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function PUT(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n init.body = init.request.body;\n init.method = 'PUT';\n const url = `${apiRoutes(config).TENANT(tenantId)}`;\n\n return await fetch(url, init, config);\n}\n","import { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants:\n * post:\n * tags:\n * - tenants\n * summary: Create a tenant\n * description: Creates a new tenant in a database.\n * operationId: createTenant\n * requestBody:\n * description: A wrapper for the tenant name.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateTenantRequest'\n * examples:\n * Create Tenant Request:\n * summary: Creates a named tenant\n * description: Create Tenant Request\n * value:\n * name: My Sandbox\n * responses:\n * \"201\":\n * description: Tenant created\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Database not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function POST(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const url = `${apiRoutes(config).TENANTS}`;\n\n return await request(url, init, config);\n}\n","import { Config } from '../../../utils/Config';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\nimport auth from '../../utils/auth';\nimport Logger from '../../../utils/Logger';\n\nimport { GET } from './GET';\nimport { GET as TENANT_GET } from './[tenantId]/GET';\nimport { DELETE } from './[tenantId]/DELETE';\nimport { PUT } from './[tenantId]/PUT';\nimport { POST } from './POST';\n\nfunction isUUID(value: string | null | undefined) {\n if (!value) {\n return false;\n }\n // is any UUID\n const regex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5|7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\n return regex.test(value);\n}\n\nconst key = 'TENANTS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const session = await auth(request, config);\n\n if (!session) {\n info('401');\n return new Response(null, { status: 401 });\n }\n const [possibleTenantId] = request.url.split('/').reverse();\n\n switch (request.method) {\n case 'GET':\n if (isUUID(possibleTenantId)) {\n return await TENANT_GET(config, { request }, info);\n }\n return await GET(config, session, { request });\n case 'POST':\n return await POST(config, { request });\n case 'DELETE':\n return await DELETE(config, { request });\n case 'PUT':\n return await PUT(config, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Config } from '../../../utils/Config';\n\nimport { makeRestUrl } from './makeRestUrl';\n\nexport const proxyRoutes = (config: Config) => ({\n SIGNIN: makeRestUrl(config, '/auth/signin'),\n PROVIDERS: makeRestUrl(config, '/auth/providers'),\n SESSION: makeRestUrl(config, '/auth/session'),\n CSRF: makeRestUrl(config, '/auth/csrf'),\n CALLBACK: makeRestUrl(config, '/auth/callback'),\n SIGNOUT: makeRestUrl(config, '/auth/signout'),\n ERROR: makeRestUrl(config, '/auth/error'),\n});\n\ntype ProxyKeys = keyof typeof proxyRoutes;\n\nexport type ProxyPaths = (typeof proxyRoutes)[ProxyKeys];\n","/**\n * @swagger\n * /api/auth/signin:\n * get:\n * tags:\n * - authentication\n * summary: lists users in the tenant\n * description: Returns information about the users within the tenant\n * provided\n * operationId: signin\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: A list of users\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nimport { Routes } from '../../types';\nimport { Config } from '../../../utils/Config';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nconst key = 'SIGNIN';\n\nexport default async function route(req: Request, config: Config) {\n let url = proxyRoutes(config)[key];\n\n const init: RequestInit = {\n method: req.method,\n headers: req.headers,\n };\n if (req.method === 'POST') {\n if (typeof req.clone === 'function') {\n init.body = req.clone().body;\n }\n const [provider] = new URL(req.url).pathname.split('/').reverse();\n\n url = `${proxyRoutes(config)[key]}/${provider}`;\n }\n\n const passThroughUrl = new URL(req.url);\n const params = new URLSearchParams(passThroughUrl.search);\n\n url = `${url}${params.toString() !== '' ? `?${params.toString()}` : ''}`;\n\n const res = await request(url, { ...init, request: req }, config);\n\n return res;\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config).SESSION,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.SESSION);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config).PROVIDERS,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.PROVIDERS);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config).CSRF,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.CSRF);\n}\n","import { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport fetch from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\nimport { Config } from '../../../utils/Config';\nimport Logger from '../../../utils/Logger';\n\nconst key = 'CALLBACK';\n\nexport default async function route(request: Request, config: Config) {\n const { error } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const [provider] = new URL(request.url).pathname.split('/').reverse();\n const passThroughUrl = new URL(request.url);\n const params = new URLSearchParams(passThroughUrl.search);\n const url = `${proxyRoutes(config).CALLBACK}/${provider}${\n params.toString() !== '' ? `?${params.toString()}` : ''\n }`;\n\n const res = await fetch(\n url,\n {\n request,\n method: request.method,\n },\n config\n ).catch((e) => {\n error('an error as occurred', e);\n });\n\n const location = res?.headers.get('location');\n if (location) {\n return new Response(res?.body, {\n status: 302,\n headers: res?.headers,\n });\n }\n return new Response(res?.body, {\n status: res?.status,\n headers: res?.headers,\n });\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.CALLBACK);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport fetch from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nconst key = 'SIGNOUT';\nexport default async function route(request: Request, config: Config) {\n let url = proxyRoutes(config)[key];\n\n const init: RequestInit = {\n method: request.method,\n };\n if (request.method === 'POST') {\n init.body = request.body;\n const [provider] = new URL(request.url).pathname.split('/').reverse();\n url = `${proxyRoutes(config)[key]}/${provider}`;\n }\n\n const res = await fetch(url, { ...init, request }, config);\n return res;\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nconst key = 'ERROR';\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config)[key],\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import Logger from '../../utils/Logger';\nimport me, { matches as matchesMe } from '../routes/me';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport { Routes } from '../types';\nimport * as authRoutes from '../routes/auth';\nimport { Config } from '../../utils/Config';\n\nexport default function GETTER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[GET MATCHER]');\n return async function GET(req: Request) {\n if (matchesMe(configRoutes, req)) {\n info('matches me');\n return me(req, config);\n }\n if (matchesTenantUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n if (matchesUsers(configRoutes, req)) {\n info('matches users');\n return users(req, config);\n }\n\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n\n if (authRoutes.matchSession(configRoutes, req)) {\n info('matches session');\n return authRoutes.handleSession(req, config);\n }\n\n if (authRoutes.matchSignIn(configRoutes, req)) {\n info('matches signin');\n return authRoutes.handleSignIn(req, config);\n }\n\n if (authRoutes.matchProviders(configRoutes, req)) {\n info('matches providers');\n return authRoutes.handleProviders(req, config);\n }\n\n if (authRoutes.matchCsrf(configRoutes, req)) {\n info('matches csrf');\n return authRoutes.handleCsrf(req, config);\n }\n\n if (authRoutes.matchCallback(configRoutes, req)) {\n info('matches callback');\n return authRoutes.handleCallback(req, config);\n }\n if (authRoutes.matchSignOut(configRoutes, req)) {\n info('matches signout');\n return authRoutes.handleSignOut(req, config);\n }\n if (authRoutes.matchError(configRoutes, req)) {\n info('matches error');\n return authRoutes.handleError(req, config);\n }\n warn('No GET routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/signup:\n * post:\n * tags:\n * - users\n * summary: signs a user up\n * description: signs a user up and logs them in. Expects a email and password combo\n * operationId: signUp\n * parameters:\n * - name: tenantId\n * description: A tenant id to add the user to when they are created\n * in: query\n * schema:\n * type: string\n * - name: newTenantName\n * description: A tenant name to create, then the user to when they are created\n * in: query\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * The `newTenant` is optional; if provided, it is used as the name of a new tenant record associated with the newly created user.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * Create User Request with Tenant:\n * summary: Creates a user and a new tenant for that user\n * description: Create User Request with Tenant\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * newTenant: My Sandbox\n * responses:\n * \"201\":\n * description: User and session created\n * content:\n * application/json:\n * schema:\n * $ref: \"#/components/schemas/User\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function POST(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const url = `${apiRoutes(config).SIGNUP}`;\n\n return await request(url, init, config);\n}\n","import { Config } from '../../../utils/Config';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\n\nimport { POST } from './POST';\n\nconst key = 'SIGNUP';\n\nexport default async function route(request: Request, config: Config) {\n switch (request.method) {\n case 'POST':\n return await POST(config, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import Logger from '../../utils/Logger';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport signup, { matches as matchesSignup } from '../routes/signup';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\nimport * as authRoutes from '../routes/auth';\n\nexport default function POSTER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[POST MATCHER]');\n return async function POST(req: Request) {\n // order matters for tenantUsers\n if (matchesTenantUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n\n if (matchesSignup(configRoutes, req)) {\n info('matches signup');\n return signup(req, config);\n }\n\n if (matchesUsers(configRoutes, req)) {\n info('matches users');\n return users(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n\n if (authRoutes.matchSession(configRoutes, req)) {\n info('matches session');\n return authRoutes.handleSession(req, config);\n }\n\n if (authRoutes.matchSignIn(configRoutes, req)) {\n info('matches signin');\n return authRoutes.handleSignIn(req, config);\n }\n\n if (authRoutes.matchProviders(configRoutes, req)) {\n info('matches providers');\n return authRoutes.handleProviders(req, config);\n }\n\n if (authRoutes.matchCsrf(configRoutes, req)) {\n info('matches csrf');\n return authRoutes.handleCsrf(req, config);\n }\n\n if (authRoutes.matchCallback(configRoutes, req)) {\n info('matches callback');\n return authRoutes.handleCallback(req, config);\n }\n if (authRoutes.matchSignOut(configRoutes, req)) {\n info('matches signout');\n return authRoutes.handleSignOut(req, config);\n }\n warn('No POST routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import Logger from '../../utils/Logger';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantsUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\n\nexport default function DELETER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[DELETE MATCHER]');\n return async function DELETE(req: Request) {\n if (matchesTenantsUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n warn('No DELETE routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import Logger from '../../utils/Logger';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\n\nexport default function PUTER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[PUT MATCHER]');\n return async function PUT(req: Request) {\n if (matchesTenantUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n if (matchesUsers(configRoutes, req)) {\n info('matches users');\n return users(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n warn('No PUT routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import { Config } from '../../utils/Config';\nimport { Routes } from '../types';\n\nimport getter from './GET';\nimport poster from './POST';\nimport deleter from './DELETE';\nimport puter from './PUT';\n\nexport default function Handlers(configRoutes: Routes, config: Config) {\n const GET = getter(configRoutes, config);\n const POST = poster(configRoutes, config);\n const DELETE = deleter(configRoutes, config);\n const PUT = puter(configRoutes, config);\n return {\n GET,\n POST,\n DELETE,\n PUT,\n };\n}\n","import { Routes } from '../../types';\n\nexport const appRoutes = (prefix = '/api'): Routes => ({\n SIGNIN: `${prefix}/auth/signin`,\n PROVIDERS: `${prefix}/auth/providers`,\n SESSION: `${prefix}/auth/session`,\n CSRF: `${prefix}/auth/csrf`,\n CALLBACK: `${prefix}/auth/callback`,\n SIGNOUT: `${prefix}/auth/signout`,\n ERROR: `${prefix}/auth/error`,\n ME: `${prefix}/me`,\n USERS: `${prefix}/users`,\n TENANTS: `${prefix}/tenants`,\n TENANT_USER: `${prefix}/tenants/{tenantId}/users/{userId}`,\n TENANT_USERS: `${prefix}/tenants/{tenantId}/users`,\n SIGNUP: `${prefix}/signup`,\n});\n","import { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'DELETE' | 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three options here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n JSON.stringify(req) === '{}' ||\n (req && typeof req === 'object' && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n async post<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('POST', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n const cloned = response.clone();\n try {\n return await cloned.json();\n } catch (e) {\n // give back the response\n }\n }\n return response;\n }\n\n async get<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('GET', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n const cloned = response.clone();\n try {\n return await cloned.json();\n } catch (e) {\n // give back the response\n }\n }\n return response;\n }\n\n async put<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('PUT', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n const cloned = response.clone();\n try {\n return await cloned.json();\n } catch (e) {\n // give back the response\n }\n }\n return response;\n }\n\n async delete(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> {\n const response = await this.request('DELETE', url, req, init);\n return response;\n }\n}\n","import { ActiveSession, JWT } from '../api/utils/auth';\nimport { appRoutes } from '../api/utils/routes/defaultRoutes';\nimport { Config } from '../utils/Config';\nimport Logger from '../utils/Logger';\nimport Requester, { NileRequest } from '../utils/Requester';\n\n// url host does not matter, we only match on the 1st leg by path\nconst ORIGIN = 'https://us-west-2.api.dev.thenile.dev';\n/**\n * a helper function to log in server side.\n */\nexport function serverLogin(\n config: Config,\n handlers: {\n GET: (req: Request) => Promise<void | Response>;\n POST: (req: Request) => Promise<void | Response>;\n DELETE: (req: Request) => Promise<void | Response>;\n PUT: (req: Request) => Promise<void | Response>;\n }\n) {\n const { info, error, debug } = Logger(config, '[server side login]');\n const routes = appRoutes(config.routePrefix);\n return async function login({\n email,\n password,\n }: {\n email: string;\n password: string;\n }) {\n if (!email || !password) {\n throw new Error('Server side login requires a user email and password.');\n }\n\n const sessionUrl = new URL(`${ORIGIN}${routes.PROVIDERS}`);\n const baseHeaders = {\n host: sessionUrl.host,\n 'niledb-origin': ORIGIN,\n };\n info(`Obtaining providers for ${email}`);\n const sessionReq = new Request(sessionUrl, {\n method: 'GET',\n ...baseHeaders,\n });\n const sessionRes = await handlers.POST(sessionReq);\n\n if (sessionRes?.status === 404) {\n throw new Error('Unable to login, cannot find region api.');\n }\n\n let providers;\n try {\n providers = await sessionRes?.json();\n } catch (e) {\n info(sessionUrl, { sessionRes });\n error(e);\n }\n\n info('Obtaining csrf');\n const csrf = new URL(`${ORIGIN}${routes.CSRF}`);\n const csrfReq = new Request(csrf, {\n method: 'GET',\n headers: new Headers({\n ...baseHeaders,\n }),\n });\n const csrfRes = await handlers.POST(csrfReq);\n let csrfToken;\n try {\n const json = (await csrfRes?.json()) ?? {};\n csrfToken = json?.csrfToken;\n } catch (e) {\n info(sessionUrl, { csrfRes });\n error(e, { csrfRes });\n }\n\n const { credentials } = providers ?? {};\n\n const csrfCookie = csrfRes?.headers.get('set-cookie');\n\n if (!credentials) {\n throw new Error(\n 'Unable to obtain credential provider. Aborting server side login.'\n );\n }\n const signInUrl = new URL(credentials.callbackUrl);\n\n if (!csrfCookie) {\n debug('CSRF failed', { headers: csrfRes?.headers });\n throw new Error('Unable to authenticate REST, CSRF missing.');\n }\n info(`Attempting sign in with email ${email} ${signInUrl.href}`);\n const body = JSON.stringify({\n email,\n password,\n csrfToken,\n callbackUrl: credentials.callbackUrl,\n });\n const postReq = new Request(signInUrl, {\n method: 'POST',\n headers: new Headers({\n ...baseHeaders,\n 'content-type': 'application/json',\n cookie: csrfCookie.split(',').join('; '),\n }),\n body,\n });\n\n const loginRes = await handlers.POST(postReq);\n const authCookie = loginRes?.headers.get('set-cookie');\n if (!authCookie) {\n throw new Error('authentication failed');\n }\n const [, token] =\n /((__Secure-)?nile\\.session-token=.+?);/.exec(authCookie) ?? [];\n if (!token) {\n error('Unable to obtain auth token', { authCookie });\n throw new Error('Server login failed');\n }\n info('Server login successful', { authCookie, csrfCookie });\n const headers = new Headers({\n ...baseHeaders,\n cookie: [token, csrfCookie].join('; '),\n });\n return headers;\n };\n}\n\nexport default class Auth extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n\n get sessionUrl() {\n return '/auth/session';\n }\n session = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<Response | JWT | ActiveSession> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.sessionUrl, _init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest } from '../utils/Requester';\n\nimport { Tenant } from './types';\n\nexport default class Tenants extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n get tenantsUrl() {\n return '/tenants';\n }\n get tenantUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }> | Headers | string,\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n let _req;\n if (typeof req === 'string') {\n _req = new Request(`${this.api.basePath}${this.tenantsUrl}`, {\n body: JSON.stringify({ name: req }),\n method: 'POST',\n });\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.post(_req, this.tenantsUrl, _init);\n };\n\n getTenant = async (\n req: NileRequest<{ id: string }> | Headers | string | void,\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n if (typeof req === 'string') {\n this.tenantId = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.get<Tenant>(req, this.tenantUrl, _init);\n };\n\n get tenantListUrl() {\n return `/users/${this.userId ?? '{userId}'}/tenants`;\n }\n\n listTenants = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<Tenant[] | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.get<Tenant[]>(req, this.tenantListUrl, _init);\n };\n\n deleteTenant = async (\n req: NileRequest<void> | Headers | string,\n init?: RequestInit\n ): Promise<Response> => {\n if (typeof req === 'string') {\n this.tenantId = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.delete(req, this.tenantUrl, _init);\n };\n updateTenant = async (\n req: NileRequest<void> | Headers | { name: string },\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n let _req;\n if (req && 'name' in req) {\n _req = new Request(`${this.api.basePath}${this.tenantUrl}`, {\n body: JSON.stringify(req),\n method: 'PUT',\n });\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.put<Tenant>(_req, this.tenantUrl, _init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest } from '../utils/Requester';\n\nimport { CreateBasicUserRequest, User } from './types';\n\nexport default class Users extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n\n get usersUrl() {\n return '/users';\n }\n\n get tenantUsersUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n get linkUsersUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users/${\n this.userId ?? '{userId}'\n }/link`;\n }\n\n get tenantUserUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users/${\n this.userId ?? '{userId}'\n }`;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n\n createUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n\n const _init = this.handleHeaders(init);\n return await _requester.post(req, this.usersUrl, _init);\n };\n\n createTenantUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n\n const _init = this.handleHeaders(init);\n return await _requester.post(req, this.tenantUsersUrl, _init);\n };\n\n updateUser = async (\n req: NileRequest<\n Partial<Omit<User, 'email' | 'tenants' | 'created' | 'updated'>>\n >,\n init?: RequestInit\n ): Promise<User | Response> => {\n let _req;\n if (req && 'id' in req) {\n _req = new Request(`${this.api.basePath}${this.tenantUserUrl}`, {\n body: JSON.stringify(req),\n method: 'PUT',\n });\n this.userId = String(req.id);\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.put(_req, this.tenantUserUrl, _init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<User[] | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.tenantUsersUrl, _init);\n };\n\n linkUser = async (\n req: NileRequest<{ id: string; tenantId?: string }> | Headers | string,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n if (typeof req === 'string') {\n this.userId = req;\n } else {\n if ('id' in req) {\n this.userId = req.id;\n }\n if ('tenantId' in req) {\n this.tenantId = req.tenantId;\n }\n }\n\n const _init = this.handleHeaders(init);\n return await _requester.put(req, this.linkUsersUrl, _init);\n };\n\n unlinkUser = async (\n req: NileRequest<{ id: string; tenantId?: string }> | Headers | string,\n init?: RequestInit\n ): Promise<Response> => {\n if (typeof req === 'string') {\n this.userId = req;\n } else {\n if ('id' in req) {\n this.userId = req.id;\n }\n if ('tenantId' in req) {\n this.tenantId = req.tenantId;\n }\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.delete(req, this.linkUsersUrl, _init);\n };\n\n get meUrl() {\n return '/me';\n }\n\n me = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.meUrl, _init);\n };\n updateMe = async (\n req:\n | NileRequest<\n Partial<\n Omit<User, 'email' | 'id' | 'tenants' | 'created' | 'updated'>\n >\n >\n | Headers,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.put(req, this.meUrl, _init);\n };\n}\n","import Handlers from './api/handlers';\nimport { Routes } from './api/types';\nimport { appRoutes } from './api/utils/routes/defaultRoutes';\nimport Auth, { serverLogin } from './auth';\nimport Tenants from './tenants';\nimport Users from './users';\nimport { Config } from './utils/Config';\n\nexport class Api {\n config: Config;\n users: Users;\n auth: Auth;\n tenants: Tenants;\n routes: Routes;\n handlers: {\n GET: (req: Request) => Promise<void | Response>;\n POST: (req: Request) => Promise<void | Response>;\n DELETE: (req: Request) => Promise<void | Response>;\n PUT: (req: Request) => Promise<void | Response>;\n };\n constructor(config: Config) {\n this.config = config;\n this.auth = new Auth(config);\n this.users = new Users(config);\n this.tenants = new Tenants(config);\n this.routes = {\n ...appRoutes(config?.routePrefix),\n ...config?.routes,\n };\n this.handlers = Handlers(this.routes, config);\n }\n\n updateConfig(config: Config) {\n this.config = config;\n this.handlers = Handlers(this.routes, config);\n }\n\n set headers(headers: Headers) {\n this.users = new Users(this.config, headers);\n this.tenants = new Tenants(this.config, headers);\n this.auth = new Auth(this.config, headers);\n }\n async login(payload: { email: string; password: string }) {\n this.headers = await serverLogin(this.config, this.handlers)(payload);\n }\n}\n","import { Pool } from 'pg';\n\nimport { ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { Api } from './Api';\n\nexport class Server {\n config: Config;\n api: Api;\n private manager!: DbManager;\n\n constructor(config?: ServerConfig) {\n this.config = new Config(config as ServerConfig, '[initial config]');\n this.api = new Api(this.config);\n this.manager = new DbManager(this.config);\n\n watchTenantId((tenantId) => {\n this.tenantId = tenantId;\n });\n\n watchUserId((userId) => {\n this.userId = userId;\n });\n\n watchToken((token) => {\n this.token = token;\n });\n }\n\n setConfig(cfg: Config) {\n this.config = new Config(cfg);\n this.api.updateConfig(this.config);\n }\n\n async init(cfg?: Config) {\n const updatedConfig = await this.config.configure({\n ...this.config,\n ...cfg,\n });\n this.setConfig(updatedConfig);\n\n return this;\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.databaseId = val;\n this.api.users.databaseId = val;\n this.api.tenants.databaseId = val;\n }\n }\n\n get userId(): string | undefined | null {\n return this.config.userId;\n }\n\n set userId(userId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\n return this.manager.getConnection(this.config);\n }\n\n /**\n * A convenience function that applies a config and ensures whatever was passed is set properly\n */\n\n getInstance(config: ServerConfig): Server {\n const _config = { ...this.config, ...config };\n\n // be sure the config is up to date\n const updatedConfig = new Config(_config);\n this.setConfig(updatedConfig);\n // propagate special config items\n this.tenantId = updatedConfig.tenantId;\n this.userId = updatedConfig.userId;\n // if we have a token, update it, else use the one that was there\n if (updatedConfig.api.token) {\n this.token = updatedConfig.api.token;\n }\n this.databaseId = updatedConfig.databaseId;\n\n return this;\n }\n}\n\nlet server: Server;\nexport async function create(config?: ServerConfig): Promise<Server> {\n if (!server) {\n server = new Server(config);\n }\n if (config) {\n return await server.init(new Config(config));\n }\n return await server.init();\n}\n\nexport default create;\n"],"names":["LoginUserResponseTokenTypeEnum","AccessToken","RefreshToken","IdToken","red","yellow","reset","baseLogger","config","_len","arguments","length","params","Array","_key","info","message","meta","debug","console","join","JSON","stringify","warn","error","Logger","_config$logger$info","_config$logger","_config$logger$debug","_config$logger2","_config$logger$warn","_config$logger3","_config$logger$error","_config$logger4","_len2","_key2","base","logger","getSecureCookies","cfg","process","env","NILEDB_SECURECOOKIES","Boolean","secureCookies","getDatabaseId","_Logger","databaseId","String","NILEDB_POSTGRES_URL","pgUrl","URL","pathname","substring","e","NILEDB_ID","getUsername","_Logger2","user","url","username","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","NILEDB_API_URL","apiUrl","href","Error","stack","getControlPlane","_Logger8","configureUrl","NILEDB_CONFIGURE","startsWith","getDbHost","_Logger9","db","host","hostname","NILEDB_HOST","getDbPort","_config$db","_Logger10","port","_config$db2","Number","NILEDB_PORT","NODE_ENV","ApiConfig","_ref","cookieKey","_token","_createClass","key","get","set","value","Config","_this","_config$api$cookieKey3","routePrefix","routes","_tenantId","_userId","configure","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_config$api$cookieKey2","envVarConfig","_ref3","dbConfig","configuredHost","configuredPort","_config$api$cookieKey","cp","res","database","possibleError","json","_database","apiHost","dbHost","name","id","dburl","wrap","_callee$","_context","prev","next","_objectWithoutPropertiesLoose","_excluded","_extends","abrupt","searchParams","fetch","headers","Authorization","sent","clone","status","t0","text","stop","_x","apply","userId","_ref4","_excluded2","Events","Eventer","events","_proto","prototype","publish","eventName","callbackList","_iterator","_createForOfIteratorHelperLoose","_step","done","callback","subscribe","push","unsubscribe","index","indexOf","splice","eventer","updateTenantId","Tenant","watchTenantId","cb","updateUserId","User","watchUserId","watchToken","Token","watchEvictPool","EvictPool","evictPool","val","createProxyForPool","pool","Proxy","target","property","connectionString","caller","query","args","concat","called","NileDatabase","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","Pool","startTimeout","on","client","makeAfterCreate","err","clearTimeout","destroy","_this2","_Number2","setTimeout","_Number","end","shutdown","_this3","conn","errorHandler","cause","DBManager","connections","cleared","poolWatcherFn","poolWatcher","has","connection","getConnection","makeId","existing","size","newOne","clear","Map","filterNullUndefined","obj","Object","fromEntries","entries","filter","makeRestUrl","path","qp","URLSearchParams","strParams","toString","apiRoutes","ME","USERS","USER","TENANTS","TENANT","SIGNUP","TENANT_USERS","TENANT_USER","USER_TENANTS","urlMatches","requestUrl","route","request","_x2","_x3","_request","_init","init","updatedHeaders","_init$body","_params$method","loggingRes","Headers","origin","method","body","duplex","Response","t1","t2","t3","statusText","t4","t5","t6","GET","_GET","_x4","_x5","_route","_callee2","_callee2$","_context2","matches","configRoutes","auth","_auth","req","sessionUrl","ResponseError","response","X_NILE_TENANT","X_NILE_USER_ID","X_NILE_SECURECOOKIES","getTokenFromCookie","_headers$get","cookie","split","_cookies","parts","cookieParts","_cookie","slice","_iterator2","_step2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","jwt","decodeJwt","sub","makeBasicHeaders","opts","authHeader","_fetch","_fetch2","basicHeaders","useableUrl","_response$status","_opts$method","_opts$method2","msg","_res","_res2","_res2$errors","_message","includes","replace","encodeURIComponent","t7","t8","t9","errors","t10","POST","_POST","yurl","newTenantName","tenant","PUT","_PUT","session","_URL$pathname$split$r","reverse","_yurl$pathname$split$","email","DELETE","_DELETE","_","_url$pathname$split$r","possibleTenantId","isUUID","regex","test","_request$url$split$re","TENANT_GET","proxyRoutes","SIGNIN","PROVIDERS","SESSION","CSRF","CALLBACK","SIGNOUT","ERROR","provider","passThroughUrl","search","location","GETTER","matchesMe","me","matchesTenantUsers","tenantUsers","matchesUsers","users","matchesTenants","tenants","authRoutes","POSTER","matchesSignup","signup","DELETER","matchesTenantsUsers","PUTER","Handlers","getter","poster","deleter","puter","appRoutes","prefix","Requester","_Config","call","_inheritsLoose","rawRequest","_rawRequest","_headers","Request","values","_x6","_x7","_x8","post","_post","_callee3","cloned","_callee3$","_context3","_x9","_x10","_x11","_get","_callee4","_callee4$","_context4","_x12","_x13","_x14","put","_put","_callee5","_callee5$","_context5","_x15","_x16","_x17","_delete2","_callee6","_callee6$","_context6","delete","_x18","_x19","_x20","ORIGIN","serverLogin","handlers","_login","_providers","_exec","baseHeaders","sessionReq","sessionRes","providers","csrf","csrfReq","csrfRes","csrfToken","_yield$csrfRes$json","credentials","csrfCookie","signInUrl","postReq","loginRes","authCookie","callbackUrl","exec","login","Auth","_requester","handleHeaders","_init2","Tenants","createTenant","_req","tenantsUrl","getTenant","tenantUrl","listTenants","tenantListUrl","deleteTenant","updateTenant","_ref5","_this$tenantId","_this$userId","Users","createUser","usersUrl","createTenantUser","tenantUsersUrl","updateUser","tenantUserUrl","listUsers","linkUser","linkUsersUrl","unlinkUser","_ref6","_ref7","_callee7","_callee7$","_context7","meUrl","updateMe","_ref8","_callee8","_callee8$","_context8","_this$tenantId2","_this$tenantId3","_this$userId2","Api","updateConfig","payload","Server","manager","DbManager","setConfig","updatedConfig","getInstance","_config","_this$config","server","create","_create"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.esm.js","sources":["../src/users/types.ts","../src/utils/Logger.ts","../src/utils/Config/envVars.ts","../src/utils/Config/index.ts","../src/utils/Event/index.ts","../src/db/PoolProxy.ts","../src/db/NileInstance.ts","../src/db/DBManager.ts","../src/api/utils/routes/makeRestUrl.ts","../src/api/utils/routes/apiRoutes.ts","../src/api/utils/routes/urlMatches.ts","../src/api/utils/request.ts","../src/api/routes/me/index.ts","../src/api/utils/auth.ts","../src/utils/ResponseError.ts","../src/utils/fetch.ts","../src/api/routes/users/POST.ts","../src/api/routes/users/GET.ts","../src/api/routes/users/[userId]/PUT.ts","../src/api/routes/users/index.ts","../src/api/routes/tenants/[tenantId]/users/GET.ts","../src/api/routes/tenants/[tenantId]/users/POST.ts","../src/api/routes/tenants/[tenantId]/users/[userId]/DELETE.ts","../src/api/routes/tenants/[tenantId]/users/PUT.ts","../src/api/routes/tenants/[tenantId]/users/index.ts","../src/api/routes/tenants/GET.ts","../src/api/routes/tenants/[tenantId]/GET.ts","../src/api/routes/tenants/[tenantId]/DELETE.ts","../src/api/routes/tenants/[tenantId]/PUT.ts","../src/api/routes/tenants/POST.ts","../src/api/routes/tenants/index.ts","../src/api/utils/routes/proxyRoutes.ts","../src/api/routes/auth/signin.ts","../src/api/routes/auth/session.ts","../src/api/routes/auth/providers.ts","../src/api/routes/auth/csrf.ts","../src/api/routes/auth/callback.ts","../src/api/routes/auth/signout.ts","../src/api/routes/auth/error.ts","../src/api/routes/auth/verify-request.ts","../src/api/handlers/GET.ts","../src/api/routes/signup/POST.ts","../src/api/routes/signup/index.tsx","../src/api/handlers/POST.ts","../src/api/handlers/DELETE.ts","../src/api/handlers/PUT.ts","../src/api/handlers/index.ts","../src/api/utils/routes/defaultRoutes.ts","../src/utils/Requester/index.ts","../src/auth/index.ts","../src/tenants/index.ts","../src/users/index.ts","../src/Api.ts","../src/Server.ts"],"sourcesContent":["export 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 email: string;\n name: string | null;\n familyName: string | null;\n givenName: string | null;\n picture: string | null;\n created: string;\n updated: string;\n emailVerified: boolean | null;\n tenants: { id: string }[];\n}\n","/* eslint-disable no-console */\nimport { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[33m';\nconst reset = '\\x1b[0m';\n\nconst baseLogger = (config: void | ServerConfig, ...params: unknown[]) => ({\n info(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.info(\n `[niledb][DEBUG]${params.join('')} ${message}`,\n meta ? `\\n${JSON.stringify(meta, null, 2)}` : ''\n );\n }\n },\n debug(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.debug(\n `[niledb][DEBUG]${params.join('')} ${message}`,\n meta ? `\\n${JSON.stringify(meta, null, 2)}` : ''\n );\n }\n },\n warn(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.warn(\n `${yellow}[niledb][WARN]${reset}${params.join('')} ${message}`,\n JSON.stringify(meta, null, 2)\n );\n }\n },\n error(message: string | unknown, meta?: Record<string, unknown>) {\n console.error(\n `${red}[niledb][ERROR]${reset}${params.join('')} ${message}`,\n meta\n );\n },\n});\n\nexport default function Logger(\n config?: Config | ServerConfig,\n ...params: unknown[]\n) {\n const base = baseLogger(config, params);\n const info = config?.logger?.info ?? base.info;\n const debug = config?.logger?.debug ?? base.debug;\n const warn = config?.logger?.warn ?? base.warn;\n const error = config?.logger?.error ?? base.error;\n return { info, warn, error, debug };\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 getSecureCookies = (cfg: EnvConfig) => {\n const { config } = cfg;\n if (process.env.NILEDB_SECURECOOKIES) {\n return Boolean(process.env.NILEDB_SECURECOOKIES);\n }\n return config?.secureCookies;\n};\nexport const getDatabaseId = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n\n const { info } = Logger(config, '[databaseId]');\n if (config?.databaseId) {\n logger && info(`${logger}[config] ${config.databaseId}`);\n return String(config?.databaseId);\n }\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n return pgUrl.pathname.substring(1);\n } catch (e) {\n // ok to fail\n }\n }\n logger && info(`${logger}[NILEDB_ID] ${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 if (process.env.NILEDB_POSTGRES_URL) {\n const url = new URL(process.env.NILEDB_POSTGRES_URL);\n if (url.username) {\n return url.username;\n }\n }\n logger && info(`${logger}[NILEDB_USER] ${process.env.NILEDB_USER}`);\n return process.env.NILEDB_USER;\n};\n\nexport const getPassword = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const log = logProtector(logger);\n const { info } = Logger(config, '[password]');\n if (config?.password) {\n log && info(`${logger}[config] ${config.password}`);\n\n return String(config.password);\n }\n if (process.env.NILEDB_POSTGRES_URL) {\n const url = new URL(process.env.NILEDB_POSTGRES_URL);\n if (url.password) {\n return url.password;\n }\n }\n\n logger && info(`${logger}[NILEDB_PASSWORD] ${process.env.NILEDB_PASSWORD}`);\n return process.env.NILEDB_PASSWORD;\n};\n\nexport const getInfoBearer = (cfg: EnvConfig) => {\n return `${getUsername(cfg)}:${getPassword(cfg)}`;\n};\n\nexport const getToken = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[token]');\n if (config?.api?.token) {\n logger && info(`${logger}[config] ${config.api?.token}`);\n return String(config.api?.token);\n }\n if (process.env.NILEDB_TOKEN) {\n logger && info(`${logger}[NILEDB_TOKEN] ${process.env.NILEDB_TOKEN}`);\n return process.env.NILEDB_TOKEN;\n }\n return undefined;\n};\n\nexport const getDatabaseName = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[databaseName]');\n if (config?.databaseName) {\n logger && info(`${logger}[config] ${config.databaseName}`);\n return String(config.databaseName);\n }\n if (process.env.NILEDB_NAME) {\n logger && info(`${logger}[NILEDB_NAME] ${process.env.NILEDB_NAME}`);\n return process.env.NILEDB_NAME;\n }\n\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n return pgUrl.pathname.substring(1);\n } catch (e) {\n // ok to fail\n }\n }\n return null;\n};\n\nexport const getTenantId = (cfg: EnvConfig): string | null => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[tenantId]');\n if (config?.tenantId) {\n logger && info(`${logger}[config] ${config.tenantId}`);\n return config.tenantId;\n }\n\n if (process.env.NILEDB_TENANT) {\n logger && info(`${logger}[NILEDB_TENANT] ${process.env.NILEDB_TENANT}`);\n return process.env.NILEDB_TENANT;\n }\n\n return null;\n};\n\n/**\n * @param cfg various overrides\n * @returns the url for REST to use\n */\nexport const getBasePath = (cfg: EnvConfig): undefined | string => {\n const { config, logger } = cfg;\n const { warn, info, error } = Logger(config, '[basePath]');\n const basePath = config?.api?.basePath;\n if (basePath) {\n logger && info(`${logger}[config] ${basePath}`);\n return basePath;\n }\n\n if (process.env.NILEDB_API_URL) {\n logger && info(`${logger}[NILEDB_API_URL] ${process.env.NILEDB_API_URL}`);\n try {\n const apiUrl = new URL(process.env.NILEDB_API_URL);\n return apiUrl.href;\n } catch (e) {\n if (e instanceof Error) {\n error(e.stack);\n }\n }\n }\n\n warn('not set. Must run auto-configuration');\n return undefined;\n};\n\nexport const getControlPlane = (cfg: EnvConfig) => {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[basePath]');\n\n if (config?.configureUrl) {\n logger && info(`${logger}[config] ${config.configureUrl}`);\n return config.configureUrl;\n }\n\n if (process.env.NILEDB_CONFIGURE) {\n logger &&\n info(`${logger}[NILEDB_CONFIGURE] ${process.env.NILEDB_CONFIGURE}`);\n // backwards compatible, but not really\n if (!process.env.NILEDB_CONFIGURE.startsWith('http')) {\n return `https://${process.env.NILEDB_CONFIGURE}`;\n }\n return process.env.NILEDB_CONFIGURE;\n }\n\n logger && info(`${logger}[default] https://global.thenile.dev`);\n return 'https://global.thenile.dev';\n};\n\nexport function getDbHost(cfg: EnvConfig) {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.host]');\n\n if (config?.db && config.db.host) {\n logger && info(`${logger}[config] ${config?.db.host}`);\n return config.db.host;\n }\n\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n logger && info(`${logger}[NILEDB_POSTGRES_URL] ${pgUrl.hostname}`);\n return pgUrl.hostname;\n } catch (e) {\n // ok to fail\n }\n }\n\n if (process.env.NILEDB_HOST) {\n logger && info(`${logger}[NILEDB_HOST] ${process.env.NILEDB_HOST}`);\n return process.env.NILEDB_HOST;\n }\n\n logger && info(`${logger}[default] db.thenile.dev`);\n return 'db.thenile.dev';\n}\n\nexport function getDbPort(cfg: EnvConfig): number {\n const { config, logger } = cfg;\n const { info } = Logger(config, '[db.port]');\n if (config?.db?.port && config.db.port != null) {\n logger && info(`${logger}[config] ${config?.db.port}`);\n return Number(config.db?.port);\n }\n\n if (process.env.NILEDB_PORT) {\n logger && info(`${logger}[NILEDB_PORT] ${process.env.NILEDB_PORT}`);\n return Number(process.env.NILEDB_PORT);\n }\n if (process.env.NILEDB_POSTGRES_URL) {\n try {\n const pgUrl = new URL(process.env.NILEDB_POSTGRES_URL);\n if (pgUrl.port) {\n return Number(pgUrl.port);\n }\n } catch (e) {\n // ok to fail\n }\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 {\n Database,\n LoggerType,\n NilePoolConfig,\n ServerConfig,\n} from '../../types';\nimport Logger from '../Logger';\n\nimport {\n EnvConfig,\n getBasePath,\n getControlPlane,\n getDatabaseName,\n getDatabaseId,\n getDbHost,\n getDbPort,\n getInfoBearer,\n getPassword,\n getTenantId,\n getToken,\n getUsername,\n getSecureCookies,\n} from './envVars';\n\nexport type ConfigRoutes = {\n SIGNIN?: string;\n SESSION?: string;\n PROVIDERS?: string;\n CSRF?: string;\n CALLBACK?: string;\n SIGNOUT?: string;\n ME?: string;\n ERROR?: string;\n TENANTS?: string;\n TENANT_USERS?: string;\n USERS?: string;\n};\n\nclass ApiConfig {\n public cookieKey?: string;\n public basePath?: string | undefined;\n private _token?: string;\n constructor({\n basePath,\n cookieKey,\n token,\n }: {\n basePath?: string | undefined;\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 routePrefix?: string;\n routes?: ConfigRoutes;\n logger?: LoggerType;\n secureCookies?: boolean | undefined;\n\n debug: boolean;\n\n db: NilePoolConfig;\n\n api: ApiConfig;\n\n private _tenantId?: string | undefined | null;\n private _userId?: string | undefined | null;\n\n public get tenantId(): string | undefined | null {\n return this._tenantId;\n }\n\n public set tenantId(value: string | undefined | null) {\n this._tenantId = value;\n }\n\n public get userId(): string | undefined | null {\n return this._userId;\n }\n\n public set userId(value: string | undefined | null) {\n this._userId = value;\n }\n\n constructor(config?: ServerConfig, logger?: string) {\n const envVarConfig: EnvConfig = { config, logger };\n this.user = getUsername(envVarConfig) as string;\n this.logger = config?.logger;\n this.password = getPassword(envVarConfig) as string;\n if (process.env.NODE_ENV !== 'TEST') {\n if (!this.user) {\n throw new Error(\n 'User is required. Set NILEDB_USER as an environment variable or set `user` in the config options.'\n );\n }\n if (!this.password) {\n throw new Error(\n 'Password is required. Set NILEDB_PASSWORD as an environment variable or set `password` in the config options.'\n );\n }\n }\n\n this.secureCookies = getSecureCookies(envVarConfig);\n this.databaseId = getDatabaseId(envVarConfig) as string;\n this.databaseName = getDatabaseName(envVarConfig) as string;\n this._tenantId = getTenantId(envVarConfig);\n this.debug = Boolean(config?.debug);\n this._userId = config?.userId;\n\n const basePath = getBasePath(envVarConfig);\n const { host, port, ...dbConfig } = config?.db ?? {};\n const configuredHost = host ?? getDbHost(envVarConfig);\n const configuredPort = port ?? getDbPort(envVarConfig);\n\n this.api = new ApiConfig({\n basePath,\n cookieKey: config?.api?.cookieKey ?? 'token',\n token: getToken({ config }),\n });\n this.db = {\n user: this.user,\n password: this.password,\n host: configuredHost,\n port: configuredPort,\n ...dbConfig,\n };\n if (this.databaseName) {\n this.db.database = this.databaseName;\n }\n }\n\n configure = async (config: ServerConfig): Promise<Config> => {\n const { info, error, debug } = Logger(config, '[init]');\n\n const envVarConfig: EnvConfig = {\n config,\n };\n\n const { host, port, ...dbConfig } = config.db ?? {};\n let configuredHost = host ?? getDbHost(envVarConfig);\n const configuredPort = port ?? getDbPort(envVarConfig);\n let basePath = getBasePath(envVarConfig);\n if (configuredHost && this.databaseName && this.databaseId && basePath) {\n info('Already configured, aborting fetch');\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: configuredHost,\n port: configuredPort,\n database: this.databaseName,\n ...dbConfig,\n };\n info('[config set]', { db: this.db, api: this.api });\n return this;\n }\n\n const cp = getControlPlane(envVarConfig);\n\n const databaseName = getDatabaseName({ config, logger: 'getInfo' });\n const url = new URL(`${cp}/databases/configure`);\n if (databaseName) {\n url.searchParams.set('databaseName', databaseName);\n }\n info(`configuring from ${url.href}`);\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${getInfoBearer({ config })}`,\n },\n }).catch(() => {\n error(`Unable to auto-configure. is ${url} available?`);\n });\n if (!res) {\n return this;\n }\n let database: Database;\n const possibleError = res.clone();\n try {\n const json: Database = await res.json();\n if (res.status === 404) {\n info('is the configured databaseName correct?');\n }\n if (json.status && json.status !== 'READY') {\n database = { message: 'Database is not ready yet' } as Database;\n } else {\n database = json;\n }\n } catch (e) {\n const message = await possibleError.text();\n debug('Unable to auto-configure');\n error(message);\n database = { message } as Database;\n }\n info('[fetched database]', database);\n if (process.env.NODE_ENV !== 'TEST') {\n if ('message' in database) {\n if ('statusCode' in database) {\n error(database);\n throw new Error('HTTP error has occurred');\n } else {\n throw new Error(\n 'Unable to auto-configure. Please remove NILEDB_NAME, NILEDB_API_URL, NILEDB_POSTGRES_URL, and/or NILEDB_HOST from your environment variables.'\n );\n }\n }\n if (typeof database === 'object') {\n const { apiHost, dbHost, name, id } = database;\n basePath = basePath || apiHost;\n this.databaseId = id;\n this.databaseName = name;\n const dburl = new URL(dbHost);\n configuredHost = dburl.hostname;\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: configuredHost,\n port: configuredPort,\n database: this.databaseName,\n ...dbConfig,\n };\n info('[config set]', { db: this.db, api: this.api });\n return this;\n };\n}\n","type BusValues = undefined | null | string;\ntype EventFn = (params: BusValues) => void;\nenum Events {\n User = 'userId',\n Tenant = 'tenantId',\n Token = 'token',\n EvictPool = 'EvictPool',\n}\nclass Eventer {\n private events: { [key: string]: EventFn[] } = {};\n\n // Publish event and notify all subscribers\n publish(eventName: string, value: BusValues) {\n const callbackList = this.events[eventName];\n if (callbackList) {\n for (const callback of callbackList) {\n callback(value);\n }\n }\n }\n\n // Subscribe to events\n subscribe(eventName: string, callback: EventFn) {\n if (!this.events[eventName]) {\n this.events[eventName] = [];\n }\n this.events[eventName].push(callback);\n }\n\n // Unsubscribe from an event\n unsubscribe(eventName: string, callback: EventFn) {\n const callbackList = this.events[eventName];\n\n if (!callbackList) {\n return; // Early exit if no event exists\n }\n\n const index = callbackList.indexOf(callback);\n if (index !== -1) {\n callbackList.splice(index, 1); // Remove the callback\n }\n\n // If there are no more listeners, clean up the event\n if (callbackList.length === 0) {\n delete this.events[eventName];\n }\n }\n}\n\n// tenantId manager\nconst eventer = new Eventer();\n\nexport const updateTenantId = (tenantId: BusValues) => {\n eventer.publish(Events.Tenant, tenantId);\n};\n\nexport const watchTenantId = (cb: EventFn) =>\n eventer.subscribe(Events.Tenant, cb);\n\nexport const updateUserId = (userId: BusValues) => {\n eventer.publish(Events.User, userId);\n};\n\nexport const watchUserId = (cb: EventFn) => eventer.subscribe(Events.User, cb);\n\nexport const updateToken = (val: BusValues) => {\n eventer.publish(Events.Token, val);\n};\n\nexport const watchToken = (cb: EventFn) => eventer.subscribe(Events.Token, cb);\n\nexport const watchEvictPool = (cb: EventFn) =>\n eventer.subscribe(Events.EvictPool, cb);\n\nexport const evictPool = (val: BusValues) => {\n eventer.publish(Events.EvictPool, val);\n};\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport Logger from '../utils/Logger';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AllowAny = any;\n\nexport function createProxyForPool(pool: Pool, config: Config): Pool {\n const { info, error } = Logger(config, '[pool]');\n return new Proxy<Pool>(pool, {\n get(target: AllowAny, property) {\n if (property === 'query') {\n // give connection string a pass for these problems\n if (!config.db.connectionString) {\n if (!config.user || !config.password) {\n error(\n 'Cannot connect to the database. User and/or password are missing. Generate them at https://console.thenile.dev'\n );\n } else if (!config.db.database) {\n error(\n 'Database name is missing from the config. Call `nile.init()` or set NILEDB_ID in your .env'\n );\n }\n }\n const caller = target[property];\n return function query(...args: AllowAny) {\n info('query', ...args);\n // @ts-expect-error - not mine\n const called = caller.apply(this, args);\n return called;\n };\n }\n return target[property];\n },\n }) as Pool;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { evictPool } from '../utils/Event';\nimport { AfterCreate } from '../types';\nimport Logger from '../utils/Logger';\n\nimport { createProxyForPool } from './PoolProxy';\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, debug } = 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 debug(`Connection pool config ${JSON.stringify(this.config.db)}`);\n\n this.pool = createProxyForPool(new Pool(remaining), this.config);\n\n if (typeof afterCreate === 'function') {\n warn(\n 'Providing an pool configuration will stop automatic tenant context setting.'\n );\n }\n\n // start the timer for cleanup\n this.startTimeout();\n this.pool.on('connect', async (client) => {\n debug(`pool connected ${this.id}`);\n this.startTimeout();\n const afterCreate: AfterCreate = makeAfterCreate(\n config,\n `${this.id}-${this.timer}`\n );\n afterCreate(client, (err) => {\n const { error } = Logger(config, '[after create callback]');\n if (err) {\n clearTimeout(this.timer);\n error('after create failed', {\n message: err.message,\n stack: err.stack,\n });\n evictPool(this.id);\n }\n });\n });\n this.pool.on('error', (err) => {\n clearTimeout(this.timer);\n info(`pool ${this.id} failed`, {\n message: err.message,\n stack: err.stack,\n });\n evictPool(this.id);\n });\n this.pool.on('release', (destroy) => {\n if (destroy) {\n clearTimeout(this.timer);\n evictPool(this.id);\n debug(`destroying pool ${this.id}`);\n }\n });\n }\n\n startTimeout() {\n const { debug } = Logger(this.config, '[NileInstance]');\n if (this.timer) {\n clearTimeout(this.timer);\n }\n this.timer = setTimeout(() => {\n debug(\n `Pool reached idleTimeoutMillis. ${this.id} evicted after ${\n Number(this.config.db.idleTimeoutMillis) ?? 30000\n }ms`\n );\n this.pool.end(() => {\n clearTimeout(this.timer);\n evictPool(this.id);\n });\n }, Number(this.config.db.idleTimeoutMillis) ?? 30000);\n }\n shutdown() {\n const { debug } = Logger(this.config, '[NileInstance]');\n debug(`attempting to shut down ${this.id}`);\n clearTimeout(this.timer);\n this.pool.end(() => {\n debug(`${this.id} has been shut down`);\n });\n }\n}\n\nexport default NileDatabase;\n\nfunction makeAfterCreate(config: Config, id: string): AfterCreate {\n const { error, warn, debug } = Logger(config, '[afterCreate]');\n return (conn, done) => {\n conn.on('error', function errorHandler(e: Error) {\n error(`Connection ${id} was terminated by server`, {\n message: e.message,\n stack: e.stack,\n });\n done(e, 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 (err) {\n error('query connection failed', {\n cause: err.cause,\n stack: err.stack,\n message: err.message,\n name: err.name,\n id,\n });\n } else {\n if (query.length === 1) {\n debug(`connection context set: tenantId=${config.tenantId}`);\n }\n if (query.length === 2) {\n debug(\n `connection context set: tenantId=${config.tenantId} userId=${config.userId}`\n );\n }\n }\n\n done(err, conn);\n });\n }\n done(null, conn);\n };\n}\n","import { Pool } from 'pg';\n\nimport { Config } from '../utils/Config';\nimport { watchEvictPool } from '../utils/Event';\nimport Logger from '../utils/Logger';\nimport { ServerConfig } from '../types';\n\nimport NileDatabase from './NileInstance';\n\nexport default class DBManager {\n connections: Map<string, NileDatabase>;\n cleared: boolean;\n private poolWatcherFn: (id: undefined | null | string) => void;\n\n private makeId(\n tenantId?: string | undefined | null,\n userId?: string | undefined | null\n ) {\n if (tenantId && userId) {\n return `${tenantId}:${userId}`;\n }\n if (tenantId) {\n return `${tenantId}`;\n }\n return 'base';\n }\n constructor(config: ServerConfig) {\n this.cleared = false;\n this.connections = new Map();\n this.poolWatcherFn = this.poolWatcher(config);\n watchEvictPool(this.poolWatcherFn);\n }\n poolWatcher = (config: ServerConfig) => (id: undefined | null | string) => {\n const { info, warn } = Logger(config, '[DBManager]');\n if (id && this.connections.has(id)) {\n info(`Removing ${id} from db connection pool.`);\n const connection = this.connections.get(id);\n connection?.shutdown();\n this.connections.delete(id);\n } else {\n warn(`missed eviction of ${id}`);\n }\n };\n\n getConnection = (config: ServerConfig): Pool => {\n const { info } = Logger(config, '[DBManager]');\n const id = this.makeId(config.tenantId, config.userId);\n\n const existing = this.connections.get(id);\n info(`# of instances: ${this.connections.size}`);\n if (existing) {\n info(`returning existing ${id}`);\n existing.startTimeout();\n return existing.pool;\n }\n const newOne = new NileDatabase(new Config(config), id);\n this.connections.set(id, newOne);\n info(`created new ${id}`);\n info(`# of instances: ${this.connections.size}`);\n if (this.cleared) {\n this.cleared = false;\n }\n return newOne.pool;\n };\n\n clear = (config: ServerConfig) => {\n const { info } = Logger(config, '[DBManager]');\n info(`Clearing all connections ${this.connections.size}`);\n this.cleared = true;\n this.connections.clear();\n };\n}\n","import { Config } from '../../../utils/Config';\n\nconst NILEDB_API_URL = process.env.NILEDB_API_URL;\n\nfunction filterNullUndefined(\n obj?: Record<string, string | null>\n): { [k: string]: string | null } | undefined {\n if (!obj) {\n return undefined;\n }\n return Object.fromEntries(\n Object.entries(obj).filter(\n ([, value]) => value !== null && value !== undefined\n )\n );\n}\n\nexport function makeRestUrl(\n config: Config,\n path: string,\n qp?: Record<string, string | null>\n) {\n const url = config.api.basePath || NILEDB_API_URL;\n if (!url) {\n throw new Error(\n 'An API url is required. Set it via NILEDB_API_URL. Was auto configuration run?'\n );\n }\n const params = new URLSearchParams(\n filterNullUndefined(qp) as Record<string, string>\n );\n const strParams = params.toString();\n return `${[url, path.substring(1, path.length)].join('/')}${\n strParams ? `?${strParams}` : ''\n }`;\n}\n","import { Config } from '../../../utils/Config';\n\nimport { makeRestUrl } from './makeRestUrl';\n\ntype ApiRouteKeys = keyof typeof apiRoutes;\nexport type ApiRoutePaths = (typeof apiRoutes)[ApiRouteKeys];\nexport const apiRoutes = (config: Config) => ({\n ME: makeRestUrl(config, '/me'),\n USERS: (qp: { tenantId?: null | string; newTenantName?: null | string }) =>\n makeRestUrl(config, '/users', qp),\n USER: (userId: string) => makeRestUrl(config, `/users/${userId}`),\n TENANTS: makeRestUrl(config, '/tenants'),\n TENANT: (tenantId: string) => makeRestUrl(config, `/tenants/${tenantId}`),\n SIGNUP: makeRestUrl(config, '/signup'),\n TENANT_USERS: (tenantId: string) =>\n makeRestUrl(config, `/tenants/${tenantId}/users`),\n TENANT_USER: (tenantId: string, userId: string) =>\n makeRestUrl(config, `/tenants/${tenantId}/users/${userId}`),\n USER_TENANTS: (userId: string) =>\n makeRestUrl(config, `/users/${userId}/tenants`),\n});\n","export default function urlMatches(requestUrl: string, route: string) {\n const url = new URL(requestUrl);\n return url.pathname.startsWith(route);\n}\n","import { Config } from '../../utils/Config';\nimport Logger from '../../utils/Logger';\n\nexport default async function request(\n url: string,\n _init: RequestInit & { request: Request },\n config: Config\n) {\n const { info, error } = Logger(config, '[REQUEST]');\n const { request, ...init } = _init;\n const requestUrl = new URL(request.url);\n const updatedHeaders = new Headers(request.headers);\n\n updatedHeaders.set('host', requestUrl.host);\n updatedHeaders.set('niledb-origin', requestUrl.origin);\n const params = { ...init, headers: updatedHeaders };\n if (params.method === 'POST' || params.method === 'PUT') {\n params.body = init.body ?? request.body;\n // @ts-expect-error - its there\n params.duplex = 'half';\n }\n\n try {\n const res = await fetch(url, { ...params }).catch((e) => {\n error('An error has occurred in the fetch', {\n message: e.message,\n stack: e.stack,\n });\n return new Response(\n 'An unexpected (most likely configuration) problem has occurred',\n { status: 500 }\n );\n });\n const loggingRes = typeof res?.clone === 'function' ? res?.clone() : null;\n info(`[${params.method ?? 'GET'}] ${url}`, {\n status: res?.status,\n statusText: res?.statusText,\n text: await loggingRes?.text(),\n });\n return res;\n } catch (e) {\n if (e instanceof Error) {\n error('An error has occurred in the fetch', {\n message: e.message,\n stack: e.stack,\n });\n }\n return new Response(\n 'An unexpected (most likely configuration) problem has occurred',\n { status: 500 }\n );\n }\n}\n","import { Routes } from '../../types';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\n\nconst key = 'ME';\n\n/**\n * @swagger\n * /api/me:\n * get:\n * summary: Identify the principal\n * description: Returns information about the principal associated with the session\n * provided\n * operationId: me\n * responses:\n * \"200\":\n * description: Identified user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nasync function GET(\n url: string,\n init: RequestInit & { request: Request },\n config: Config\n) {\n const res = await request(url, init, config);\n return res;\n}\n\nexport default async function route(request: Request, config: Config) {\n const url = apiRoutes(config)[key];\n\n switch (request.method) {\n case 'GET':\n return await GET(url, { request }, config);\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Config } from '../../utils/Config';\nimport Logger from '../../utils/Logger';\n\nimport request from './request';\n\nexport type JWT = {\n email: string;\n sub: string;\n id: string;\n iat: number;\n exp: number;\n jti: string;\n};\n\nexport type ActiveSession = {\n id: string;\n email: string;\n expires: Date;\n user?: {\n id: string;\n name: string;\n image: string;\n email: string;\n emailVerified: void | Date;\n };\n};\nexport default async function auth(\n req: Request,\n config: Config\n): Promise<void | ActiveSession> {\n const { info, error } = Logger(config, '[nileauth]');\n info('checking auth');\n\n const sessionUrl = `${config.api.basePath}/auth/session`;\n info(`using session${sessionUrl}`);\n // handle the pass through with posts\n req.headers.delete('content-length');\n\n const res = await request(sessionUrl, { request: req }, config);\n if (!res) {\n info('no session found');\n return undefined;\n }\n info('session active');\n try {\n return await new Response(res.body).json();\n } catch (e) {\n error(e);\n return undefined;\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","import { decodeJwt } from 'jose';\n\nimport { ResponseError } from './ResponseError';\nimport { Config } from './Config';\nimport { NileRequest } from './Requester';\nimport { updateTenantId, updateUserId } from './Event';\nimport { getToken } from './Config/envVars';\nimport Logger from './Logger';\n\nexport const X_NILE_TENANT = 'niledb-tenant-id';\nexport const X_NILE_USER_ID = 'niledb-user-id';\nexport const X_NILE_SECURECOOKIES = 'niledb-useSecureCookies';\n\nexport function handleTenantId(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: NileRequest<any>,\n config: Config\n): ResponseError | void {\n // already set, no need to try and figure it out\n if (config.tenantId) {\n return;\n }\n return new ResponseError('tenant id needs to be set', { status: 400 });\n}\n\nfunction getTokenFromCookie(headers: Headers, cookieKey: void | string) {\n const cookie = headers.get('cookie')?.split('; ');\n const _cookies: Record<string, string> = {};\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n\n if (cookie) {\n for (const parts of cookie) {\n const cookieParts = parts.split('=');\n const _cookie = cookieParts.slice(1).join('=');\n const name = cookieParts[0];\n _cookies[name] = _cookie;\n }\n }\n if (cookieKey) {\n return _cookies[cookieKey];\n }\n return null;\n}\nexport function getTenantFromHttp(headers: Headers, config?: Config) {\n const cookieTenant = getTokenFromCookie(headers, X_NILE_TENANT);\n return cookieTenant ?? headers?.get(X_NILE_TENANT) ?? config?.tenantId;\n}\n\nexport function getUserFromHttp(headers: Headers, config: Config) {\n const token = getTokenFromCookie(headers, config.api.cookieKey);\n if (token) {\n const jwt = decodeJwt(token);\n return jwt.sub;\n }\n return headers?.get(X_NILE_USER_ID) ?? config.userId;\n}\n\nexport function makeBasicHeaders(config: Config, opts?: RequestInit) {\n const headers = new Headers(opts?.headers);\n headers.set('content-type', 'application/json; charset=utf-8');\n const cookieKey = config.api?.cookieKey;\n\n // this is old, but still maybe something worth keeping.\n const authHeader = headers.get('Authorization');\n if (!authHeader) {\n const token = getTokenFromCookie(headers, cookieKey);\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n } else if (getToken({ config })) {\n headers.set('Authorization', `Bearer ${getToken({ config })}`);\n }\n }\n if (config.secureCookies) {\n headers.set(X_NILE_SECURECOOKIES, 'true');\n }\n return headers;\n}\n\nexport async function _fetch(\n config: Config,\n path: string,\n opts?: RequestInit\n): Promise<Response | ResponseError> {\n const { debug, error } = Logger(config, '[server]');\n\n const url = `${config.api?.basePath}${path}`;\n const headers = new Headers(opts?.headers);\n const tenantId = getTenantFromHttp(headers, config);\n const basicHeaders = makeBasicHeaders(config, opts);\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 debug(`[fetch] ${useableUrl}`);\n\n try {\n const response = await fetch(useableUrl, {\n ...opts,\n headers: basicHeaders,\n }).catch((e) => {\n error('[fetch][response]', { message: e.message, stack: e.stack });\n });\n\n if (response && response.status >= 200 && response.status < 300) {\n if (typeof response.clone === 'function') {\n try {\n debug(\n `[fetch][response][${opts?.method ?? 'GET'}] ${\n response.status\n } ${useableUrl}`,\n {\n body: await response.clone().json(),\n }\n );\n } catch (e) {\n debug(\n `[fetch][response][${opts?.method ?? 'GET'}] ${\n response.status\n } ${useableUrl}`,\n {\n body: await response.clone().text(),\n }\n );\n }\n }\n return response;\n }\n if (response?.status === 404) {\n return new ResponseError('Not found', { status: 404 });\n }\n\n if (response?.status === 401) {\n return new ResponseError('Unauthorized', { status: 401 });\n }\n if (response?.status === 405) {\n return new ResponseError('Method not allowed', { status: 405 });\n }\n let res;\n const errorHandler =\n typeof response?.clone === 'function' ? response.clone() : null;\n let msg = '';\n try {\n res = await (response as Response)?.json();\n } catch (e) {\n if (errorHandler) {\n msg = await errorHandler.text();\n if (msg) {\n error(`[fetch][response] status: ${errorHandler.status}]`, {\n message: msg,\n });\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(`[fetch][response] status: ${errorHandler?.status}] ${message}`);\n return new ResponseError(message, { status: 400 });\n }\n if (res && 'errors' in res) {\n const {\n errors: [message],\n } = res;\n error(`[fetch][response] status: ${errorHandler?.status}] ${message}`);\n return new ResponseError(message, { status: 400 });\n }\n error(\n `[fetch][response] status: ${errorHandler?.status}] UNHANDLED ERROR`,\n {\n res,\n }\n );\n return new ResponseError(null, {\n status: (response as Response)?.status ?? 500,\n });\n } catch (e) {\n return new ResponseError('an unexpected error has occurred', {\n status: 500,\n });\n }\n}\n","import { getTenantFromHttp } from '../../../utils/fetch';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport { Config } from '../../../utils/Config';\n/**\n * @swagger\n * /api/users:\n * post:\n * tags:\n * - users\n * summary: Creates a user\n * description: Creates a user in the database\n * operationId: createUser\n * parameters:\n * - name: tenantId\n * description: A tenant id to add the user to when they are created\n * in: query\n * schema:\n * type: string\n * - name: newTenantName\n * description: A tenant name to create, then the user to when they are created\n * in: query\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * The `newTenant` is optional; if provided, it is used as the name of a new tenant record associated with the newly created user.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * Create User Request with Tenant:\n * summary: Creates a user and a new tenant for that user\n * description: Create User Request with Tenant\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * newTenant: My Sandbox\n * responses:\n * \"201\":\n * description: User created\n * content:\n * application/json:\n * schema:\n * $ref: \"#/components/schemas/User\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nexport async function POST(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const yurl = new URL(init.request.url);\n const tenantId = yurl.searchParams.get('tenantId');\n const newTenantName = yurl.searchParams.get('newTenantName');\n const tenant = tenantId ?? getTenantFromHttp(init.request.headers);\n\n const url = apiRoutes(config).USERS({ tenantId: tenant, newTenantName });\n\n return await request(url, init, config);\n}\n","import { getTenantFromHttp } from '../../../utils/fetch';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\nimport { Config } from '../../../utils/Config';\n\n/**\n * @swagger\n * /api/users:\n * get:\n * tags:\n * - users\n * summary: lists users in the tenant\n * description: Returns information about the users within the tenant\n * provided. You can also pass the a `niledb-tenant-id` in the header or in a cookie.\n * operationId: listUsers\n * parameters:\n * - name: tenantId\n * in: query\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: A list of users\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: '#/components/schemas/TenantUser'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function GET(\n config: Config,\n init: RequestInit & { request: Request },\n log: (message: string | unknown, meta?: Record<string, unknown>) => void\n) {\n const yurl = new URL(init.request.url);\n const tenantId = yurl.searchParams.get('tenantId');\n const tenant = tenantId ?? getTenantFromHttp(init.request.headers);\n\n if (!tenant) {\n log('[GET] No tenant id provided.');\n return new Response(null, { status: 404 });\n }\n const url = apiRoutes(config).TENANT_USERS(tenant);\n init.method = 'GET';\n return await request(url, init, config);\n}\n","import { apiRoutes } from '../../../utils/routes/apiRoutes';\nimport fetch from '../../../utils/request';\nimport { ActiveSession } from '../../../utils/auth';\nimport { Config } from '../../../../utils/Config';\n\n/**\n * @swagger\n * /api/users/{userid}:\n * put:\n * tags:\n * - users\n * summary: update a user\n * description: updates a user within the tenant\n * operationId: updateUser\n * parameters:\n * - name: userid\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * Update a user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/UpdateUserRequest'\n * responses:\n * \"200\":\n * description: An updated user\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nexport async function PUT(\n config: Config,\n session: void | ActiveSession,\n init: RequestInit & { request: Request }\n) {\n if (!session) {\n return new Response(null, { status: 401 });\n }\n init.body = init.request.body;\n init.method = 'PUT';\n\n // update the user\n\n const [userId] = new URL(init.request.url).pathname.split('/').reverse();\n\n const url = apiRoutes(config).USER(userId);\n\n return await fetch(url, init, config);\n}\n","import { Routes } from '../../types';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport auth from '../../utils/auth';\nimport { Config } from '../../../utils/Config';\nimport Logger from '../../../utils/Logger';\n\nimport { POST } from './POST';\nimport { GET } from './GET';\nimport { PUT } from './[userId]/PUT';\n\nconst key = 'USERS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const session = await auth(request, config);\n\n switch (request.method) {\n case 'GET':\n return await GET(config, { request }, info);\n case 'POST':\n return await POST(config, { request });\n case 'PUT':\n return await PUT(config, session, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport { Config } from '../../../../../utils/Config';\nimport request from '../../../../utils/request';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * get:\n * tags:\n * - users\n * summary: List tenant users\n * description: Lists users that are associated with the specified tenant.\n * operationId: listTenantUsers\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: Users found\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: '#/components/schemas/User'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function GET(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n\n const url = `${apiRoutes(config).TENANT_USERS(tenantId)}`;\n return await request(url, init, config);\n}\n","import { ActiveSession } from '../../../../utils/auth';\nimport fetch from '../../../../utils/request';\nimport { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport { Config } from '../../../../../utils/Config';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * post:\n * tags:\n * - users\n * summary: Create a user in a tenant\n * description: Creates a new user and associates that user with the specified\n * tenant.\n * operationId: createTenantUser\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * responses:\n * \"201\":\n * description: User created\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n */\nexport async function POST(\n config: Config,\n session: ActiveSession,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n init.body = JSON.stringify({ email: session.email });\n init.method = 'PUT';\n const url = apiRoutes(config).TENANT_USERS(tenantId);\n\n return await fetch(url, init, config);\n}\n","import { apiRoutes } from '../../../../../utils/routes/apiRoutes';\nimport fetch from '../../../../../utils/request';\nimport { Config } from '../../../../../../utils/Config';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}/users/{email}:\n * delete:\n * tags:\n * - tenants\n * summary: removes a user from a tenant\n * description: removes an associated user from a specified\n * tenant.\n * operationId: unlinkUser \n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * - name: email \n * in: path\n * required: true\n * schema:\n * type: string\n \n * responses:\n * \"204\":\n * description: User removed\n */\n\nexport async function DELETE(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [userId, _, tenantId] = yurl.pathname.split('/').reverse();\n\n init.method = 'DELETE';\n init.body = JSON.stringify({ email: userId });\n const url = `${apiRoutes(config).TENANT_USER(tenantId, userId)}`;\n\n return await fetch(url, init, config);\n}\n","import { apiRoutes } from '../../../../utils/routes/apiRoutes';\nimport fetch from '../../../../utils/request';\nimport { Config } from '../../../../../utils/Config';\n/**\n * @swagger\n * /api/tenants/{tenantId}/users:\n * put:\n * tags:\n * - tenants\n * summary: associates an existing user with the tenant\n * operationId: linkUser\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * requestBody:\n * description: |\n * The email of the user you want to add to a tenant.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/AssociateUserRequest'\n * responses:\n * \"201\":\n * description: add user to tenant\n */\n\nexport async function PUT(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n\n init.method = 'PUT';\n const url = `${apiRoutes(config).TENANT_USERS(tenantId)}`;\n\n return await fetch(url, init, config);\n}\n","import { Config } from '../../../../../utils/Config';\nimport urlMatches from '../../../../utils/routes/urlMatches';\nimport { Routes } from '../../../../types';\nimport auth from '../../../../utils/auth';\nimport Logger from '../../../../../utils/Logger';\n\nimport { GET } from './GET';\nimport { POST } from './POST';\nimport { DELETE } from './[userId]/DELETE';\nimport { PUT } from './PUT';\n\nconst key = 'TENANT_USERS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const session = await auth(request, config);\n\n if (!session) {\n info('401');\n return new Response(null, { status: 401 });\n }\n const yurl = new URL(request.url);\n const [, tenantId] = yurl.pathname.split('/').reverse();\n\n if (!tenantId) {\n info('No tenant id found in path');\n return new Response(null, { status: 404 });\n }\n\n switch (request.method) {\n case 'GET':\n return await GET(config, { request });\n case 'POST':\n return await POST(config, session, { request });\n case 'PUT':\n return await PUT(config, { request });\n case 'DELETE':\n return await DELETE(config, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n const url = new URL(request.url);\n const [userId, possibleTenantId, tenantId] = url.pathname\n .split('/')\n .reverse();\n let route = configRoutes[key]\n .replace('{tenantId}', tenantId)\n .replace('{userId}', userId);\n if (userId === 'users') {\n route = configRoutes[key].replace('{tenantId}', possibleTenantId);\n }\n return urlMatches(request.url, route);\n}\n","import { Config } from '../../../utils/Config';\nimport { ActiveSession } from '../../utils/auth';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants:\n * get:\n * tags:\n * - tenants\n * summary: list tenants by user\n * description: Creates a user in the database\n * operationId: listTenants\n * responses:\n * \"200\":\n * description: a list of tenants\n * content:\n * application/json:\n * schema:\n * type: array\n * items:\n * $ref: \"#/components/schemas/Tenant\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function GET(\n config: Config,\n session: ActiveSession,\n init: RequestInit & { request: Request }\n) {\n let url = `${apiRoutes(config).USER_TENANTS(session.id)}`;\n if (typeof session === 'object' && 'user' in session && session.user) {\n url = `${apiRoutes(config).USER_TENANTS(session.user.id)}`;\n }\n\n const res = await request(url, init, config);\n return res;\n}\n","import { Config } from '../../../../utils/Config';\nimport request from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * get:\n * tags:\n * - tenants\n * summary: Obtains a specific tenant.\n * operationId: getTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: the desired tenant\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function GET(\n config: Config,\n init: RequestInit & { request: Request },\n log: (message: string | unknown, meta?: Record<string, unknown>) => void\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n log('[GET] No tenant id provided.');\n return new Response(null, { status: 404 });\n }\n\n init.method = 'GET';\n const url = `${apiRoutes(config).TENANT(tenantId)}`;\n\n return await request(url, init, config);\n}\n","import { Config } from '../../../../utils/Config';\nimport fetch from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * delete:\n * tags:\n * - tenants\n * summary: Deletes a tenant.\n * operationId: deleteTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"204\":\n * description: Tenant deleted\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function DELETE(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n\n init.method = 'DELETE';\n const url = `${apiRoutes(config).TENANT(tenantId)}`;\n\n return await fetch(url, init, config);\n}\n","import { Config } from '../../../../utils/Config';\nimport fetch from '../../../utils/request';\nimport { apiRoutes } from '../../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants/{tenantId}:\n * put:\n * tags:\n * - tenants\n * summary: Obtains a specific tenant.\n * operationId: updateTenant\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"201\":\n * description: update an existing tenant\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Tenant not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function PUT(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n const yurl = new URL(init.request.url);\n const [tenantId] = yurl.pathname.split('/').reverse();\n if (!tenantId) {\n return new Response(null, { status: 404 });\n }\n init.body = init.request.body;\n init.method = 'PUT';\n const url = `${apiRoutes(config).TENANT(tenantId)}`;\n\n return await fetch(url, init, config);\n}\n","import { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/tenants:\n * post:\n * tags:\n * - tenants\n * summary: Create a tenant\n * description: Creates a new tenant in a database.\n * operationId: createTenant\n * requestBody:\n * description: A wrapper for the tenant name.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateTenantRequest'\n * examples:\n * Create Tenant Request:\n * summary: Creates a named tenant\n * description: Create Tenant Request\n * value:\n * name: My Sandbox\n * responses:\n * \"201\":\n * description: Tenant created\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/Tenant'\n * \"401\":\n * description: Unauthorized\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n * \"404\":\n * description: Database not found\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/APIError'\n */\nexport async function POST(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const url = `${apiRoutes(config).TENANTS}`;\n\n return await request(url, init, config);\n}\n","import { Config } from '../../../utils/Config';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\nimport auth from '../../utils/auth';\nimport Logger from '../../../utils/Logger';\n\nimport { GET } from './GET';\nimport { GET as TENANT_GET } from './[tenantId]/GET';\nimport { DELETE } from './[tenantId]/DELETE';\nimport { PUT } from './[tenantId]/PUT';\nimport { POST } from './POST';\n\nfunction isUUID(value: string | null | undefined) {\n if (!value) {\n return false;\n }\n // is any UUID\n const regex =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5|7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n\n return regex.test(value);\n}\n\nconst key = 'TENANTS';\n\nexport default async function route(request: Request, config: Config) {\n const { info } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const session = await auth(request, config);\n\n if (!session) {\n info('401');\n return new Response(null, { status: 401 });\n }\n const [possibleTenantId] = request.url.split('/').reverse();\n\n switch (request.method) {\n case 'GET':\n if (isUUID(possibleTenantId)) {\n return await TENANT_GET(config, { request }, info);\n }\n return await GET(config, session, { request });\n case 'POST':\n return await POST(config, { request });\n case 'DELETE':\n return await DELETE(config, { request });\n case 'PUT':\n return await PUT(config, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Config } from '../../../utils/Config';\n\nimport { makeRestUrl } from './makeRestUrl';\n\nexport const proxyRoutes = (config: Config) => ({\n SIGNIN: makeRestUrl(config, '/auth/signin'),\n PROVIDERS: makeRestUrl(config, '/auth/providers'),\n SESSION: makeRestUrl(config, '/auth/session'),\n CSRF: makeRestUrl(config, '/auth/csrf'),\n CALLBACK: makeRestUrl(config, '/auth/callback'),\n SIGNOUT: makeRestUrl(config, '/auth/signout'),\n ERROR: makeRestUrl(config, '/auth/error'),\n VERIFY_REQUEST: makeRestUrl(config, '/auth/verify-request'),\n});\n\ntype ProxyKeys = keyof typeof proxyRoutes;\n\nexport type ProxyPaths = (typeof proxyRoutes)[ProxyKeys];\n","/**\n * @swagger\n * /api/auth/signin:\n * get:\n * tags:\n * - authentication\n * summary: lists users in the tenant\n * description: Returns information about the users within the tenant\n * provided\n * operationId: signin\n * parameters:\n * - name: tenantId\n * in: path\n * required: true\n * schema:\n * type: string\n * responses:\n * \"200\":\n * description: A list of users\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/User'\n * \"404\":\n * description: Not found\n * content: {}\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\n\nimport { Routes } from '../../types';\nimport { Config } from '../../../utils/Config';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\n\nconst key = 'SIGNIN';\n\nexport default async function route(req: Request, config: Config) {\n let url = proxyRoutes(config)[key];\n\n const init: RequestInit = {\n method: req.method,\n headers: req.headers,\n };\n if (req.method === 'POST') {\n if (typeof req.clone === 'function') {\n init.body = req.clone().body;\n }\n const [provider] = new URL(req.url).pathname.split('/').reverse();\n\n url = `${proxyRoutes(config)[key]}/${provider}`;\n }\n\n const passThroughUrl = new URL(req.url);\n const params = new URLSearchParams(passThroughUrl.search);\n\n url = `${url}${params.toString() !== '' ? `?${params.toString()}` : ''}`;\n\n const res = await request(url, { ...init, request: req }, config);\n\n return res;\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config).SESSION,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.SESSION);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config).PROVIDERS,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.PROVIDERS);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config).CSRF,\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.CSRF);\n}\n","import { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport fetch from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\nimport { Config } from '../../../utils/Config';\nimport Logger from '../../../utils/Logger';\n\nconst key = 'CALLBACK';\n\nexport default async function route(request: Request, config: Config) {\n const { error } = Logger(\n { ...config, debug: config.debug } as Config,\n `[ROUTES][${key}]`\n );\n const [provider] = new URL(request.url).pathname.split('/').reverse();\n const passThroughUrl = new URL(request.url);\n const params = new URLSearchParams(passThroughUrl.search);\n const url = `${proxyRoutes(config).CALLBACK}/${provider}${\n params.toString() !== '' ? `?${params.toString()}` : ''\n }`;\n\n const res = await fetch(\n url,\n {\n request,\n method: request.method,\n },\n config\n ).catch((e) => {\n error('an error as occurred', e);\n });\n\n const location = res?.headers.get('location');\n if (location) {\n return new Response(res?.body, {\n status: 302,\n headers: res?.headers,\n });\n }\n return new Response(res?.body, {\n status: res?.status,\n headers: res?.headers,\n });\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.CALLBACK);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport fetch from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nconst key = 'SIGNOUT';\nexport default async function route(request: Request, config: Config) {\n let url = proxyRoutes(config)[key];\n\n const init: RequestInit = {\n method: request.method,\n };\n if (request.method === 'POST') {\n init.body = request.body;\n const [provider] = new URL(request.url).pathname.split('/').reverse();\n url = `${proxyRoutes(config)[key]}/${provider}`;\n }\n\n const res = await fetch(url, { ...init, request }, config);\n return res;\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { Routes } from '../../types';\nimport { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Config } from '../../../utils/Config';\n\nconst key = 'ERROR';\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config)[key],\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import { proxyRoutes } from '../../utils/routes/proxyRoutes';\nimport request from '../../utils/request';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\nimport { Config } from '../../../utils/Config';\n\nconst key = 'VERIFY_REQUEST';\n\nexport default async function route(req: Request, config: Config) {\n return request(\n proxyRoutes(config)[key],\n {\n method: req.method,\n request: req,\n },\n config\n );\n}\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import Logger from '../../utils/Logger';\nimport me, { matches as matchesMe } from '../routes/me';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport { Routes } from '../types';\nimport * as authRoutes from '../routes/auth';\nimport { Config } from '../../utils/Config';\n\nexport default function GETTER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[GET MATCHER]');\n return async function GET(req: Request) {\n if (matchesMe(configRoutes, req)) {\n info('matches me');\n return me(req, config);\n }\n if (matchesTenantUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n if (matchesUsers(configRoutes, req)) {\n info('matches users');\n return users(req, config);\n }\n\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n\n if (authRoutes.matchSession(configRoutes, req)) {\n info('matches session');\n return authRoutes.handleSession(req, config);\n }\n\n if (authRoutes.matchSignIn(configRoutes, req)) {\n info('matches signin');\n return authRoutes.handleSignIn(req, config);\n }\n\n if (authRoutes.matchProviders(configRoutes, req)) {\n info('matches providers');\n return authRoutes.handleProviders(req, config);\n }\n\n if (authRoutes.matchCsrf(configRoutes, req)) {\n info('matches csrf');\n return authRoutes.handleCsrf(req, config);\n }\n\n if (authRoutes.matchCallback(configRoutes, req)) {\n info('matches callback');\n return authRoutes.handleCallback(req, config);\n }\n if (authRoutes.matchSignOut(configRoutes, req)) {\n info('matches signout');\n return authRoutes.handleSignOut(req, config);\n }\n if (authRoutes.matchesVerifyRequest(configRoutes, req)) {\n info('matches verify-request');\n return authRoutes.handleVerifyRequest(req, config);\n }\n if (authRoutes.matchError(configRoutes, req)) {\n info('matches error');\n return authRoutes.handleError(req, config);\n }\n warn('No GET routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import { Config } from '../../../utils/Config';\nimport request from '../../utils/request';\nimport { apiRoutes } from '../../utils/routes/apiRoutes';\n\n/**\n * @swagger\n * /api/signup:\n * post:\n * tags:\n * - users\n * summary: signs a user up\n * description: signs a user up and logs them in. Expects a email and password combo\n * operationId: signUp\n * parameters:\n * - name: tenantId\n * description: A tenant id to add the user to when they are created\n * in: query\n * schema:\n * type: string\n * - name: newTenantName\n * description: A tenant name to create, then the user to when they are created\n * in: query\n * schema:\n * type: string\n * requestBody:\n * description: |-\n * The email and password combination the user will use to authenticate.\n * The `name` is optional; if provided it will be recorded in the `users` table.\n * The `newTenant` is optional; if provided, it is used as the name of a new tenant record associated with the newly created user.\n * content:\n * application/json:\n * schema:\n * $ref: '#/components/schemas/CreateBasicUserRequest'\n * examples:\n * Create User Request:\n * summary: Creates a user with basic credentials\n * description: Create User Request\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * Create User Request with Tenant:\n * summary: Creates a user and a new tenant for that user\n * description: Create User Request with Tenant\n * value:\n * email: a.user@somedomain.com\n * password: somepassword\n * name: A. User\n * newTenant: My Sandbox\n * responses:\n * \"201\":\n * description: User and session created\n * content:\n * application/json:\n * schema:\n * $ref: \"#/components/schemas/User\"\n * \"400\":\n * description: API/Database failures\n * content:\n * text/plain:\n * schema:\n * type: string\n * \"401\":\n * description: Unauthorized\n * content: {}\n */\nexport async function POST(\n config: Config,\n init: RequestInit & { request: Request }\n) {\n init.body = init.request.body;\n init.method = 'POST';\n const url = `${apiRoutes(config).SIGNUP}`;\n\n return await request(url, init, config);\n}\n","import { Config } from '../../../utils/Config';\nimport urlMatches from '../../utils/routes/urlMatches';\nimport { Routes } from '../../types';\n\nimport { POST } from './POST';\n\nconst key = 'SIGNUP';\n\nexport default async function route(request: Request, config: Config) {\n switch (request.method) {\n case 'POST':\n return await POST(config, { request });\n\n default:\n return new Response('method not allowed', { status: 405 });\n }\n}\n\nexport function matches(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes[key]);\n}\n","import Logger from '../../utils/Logger';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport signup, { matches as matchesSignup } from '../routes/signup';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\nimport * as authRoutes from '../routes/auth';\n\nexport default function POSTER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[POST MATCHER]');\n return async function POST(req: Request) {\n // order matters for tenantUsers\n if (matchesTenantUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n\n if (matchesSignup(configRoutes, req)) {\n info('matches signup');\n return signup(req, config);\n }\n\n if (matchesUsers(configRoutes, req)) {\n info('matches users');\n return users(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n\n if (authRoutes.matchSession(configRoutes, req)) {\n info('matches session');\n return authRoutes.handleSession(req, config);\n }\n\n if (authRoutes.matchSignIn(configRoutes, req)) {\n info('matches signin');\n return authRoutes.handleSignIn(req, config);\n }\n\n if (authRoutes.matchProviders(configRoutes, req)) {\n info('matches providers');\n return authRoutes.handleProviders(req, config);\n }\n\n if (authRoutes.matchCsrf(configRoutes, req)) {\n info('matches csrf');\n return authRoutes.handleCsrf(req, config);\n }\n\n if (authRoutes.matchCallback(configRoutes, req)) {\n info('matches callback');\n return authRoutes.handleCallback(req, config);\n }\n if (authRoutes.matchSignOut(configRoutes, req)) {\n info('matches signout');\n return authRoutes.handleSignOut(req, config);\n }\n warn('No POST routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import Logger from '../../utils/Logger';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantsUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\n\nexport default function DELETER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[DELETE MATCHER]');\n return async function DELETE(req: Request) {\n if (matchesTenantsUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n warn('No DELETE routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import Logger from '../../utils/Logger';\nimport users, { matches as matchesUsers } from '../routes/users';\nimport tenants, { matches as matchesTenants } from '../routes/tenants';\nimport tenantUsers, {\n matches as matchesTenantUsers,\n} from '../routes/tenants/[tenantId]/users';\nimport { Routes } from '../types';\nimport { Config } from '../../utils/Config';\n\nexport default function PUTER(configRoutes: Routes, config: Config) {\n const { info, warn } = Logger(config, '[PUT MATCHER]');\n return async function PUT(req: Request) {\n if (matchesTenantUsers(configRoutes, req)) {\n info('matches tenant users');\n return tenantUsers(req, config);\n }\n if (matchesUsers(configRoutes, req)) {\n info('matches users');\n return users(req, config);\n }\n if (matchesTenants(configRoutes, req)) {\n info('matches tenants');\n return tenants(req, config);\n }\n warn('No PUT routes matched');\n return new Response(null, { status: 404 });\n };\n}\n","import { Config } from '../../utils/Config';\nimport { Routes } from '../types';\n\nimport getter from './GET';\nimport poster from './POST';\nimport deleter from './DELETE';\nimport puter from './PUT';\n\nexport default function Handlers(configRoutes: Routes, config: Config) {\n const GET = getter(configRoutes, config);\n const POST = poster(configRoutes, config);\n const DELETE = deleter(configRoutes, config);\n const PUT = puter(configRoutes, config);\n return {\n GET,\n POST,\n DELETE,\n PUT,\n };\n}\n","import { Routes } from '../../types';\n\nexport const appRoutes = (prefix = '/api'): Routes => ({\n SIGNIN: `${prefix}/auth/signin`,\n PROVIDERS: `${prefix}/auth/providers`,\n SESSION: `${prefix}/auth/session`,\n CSRF: `${prefix}/auth/csrf`,\n CALLBACK: `${prefix}/auth/callback`,\n SIGNOUT: `${prefix}/auth/signout`,\n ERROR: `${prefix}/auth/error`,\n VERIFY_REQUEST: `${prefix}/auth/verify-request`,\n ME: `${prefix}/me`,\n USERS: `${prefix}/users`,\n TENANTS: `${prefix}/tenants`,\n TENANT_USER: `${prefix}/tenants/{tenantId}/users/{userId}`,\n TENANT_USERS: `${prefix}/tenants/{tenantId}/users`,\n SIGNUP: `${prefix}/signup`,\n});\n","import { Config } from '../Config';\nimport { ResponseError } from '../ResponseError';\nimport { X_NILE_TENANT, _fetch } from '../fetch';\n\nexport { NileResponse, NileRequest } from './types';\n\ntype Methods = 'DELETE' | 'POST' | 'GET' | 'PUT';\nexport default class Requester<T> extends Config {\n constructor(config: Config) {\n super(config);\n }\n\n async rawRequest(\n method: Methods,\n url: string,\n init: RequestInit,\n body?: string\n ): Promise<Response> {\n const _init = {\n ...init,\n body,\n method,\n };\n\n const res = await _fetch(this, url, _init);\n\n if (res instanceof ResponseError) {\n return res.response;\n }\n\n return res;\n }\n\n /**\n * three options here\n * 1) pass in headers for a server side request\n * 2) pass in the payload that matches the api\n * 3) pass in the request object sent by a browser\n * @param method\n * @param url\n * @param req\n * @param init\n * @returns\n */\n protected async request(\n method: Methods,\n url: string,\n req: T | Headers,\n init?: RequestInit\n ): Promise<Response> {\n // set the headers\n const headers = new Headers(init ? init?.headers : {});\n if (req instanceof Headers) {\n const tenantId = req.get(X_NILE_TENANT);\n const cookie = req.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n } else if (req instanceof Request) {\n // pass back the X_NILE_TENANT\n const _headers = new Headers(req?.headers);\n const tenantId = _headers.get(X_NILE_TENANT);\n const cookie = _headers.get('cookie');\n if (tenantId) {\n headers.set(X_NILE_TENANT, tenantId);\n }\n if (cookie) {\n headers.set('cookie', cookie);\n }\n }\n // default the body - may be the actual payload for the API\n let body: string | undefined = JSON.stringify(req);\n\n // comes from next/some server\n if (method === 'GET') {\n body = undefined;\n } else if (req instanceof Request) {\n body = await new Response(req.body).text();\n } else if (\n // is just headers for a GET request\n req instanceof Headers ||\n JSON.stringify(req) === '{}' ||\n (req && typeof req === 'object' && Object.values(req).length === 0)\n ) {\n body = undefined;\n }\n\n const _init = {\n ...init,\n headers,\n };\n\n return await this.rawRequest(method, url, _init, body);\n }\n\n async post<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('POST', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n const cloned = response.clone();\n try {\n return await cloned.json();\n } catch (e) {\n // give back the response\n }\n }\n return response;\n }\n\n async get<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('GET', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n const cloned = response.clone();\n try {\n return await cloned.json();\n } catch (e) {\n // give back the response\n }\n }\n return response;\n }\n\n async put<R = JSON>(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response | R> {\n const response = await this.request('PUT', url, req, init);\n if (response && response.status >= 200 && response.status < 300) {\n const cloned = response.clone();\n try {\n return await cloned.json();\n } catch (e) {\n // give back the response\n }\n }\n return response;\n }\n\n async delete(\n req: T | Headers,\n url: string,\n init?: RequestInit\n ): Promise<Response> {\n const response = await this.request('DELETE', url, req, init);\n return response;\n }\n}\n","import { ActiveSession, JWT } from '../api/utils/auth';\nimport { appRoutes } from '../api/utils/routes/defaultRoutes';\nimport { Config } from '../utils/Config';\nimport Logger from '../utils/Logger';\nimport Requester, { NileRequest } from '../utils/Requester';\n\n// url host does not matter, we only match on the 1st leg by path\nconst ORIGIN = 'https://us-west-2.api.dev.thenile.dev';\n/**\n * a helper function to log in server side.\n */\nexport function serverLogin(\n config: Config,\n handlers: {\n GET: (req: Request) => Promise<void | Response>;\n POST: (req: Request) => Promise<void | Response>;\n DELETE: (req: Request) => Promise<void | Response>;\n PUT: (req: Request) => Promise<void | Response>;\n }\n) {\n const { info, error, debug } = Logger(config, '[server side login]');\n const routes = appRoutes(config.routePrefix);\n return async function login({\n email,\n password,\n }: {\n email: string;\n password: string;\n }) {\n if (!email || !password) {\n throw new Error('Server side login requires a user email and password.');\n }\n\n const sessionUrl = new URL(`${ORIGIN}${routes.PROVIDERS}`);\n const baseHeaders = {\n host: sessionUrl.host,\n 'niledb-origin': ORIGIN,\n };\n info(`Obtaining providers for ${email}`);\n const sessionReq = new Request(sessionUrl, {\n method: 'GET',\n ...baseHeaders,\n });\n const sessionRes = await handlers.POST(sessionReq);\n\n if (sessionRes?.status === 404) {\n throw new Error('Unable to login, cannot find region api.');\n }\n\n let providers;\n try {\n providers = await sessionRes?.json();\n } catch (e) {\n info(sessionUrl, { sessionRes });\n error(e);\n }\n\n info('Obtaining csrf');\n const csrf = new URL(`${ORIGIN}${routes.CSRF}`);\n const csrfReq = new Request(csrf, {\n method: 'GET',\n headers: new Headers({\n ...baseHeaders,\n }),\n });\n const csrfRes = await handlers.POST(csrfReq);\n let csrfToken;\n try {\n const json = (await csrfRes?.json()) ?? {};\n csrfToken = json?.csrfToken;\n } catch (e) {\n info(sessionUrl, { csrfRes });\n error(e, { csrfRes });\n }\n\n const { credentials } = providers ?? {};\n\n const csrfCookie = csrfRes?.headers.get('set-cookie');\n\n if (!credentials) {\n throw new Error(\n 'Unable to obtain credential provider. Aborting server side login.'\n );\n }\n const signInUrl = new URL(credentials.callbackUrl);\n\n if (!csrfCookie) {\n debug('CSRF failed', { headers: csrfRes?.headers });\n throw new Error('Unable to authenticate REST, CSRF missing.');\n }\n info(`Attempting sign in with email ${email} ${signInUrl.href}`);\n const body = JSON.stringify({\n email,\n password,\n csrfToken,\n callbackUrl: credentials.callbackUrl,\n });\n const postReq = new Request(signInUrl, {\n method: 'POST',\n headers: new Headers({\n ...baseHeaders,\n 'content-type': 'application/json',\n cookie: csrfCookie.split(',').join('; '),\n }),\n body,\n });\n\n const loginRes = await handlers.POST(postReq);\n const authCookie = loginRes?.headers.get('set-cookie');\n if (!authCookie) {\n throw new Error('authentication failed');\n }\n const [, token] =\n /((__Secure-)?nile\\.session-token=.+?);/.exec(authCookie) ?? [];\n if (!token) {\n error('Unable to obtain auth token', { authCookie });\n throw new Error('Server login failed');\n }\n info('Server login successful', { authCookie, csrfCookie });\n const headers = new Headers({\n ...baseHeaders,\n cookie: [token, csrfCookie].join('; '),\n });\n return headers;\n };\n}\n\nexport default class Auth extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n\n get sessionUrl() {\n return '/auth/session';\n }\n session = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<Response | JWT | ActiveSession> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.sessionUrl, _init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest } from '../utils/Requester';\n\nimport { Tenant } from './types';\n\nexport default class Tenants extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n get tenantsUrl() {\n return '/tenants';\n }\n get tenantUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}`;\n }\n\n createTenant = async (\n req: NileRequest<{ name: string }> | Headers | string,\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n let _req;\n if (typeof req === 'string') {\n _req = new Request(`${this.api.basePath}${this.tenantsUrl}`, {\n body: JSON.stringify({ name: req }),\n method: 'POST',\n });\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.post(_req, this.tenantsUrl, _init);\n };\n\n getTenant = async (\n req: NileRequest<{ id: string }> | Headers | string | void,\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n if (typeof req === 'string') {\n this.tenantId = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.get<Tenant>(req, this.tenantUrl, _init);\n };\n\n get tenantListUrl() {\n return `/users/${this.userId ?? '{userId}'}/tenants`;\n }\n\n listTenants = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<Tenant[] | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.get<Tenant[]>(req, this.tenantListUrl, _init);\n };\n\n deleteTenant = async (\n req: NileRequest<void> | Headers | string,\n init?: RequestInit\n ): Promise<Response> => {\n if (typeof req === 'string') {\n this.tenantId = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.delete(req, this.tenantUrl, _init);\n };\n updateTenant = async (\n req: NileRequest<void> | Headers | { name: string },\n init?: RequestInit\n ): Promise<Tenant | Response> => {\n let _req;\n if (req && 'name' in req) {\n _req = new Request(`${this.api.basePath}${this.tenantUrl}`, {\n body: JSON.stringify(req),\n method: 'PUT',\n });\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return _requester.put<Tenant>(_req, this.tenantUrl, _init);\n };\n}\n","import { Config } from '../utils/Config';\nimport Requester, { NileRequest } from '../utils/Requester';\n\nimport { CreateBasicUserRequest, User } from './types';\n\nexport default class Users extends Config {\n headers?: Headers;\n constructor(config: Config, headers?: Headers) {\n super(config);\n this.headers = headers;\n }\n\n get usersUrl() {\n return '/users';\n }\n\n get tenantUsersUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users`;\n }\n get linkUsersUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users/${\n this.userId ?? '{userId}'\n }/link`;\n }\n\n get tenantUserUrl() {\n return `/tenants/${this.tenantId ?? '{tenantId}'}/users/${\n this.userId ?? '{userId}'\n }`;\n }\n handleHeaders(init?: RequestInit) {\n if (this.headers) {\n if (init) {\n init.headers = new Headers({ ...this.headers, ...init?.headers });\n return init;\n } else {\n init = {\n headers: this.headers,\n };\n return init;\n }\n }\n return undefined;\n }\n\n createUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n\n const _init = this.handleHeaders(init);\n return await _requester.post(req, this.usersUrl, _init);\n };\n\n createTenantUser = async (\n req: NileRequest<CreateBasicUserRequest>,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n\n const _init = this.handleHeaders(init);\n return await _requester.post(req, this.tenantUsersUrl, _init);\n };\n\n updateUser = async (\n req: NileRequest<\n Partial<Omit<User, 'email' | 'tenants' | 'created' | 'updated'>>\n >,\n init?: RequestInit\n ): Promise<User | Response> => {\n let _req;\n if (req && 'id' in req) {\n _req = new Request(`${this.api.basePath}${this.tenantUserUrl}`, {\n body: JSON.stringify(req),\n method: 'PUT',\n });\n this.userId = String(req.id);\n } else {\n _req = req;\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.put(_req, this.tenantUserUrl, _init);\n };\n\n listUsers = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<User[] | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.tenantUsersUrl, _init);\n };\n\n linkUser = async (\n req: NileRequest<{ id: string; tenantId?: string }> | Headers | string,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n if (typeof req === 'string') {\n this.userId = req;\n } else {\n if ('id' in req) {\n this.userId = req.id;\n }\n if ('tenantId' in req) {\n this.tenantId = req.tenantId;\n }\n }\n\n const _init = this.handleHeaders(init);\n return await _requester.put(req, this.linkUsersUrl, _init);\n };\n\n unlinkUser = async (\n req: NileRequest<{ id: string; tenantId?: string }> | Headers | string,\n init?: RequestInit\n ): Promise<Response> => {\n if (typeof req === 'string') {\n this.userId = req;\n } else {\n if ('id' in req) {\n this.userId = req.id;\n }\n if ('tenantId' in req) {\n this.tenantId = req.tenantId;\n }\n }\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.delete(req, this.linkUsersUrl, _init);\n };\n\n get meUrl() {\n return '/me';\n }\n\n me = async (\n req: NileRequest<void> | Headers,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.get(req, this.meUrl, _init);\n };\n updateMe = async (\n req:\n | NileRequest<\n Partial<\n Omit<User, 'email' | 'id' | 'tenants' | 'created' | 'updated'>\n >\n >\n | Headers,\n init?: RequestInit\n ): Promise<User | Response> => {\n const _requester = new Requester(this);\n const _init = this.handleHeaders(init);\n return await _requester.put(req, this.meUrl, _init);\n };\n}\n","import Handlers from './api/handlers';\nimport { Routes } from './api/types';\nimport { appRoutes } from './api/utils/routes/defaultRoutes';\nimport Auth, { serverLogin } from './auth';\nimport Tenants from './tenants';\nimport Users from './users';\nimport { Config } from './utils/Config';\n\nexport class Api {\n config: Config;\n users: Users;\n auth: Auth;\n tenants: Tenants;\n routes: Routes;\n handlers: {\n GET: (req: Request) => Promise<void | Response>;\n POST: (req: Request) => Promise<void | Response>;\n DELETE: (req: Request) => Promise<void | Response>;\n PUT: (req: Request) => Promise<void | Response>;\n };\n constructor(config: Config) {\n this.config = config;\n this.auth = new Auth(config);\n this.users = new Users(config);\n this.tenants = new Tenants(config);\n this.routes = {\n ...appRoutes(config?.routePrefix),\n ...config?.routes,\n };\n this.handlers = Handlers(this.routes, config);\n }\n\n updateConfig(config: Config) {\n this.config = config;\n this.handlers = Handlers(this.routes, config);\n }\n\n set headers(headers: Headers) {\n this.users = new Users(this.config, headers);\n this.tenants = new Tenants(this.config, headers);\n this.auth = new Auth(this.config, headers);\n }\n async login(payload: { email: string; password: string }) {\n this.headers = await serverLogin(this.config, this.handlers)(payload);\n }\n}\n","import { Pool } from 'pg';\n\nimport { ServerConfig } from './types';\nimport { Config } from './utils/Config';\nimport { watchTenantId, watchToken, watchUserId } from './utils/Event';\nimport DbManager from './db';\nimport { Api } from './Api';\n\nexport class Server {\n config: Config;\n api: Api;\n private manager!: DbManager;\n\n constructor(config?: ServerConfig) {\n this.config = new Config(config as ServerConfig, '[initial config]');\n this.api = new Api(this.config);\n this.manager = new DbManager(this.config);\n\n watchTenantId((tenantId) => {\n this.tenantId = tenantId;\n });\n\n watchUserId((userId) => {\n this.userId = userId;\n });\n\n watchToken((token) => {\n this.token = token;\n });\n }\n\n setConfig(cfg: Config) {\n this.config = new Config(cfg);\n this.api.updateConfig(this.config);\n }\n\n async init(cfg?: Config) {\n const updatedConfig = await this.config.configure({\n ...this.config,\n ...cfg,\n });\n this.setConfig(updatedConfig);\n\n return this;\n }\n\n set databaseId(val: string | void) {\n if (val) {\n this.config.databaseId = val;\n this.api.users.databaseId = val;\n this.api.tenants.databaseId = val;\n }\n }\n\n get userId(): string | undefined | null {\n return this.config.userId;\n }\n\n set userId(userId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n\n this.config.userId = userId;\n\n if (this.api) {\n this.api.users.userId = this.config.userId;\n this.api.tenants.userId = this.config.userId;\n }\n }\n\n get tenantId(): string | undefined | null {\n return this.config.tenantId;\n }\n\n set tenantId(tenantId: string | undefined | null) {\n this.databaseId = this.config.databaseId;\n this.config.tenantId = tenantId;\n\n if (this.api) {\n this.api.users.tenantId = tenantId;\n this.api.tenants.tenantId = tenantId;\n }\n }\n\n get token(): string | undefined | null {\n return this.config?.api?.token;\n }\n\n set token(token: string | undefined | null) {\n if (token) {\n this.config.api.token = token;\n if (this.api) {\n this.api.users.api.token = token;\n this.api.tenants.api.token = token;\n }\n }\n }\n get db(): Pool {\n return this.manager.getConnection(this.config);\n }\n\n /**\n * A convenience function that applies a config and ensures whatever was passed is set properly\n */\n\n getInstance(config: ServerConfig): Server {\n const _config = { ...this.config, ...config };\n\n // be sure the config is up to date\n const updatedConfig = new Config(_config);\n this.setConfig(updatedConfig);\n // propagate special config items\n this.tenantId = updatedConfig.tenantId;\n this.userId = updatedConfig.userId;\n // if we have a token, update it, else use the one that was there\n if (updatedConfig.api.token) {\n this.token = updatedConfig.api.token;\n }\n this.databaseId = updatedConfig.databaseId;\n\n return this;\n }\n}\n\nlet server: Server;\nexport async function create(config?: ServerConfig): Promise<Server> {\n if (!server) {\n server = new Server(config);\n }\n if (config) {\n return await server.init(new Config(config));\n }\n return await server.init();\n}\n\nexport default create;\n"],"names":["LoginUserResponseTokenTypeEnum","AccessToken","RefreshToken","IdToken","red","yellow","reset","baseLogger","config","_len","arguments","length","params","Array","_key","info","message","meta","debug","console","join","JSON","stringify","warn","error","Logger","_config$logger$info","_config$logger","_config$logger$debug","_config$logger2","_config$logger$warn","_config$logger3","_config$logger$error","_config$logger4","_len2","_key2","base","logger","getSecureCookies","cfg","process","env","NILEDB_SECURECOOKIES","Boolean","secureCookies","getDatabaseId","_Logger","databaseId","String","NILEDB_POSTGRES_URL","pgUrl","URL","pathname","substring","e","NILEDB_ID","getUsername","_Logger2","user","url","username","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","NILEDB_API_URL","apiUrl","href","Error","stack","getControlPlane","_Logger8","configureUrl","NILEDB_CONFIGURE","startsWith","getDbHost","_Logger9","db","host","hostname","NILEDB_HOST","getDbPort","_config$db","_Logger10","port","_config$db2","Number","NILEDB_PORT","NODE_ENV","ApiConfig","_ref","cookieKey","_token","_createClass","key","get","set","value","Config","_this","_config$api$cookieKey3","routePrefix","routes","_tenantId","_userId","configure","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_config$api$cookieKey2","envVarConfig","_ref3","dbConfig","configuredHost","configuredPort","_config$api$cookieKey","cp","res","database","possibleError","json","_database","apiHost","dbHost","name","id","dburl","wrap","_callee$","_context","prev","next","_objectWithoutPropertiesLoose","_excluded","_extends","abrupt","searchParams","fetch","headers","Authorization","sent","clone","status","t0","text","stop","_x","apply","userId","_ref4","_excluded2","Events","Eventer","events","_proto","prototype","publish","eventName","callbackList","_iterator","_createForOfIteratorHelperLoose","_step","done","callback","subscribe","push","unsubscribe","index","indexOf","splice","eventer","updateTenantId","Tenant","watchTenantId","cb","updateUserId","User","watchUserId","watchToken","Token","watchEvictPool","EvictPool","evictPool","val","createProxyForPool","pool","Proxy","target","property","connectionString","caller","query","args","concat","called","NileDatabase","timer","poolConfig","min","max","idleTimeoutMillis","afterCreate","remaining","Pool","startTimeout","on","client","makeAfterCreate","err","clearTimeout","destroy","_this2","_Number2","setTimeout","_Number","end","shutdown","_this3","conn","errorHandler","cause","DBManager","connections","cleared","poolWatcherFn","poolWatcher","has","connection","getConnection","makeId","existing","size","newOne","clear","Map","filterNullUndefined","obj","Object","fromEntries","entries","filter","makeRestUrl","path","qp","URLSearchParams","strParams","toString","apiRoutes","ME","USERS","USER","TENANTS","TENANT","SIGNUP","TENANT_USERS","TENANT_USER","USER_TENANTS","urlMatches","requestUrl","route","request","_x2","_x3","_request","_init","init","updatedHeaders","_init$body","_params$method","loggingRes","Headers","origin","method","body","duplex","Response","t1","t2","t3","statusText","t4","t5","t6","GET","_GET","_x4","_x5","_route","_callee2","_callee2$","_context2","matches","configRoutes","auth","_auth","req","sessionUrl","ResponseError","response","X_NILE_TENANT","X_NILE_USER_ID","X_NILE_SECURECOOKIES","getTokenFromCookie","_headers$get","cookie","split","_cookies","parts","cookieParts","_cookie","slice","_iterator2","_step2","getTenantFromHttp","cookieTenant","getUserFromHttp","_headers$get2","jwt","decodeJwt","sub","makeBasicHeaders","opts","authHeader","_fetch","_fetch2","basicHeaders","useableUrl","_response$status","_opts$method","_opts$method2","msg","_res","_res2","_res2$errors","_message","includes","replace","encodeURIComponent","t7","t8","t9","errors","t10","POST","_POST","yurl","newTenantName","tenant","PUT","_PUT","session","_URL$pathname$split$r","reverse","_yurl$pathname$split$","email","DELETE","_DELETE","_","_url$pathname$split$r","possibleTenantId","isUUID","regex","test","_request$url$split$re","TENANT_GET","proxyRoutes","SIGNIN","PROVIDERS","SESSION","CSRF","CALLBACK","SIGNOUT","ERROR","VERIFY_REQUEST","provider","passThroughUrl","search","location","GETTER","matchesMe","me","matchesTenantUsers","tenantUsers","matchesUsers","users","matchesTenants","tenants","authRoutes","POSTER","matchesSignup","signup","DELETER","matchesTenantsUsers","PUTER","Handlers","getter","poster","deleter","puter","appRoutes","prefix","Requester","_Config","call","_inheritsLoose","rawRequest","_rawRequest","_headers","Request","values","_x6","_x7","_x8","post","_post","_callee3","cloned","_callee3$","_context3","_x9","_x10","_x11","_get","_callee4","_callee4$","_context4","_x12","_x13","_x14","put","_put","_callee5","_callee5$","_context5","_x15","_x16","_x17","_delete2","_callee6","_callee6$","_context6","delete","_x18","_x19","_x20","ORIGIN","serverLogin","handlers","_login","_providers","_exec","baseHeaders","sessionReq","sessionRes","providers","csrf","csrfReq","csrfRes","csrfToken","_yield$csrfRes$json","credentials","csrfCookie","signInUrl","postReq","loginRes","authCookie","callbackUrl","exec","login","Auth","_requester","handleHeaders","_init2","Tenants","createTenant","_req","tenantsUrl","getTenant","tenantUrl","listTenants","tenantListUrl","deleteTenant","updateTenant","_ref5","_this$tenantId","_this$userId","Users","createUser","usersUrl","createTenantUser","tenantUsersUrl","updateUser","tenantUserUrl","listUsers","linkUser","linkUsersUrl","unlinkUser","_ref6","_ref7","_callee7","_callee7$","_context7","meUrl","updateMe","_ref8","_callee8","_callee8$","_context8","_this$tenantId2","_this$tenantId3","_this$userId2","Api","updateConfig","payload","Server","manager","DbManager","setConfig","updatedConfig","getInstance","_config","_this$config","server","create","_create"],"mappings":"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"}
|