@niledatabase/server 4.2.0-alpha.1 → 4.2.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/Logger.ts","../src/lib/express.ts"],"names":[],"mappings":"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","file":"express.js","sourcesContent":["/* eslint-disable no-console */\nimport { Routes } from '../api/types';\nimport urlMatches from '../api/utils/routes/urlMatches';\nimport { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[38;2;255;255;0m';\nconst purple = '\\x1b[38;2;200;160;255m';\nconst orange = '\\x1b[38;2;255;165;0m';\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 `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n debug(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.debug(\n `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n warn(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.warn(\n `${orange}[niledb]${reset}${yellow}[WARN]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? JSON.stringify(meta) : ''\n );\n }\n },\n error(message: string | unknown, meta?: Record<string, unknown>) {\n console.error(\n `${orange}[niledb]${reset}${red}[ERROR]${reset}${params.join(\n ''\n )}${red} ${message}`,\n meta ? meta : '',\n `${reset}`\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\nexport function matchesLog(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.LOG);\n}\n","import { Server } from '../Server';\nimport Logger from '../utils/Logger';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const paths = {\n get: nile.api.paths.get.map(cleaner),\n post: nile.api.paths.post.map(cleaner),\n put: nile.api.paths.put.map(cleaner),\n delete: nile.api.paths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(nile: Server, config?: HandlerConfig) {\n const { error } = Logger(nile.config, 'nile-express');\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let response;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response = await (nile.api.handlers as any)[method](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/Logger.ts","../src/lib/express.ts"],"names":[],"mappings":"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","file":"express.js","sourcesContent":["/* eslint-disable no-console */\nimport { Routes } from '../api/types';\nimport urlMatches from '../api/utils/routes/urlMatches';\nimport { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[38;2;255;255;0m';\nconst purple = '\\x1b[38;2;200;160;255m';\nconst orange = '\\x1b[38;2;255;165;0m';\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 `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n debug(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.debug(\n `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n warn(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.warn(\n `${orange}[niledb]${reset}${yellow}[WARN]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? JSON.stringify(meta) : ''\n );\n }\n },\n error(message: string | unknown, meta?: Record<string, unknown>) {\n console.error(\n `${orange}[niledb]${reset}${red}[ERROR]${reset}${params.join(\n ''\n )}${red} ${message}`,\n meta ? meta : '',\n `${reset}`\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\nexport function matchesLog(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.LOG);\n}\n","import { Server } from '../Server';\nimport Logger from '../utils/Logger';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const paths = {\n get: nile.api.paths.get.map(cleaner),\n post: nile.api.paths.post.map(cleaner),\n put: nile.api.paths.put.map(cleaner),\n delete: nile.api.paths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(nile: Server, config?: HandlerConfig) {\n const { error } = Logger(nile.config, 'nile-express');\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let response;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response = await (nile.api.handlers as any)[method](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/Logger.ts","../src/lib/express.ts"],"names":[],"mappings":"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","file":"express.mjs","sourcesContent":["/* eslint-disable no-console */\nimport { Routes } from '../api/types';\nimport urlMatches from '../api/utils/routes/urlMatches';\nimport { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[38;2;255;255;0m';\nconst purple = '\\x1b[38;2;200;160;255m';\nconst orange = '\\x1b[38;2;255;165;0m';\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 `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n debug(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.debug(\n `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n warn(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.warn(\n `${orange}[niledb]${reset}${yellow}[WARN]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? JSON.stringify(meta) : ''\n );\n }\n },\n error(message: string | unknown, meta?: Record<string, unknown>) {\n console.error(\n `${orange}[niledb]${reset}${red}[ERROR]${reset}${params.join(\n ''\n )}${red} ${message}`,\n meta ? meta : '',\n `${reset}`\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\nexport function matchesLog(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.LOG);\n}\n","import { Server } from '../Server';\nimport Logger from '../utils/Logger';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const paths = {\n get: nile.api.paths.get.map(cleaner),\n post: nile.api.paths.post.map(cleaner),\n put: nile.api.paths.put.map(cleaner),\n delete: nile.api.paths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(nile: Server, config?: HandlerConfig) {\n const { error } = Logger(nile.config, 'nile-express');\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let response;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response = await (nile.api.handlers as any)[method](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"]}
1
+ {"version":3,"sources":["../src/utils/Logger.ts","../src/lib/express.ts"],"names":[],"mappings":"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","file":"express.mjs","sourcesContent":["/* eslint-disable no-console */\nimport { Routes } from '../api/types';\nimport urlMatches from '../api/utils/routes/urlMatches';\nimport { ServerConfig } from '../types';\n\nimport { Config } from './Config';\n\nconst red = '\\x1b[31m';\nconst yellow = '\\x1b[38;2;255;255;0m';\nconst purple = '\\x1b[38;2;200;160;255m';\nconst orange = '\\x1b[38;2;255;165;0m';\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 `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n debug(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.debug(\n `${orange}[niledb]${reset}${purple}[DEBUG]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? `${JSON.stringify(meta)}` : ''\n );\n }\n },\n warn(message: string | unknown, meta?: Record<string, unknown>) {\n if (config?.debug) {\n console.warn(\n `${orange}[niledb]${reset}${yellow}[WARN]${reset}${params.join(\n ''\n )}${reset} ${message}`,\n meta ? JSON.stringify(meta) : ''\n );\n }\n },\n error(message: string | unknown, meta?: Record<string, unknown>) {\n console.error(\n `${orange}[niledb]${reset}${red}[ERROR]${reset}${params.join(\n ''\n )}${red} ${message}`,\n meta ? meta : '',\n `${reset}`\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\nexport function matchesLog(configRoutes: Routes, request: Request): boolean {\n return urlMatches(request.url, configRoutes.LOG);\n}\n","import { Server } from '../Server';\nimport Logger from '../utils/Logger';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const paths = {\n get: nile.api.paths.get.map(cleaner),\n post: nile.api.paths.post.map(cleaner),\n put: nile.api.paths.put.map(cleaner),\n delete: nile.api.paths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(nile: Server, config?: HandlerConfig) {\n const { error } = Logger(nile.config, 'nile-express');\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let response;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n response = await (nile.api.handlers as any)[method](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"]}
package/dist/index.d.mts CHANGED
@@ -29,6 +29,7 @@ type ApiParams = {
29
29
  routePrefix?: string | undefined;
30
30
  secureCookies?: boolean;
31
31
  origin?: null | undefined | string;
32
+ headers?: null | Headers | Record<string, string>;
32
33
  };
33
34
  declare class ApiConfig {
34
35
  #private;
@@ -38,6 +39,7 @@ declare class ApiConfig {
38
39
  routePrefix?: string;
39
40
  secureCookies?: boolean;
40
41
  origin?: string | null;
42
+ headers?: Headers | null;
41
43
  /**
42
44
  * The client side callback url. Defaults to nothing (so nile.origin will be it), but in the cases of x-origin, you want to set this explicitly to be sure nile-auth does the right thing
43
45
  * If this is set, any `callbackUrl` from the client will be ignored.
@@ -308,6 +310,24 @@ declare class Api {
308
310
  DELETE: (req: Request) => Promise<void | Response>;
309
311
  PUT: (req: Request) => Promise<void | Response>;
310
312
  };
313
+ handlersWithContext: {
314
+ GET: (req: Request) => Promise<{
315
+ response: void | Response;
316
+ nile: Server;
317
+ }>;
318
+ POST: (req: Request) => Promise<{
319
+ response: void | Response;
320
+ nile: Server;
321
+ }>;
322
+ DELETE: (req: Request) => Promise<{
323
+ response: void | Response;
324
+ nile: Server;
325
+ }>;
326
+ PUT: (req: Request) => Promise<{
327
+ response: void | Response;
328
+ nile: Server;
329
+ }>;
330
+ };
311
331
  paths: {
312
332
  get: string[];
313
333
  post: string[];
@@ -350,7 +370,7 @@ declare class Server {
350
370
  /**
351
371
  * A convenience function that applies a config and ensures whatever was passed is set properly
352
372
  */
353
- getInstance(config: ServerConfig): Server;
373
+ getInstance<T = Request | Headers | Record<string, string>>(config: ServerConfig, req?: T): Server;
354
374
  }
355
375
  declare function create(config?: ServerConfig): Promise<Server>;
356
376
 
package/dist/index.d.ts CHANGED
@@ -29,6 +29,7 @@ type ApiParams = {
29
29
  routePrefix?: string | undefined;
30
30
  secureCookies?: boolean;
31
31
  origin?: null | undefined | string;
32
+ headers?: null | Headers | Record<string, string>;
32
33
  };
33
34
  declare class ApiConfig {
34
35
  #private;
@@ -38,6 +39,7 @@ declare class ApiConfig {
38
39
  routePrefix?: string;
39
40
  secureCookies?: boolean;
40
41
  origin?: string | null;
42
+ headers?: Headers | null;
41
43
  /**
42
44
  * The client side callback url. Defaults to nothing (so nile.origin will be it), but in the cases of x-origin, you want to set this explicitly to be sure nile-auth does the right thing
43
45
  * If this is set, any `callbackUrl` from the client will be ignored.
@@ -308,6 +310,24 @@ declare class Api {
308
310
  DELETE: (req: Request) => Promise<void | Response>;
309
311
  PUT: (req: Request) => Promise<void | Response>;
310
312
  };
313
+ handlersWithContext: {
314
+ GET: (req: Request) => Promise<{
315
+ response: void | Response;
316
+ nile: Server;
317
+ }>;
318
+ POST: (req: Request) => Promise<{
319
+ response: void | Response;
320
+ nile: Server;
321
+ }>;
322
+ DELETE: (req: Request) => Promise<{
323
+ response: void | Response;
324
+ nile: Server;
325
+ }>;
326
+ PUT: (req: Request) => Promise<{
327
+ response: void | Response;
328
+ nile: Server;
329
+ }>;
330
+ };
311
331
  paths: {
312
332
  get: string[];
313
333
  post: string[];
@@ -350,7 +370,7 @@ declare class Server {
350
370
  /**
351
371
  * A convenience function that applies a config and ensures whatever was passed is set properly
352
372
  */
353
- getInstance(config: ServerConfig): Server;
373
+ getInstance<T = Request | Headers | Record<string, string>>(config: ServerConfig, req?: T): Server;
354
374
  }
355
375
  declare function create(config?: ServerConfig): Promise<Server>;
356
376
 
package/dist/index.js CHANGED
@@ -86,73 +86,6 @@ var X_NILE_USER_ID = "nile.user_id";
86
86
  var X_NILE_ORIGIN = "nile.origin";
87
87
  var X_NILE_SECURECOOKIES = "nile.secure_cookies";
88
88
 
89
- // src/context/asyncStorage.ts
90
- var globalContext = null;
91
- function setContext(headers) {
92
- const origin = headers.get(X_NILE_ORIGIN);
93
- const host = headers.get("host");
94
- const cookie = headers.get("cookie");
95
- const tenantId = headers.get(X_NILE_TENANT);
96
- const userId = headers.get(X_NILE_USER_ID);
97
- const context = {};
98
- if (origin) {
99
- context.origin = origin;
100
- } else if (host) {
101
- context.origin = host;
102
- }
103
- if (cookie) {
104
- context.cookie = cookie;
105
- }
106
- if (tenantId) {
107
- context.tenantId = tenantId;
108
- }
109
- if (userId) {
110
- context.userId = userId;
111
- }
112
- globalContext = context;
113
- }
114
- function getOrigin() {
115
- return globalContext?.origin;
116
- }
117
- function getCookie() {
118
- return globalContext?.cookie;
119
- }
120
- function setCookie(headers) {
121
- const getSet = headers?.getSetCookie?.();
122
- if (getSet?.length) {
123
- const updatedCookie = [];
124
- for (const cook of getSet) {
125
- const [c] = cook.split("; ");
126
- const [, val] = c.split("=");
127
- if (val) {
128
- updatedCookie.push(c);
129
- }
130
- }
131
- const cookie = mergeCookies(updatedCookie);
132
- globalContext = { ...globalContext, cookie };
133
- }
134
- }
135
- function mergeCookies(overrideArray) {
136
- const cookieString = getCookie();
137
- const cookieMap = {};
138
- if (!cookieString) {
139
- return overrideArray.join("; ");
140
- }
141
- cookieString.split(";").forEach((cookie) => {
142
- const [rawKey, ...rawVal] = cookie.trim().split("=");
143
- const key12 = rawKey.trim();
144
- const value = rawVal.join("=").trim();
145
- if (key12) cookieMap[key12] = value;
146
- });
147
- overrideArray.forEach((cookie) => {
148
- const [rawKey, ...rawVal] = cookie.trim().split("=");
149
- const key12 = rawKey.trim();
150
- const value = rawVal.join("=").trim();
151
- if (key12) cookieMap[key12] = value;
152
- });
153
- return Object.entries(cookieMap).map(([k, v]) => `${k}=${v}`).join("; ");
154
- }
155
-
156
89
  // src/api/utils/request.ts
157
90
  async function request(url, _init, config) {
158
91
  const { debug, info, error } = Logger(config, "[REQUEST]");
@@ -185,7 +118,7 @@ async function request(url, _init, config) {
185
118
  updatedHeaders.set(X_NILE_ORIGIN, requestUrl.origin);
186
119
  debug(`Obtained origin from request ${requestUrl.origin}`);
187
120
  }
188
- const params = { ...init, headers: updatedHeaders };
121
+ const params = { ...init };
189
122
  if (params.method?.toLowerCase() === "post" || params.method?.toLowerCase() === "put") {
190
123
  try {
191
124
  updatedHeaders.set("content-type", "application/json");
@@ -199,9 +132,9 @@ async function request(url, _init, config) {
199
132
  params.body = initBody ?? requestBody;
200
133
  }
201
134
  }
135
+ params.headers = updatedHeaders;
202
136
  const fullUrl = `${url}${requestUrl.search}`;
203
137
  try {
204
- setContext(updatedHeaders);
205
138
  const res = await fetch(fullUrl, { ...params }).catch(
206
139
  (e) => {
207
140
  error("An error has occurred in the fetch", {
@@ -220,7 +153,6 @@ async function request(url, _init, config) {
220
153
  statusText: res?.statusText,
221
154
  text: await loggingRes?.text()
222
155
  });
223
- setCookie(res?.headers);
224
156
  return res;
225
157
  } catch (e) {
226
158
  if (e instanceof Error) {
@@ -515,6 +447,7 @@ var ApiConfig = class {
515
447
  routePrefix;
516
448
  secureCookies;
517
449
  origin;
450
+ headers;
518
451
  /**
519
452
  * The client side callback url. Defaults to nothing (so nile.origin will be it), but in the cases of x-origin, you want to set this explicitly to be sure nile-auth does the right thing
520
453
  * If this is set, any `callbackUrl` from the client will be ignored.
@@ -528,6 +461,11 @@ var ApiConfig = class {
528
461
  this.callbackUrl = getCallbackUrl(envVarConfig);
529
462
  this.secureCookies = getSecureCookies(envVarConfig);
530
463
  this.basePath = getBasePath(envVarConfig);
464
+ if (config?.api?.headers instanceof Headers) {
465
+ this.headers = config?.api?.headers;
466
+ } else if (config?.api?.headers) {
467
+ this.headers = new Headers(config.api.headers);
468
+ }
531
469
  this.routes = config?.api?.routes;
532
470
  this.routePrefix = config?.api?.routePrefix;
533
471
  this.origin = config?.api?.origin;
@@ -1052,7 +990,7 @@ var ResponseError = class {
1052
990
 
1053
991
  // src/utils/fetch.ts
1054
992
  function getTokenFromCookie(headers, cookieKey) {
1055
- const cookie = headers.get("cookie")?.split("; ") ?? getCookie()?.split("; ");
993
+ const cookie = headers.get("cookie")?.split("; ");
1056
994
  const _cookies = {};
1057
995
  if (cookie) {
1058
996
  for (const parts of cookie) {
@@ -1090,22 +1028,24 @@ function getUserFromHttp(headers, config) {
1090
1028
  function makeBasicHeaders(config, url, opts) {
1091
1029
  const { warn, error } = Logger(config, "[headers]");
1092
1030
  const headers = new Headers(opts?.headers);
1093
- headers.set("content-type", "application/json; charset=utf-8");
1094
1031
  const cookieKey = config.api?.cookieKey;
1095
- const authHeader = headers.get("Authorization");
1096
- if (!authHeader) {
1097
- const token = getTokenFromCookie(headers, cookieKey);
1098
- if (token) {
1099
- headers.set("Authorization", `Bearer ${token}`);
1100
- } else if (getToken({ config })) {
1101
- headers.set("Authorization", `Bearer ${getToken({ config })}`);
1032
+ headers.set("content-type", "application/json; charset=utf-8");
1033
+ const origin = headers.get(X_NILE_ORIGIN);
1034
+ if (!origin) {
1035
+ if (config.api.headers) {
1036
+ const localOrigin = config.api.headers.get(X_NILE_ORIGIN);
1037
+ if (localOrigin) {
1038
+ headers.set(X_NILE_ORIGIN, localOrigin);
1039
+ }
1102
1040
  }
1103
1041
  }
1104
1042
  const cookie = headers.get("cookie");
1105
1043
  if (!cookie) {
1106
- const contextCookie = getCookie();
1107
- if (contextCookie) {
1108
- headers.set("cookie", contextCookie);
1044
+ if (config.api.headers) {
1045
+ const configCookie = config.api.headers.get("cookie");
1046
+ if (configCookie) {
1047
+ headers.set("cookie", configCookie);
1048
+ }
1109
1049
  } else {
1110
1050
  if (!url.endsWith("/users")) {
1111
1051
  error(
@@ -1114,14 +1054,20 @@ function makeBasicHeaders(config, url, opts) {
1114
1054
  }
1115
1055
  }
1116
1056
  }
1057
+ const authHeader = headers.get("Authorization");
1058
+ if (!authHeader) {
1059
+ const token = getTokenFromCookie(headers, cookieKey);
1060
+ if (token) {
1061
+ headers.set("Authorization", `Bearer ${token}`);
1062
+ } else if (getToken({ config })) {
1063
+ headers.set("Authorization", `Bearer ${getToken({ config })}`);
1064
+ }
1065
+ }
1117
1066
  if (config && config.api.secureCookies != null) {
1118
1067
  headers.set(X_NILE_SECURECOOKIES, String(config.api.secureCookies));
1119
1068
  }
1120
- const savedOrigin = getOrigin();
1121
1069
  if (config && config.api.origin) {
1122
1070
  headers.set(X_NILE_ORIGIN, config.api.origin);
1123
- } else if (savedOrigin) {
1124
- headers.set(X_NILE_ORIGIN, savedOrigin);
1125
1071
  } else {
1126
1072
  warn(
1127
1073
  "nile.origin missing from header, which defaults to secure cookies only."
@@ -1153,7 +1099,8 @@ async function _fetch(config, path, opts) {
1153
1099
  error("[fetch][response]", {
1154
1100
  message: e.message,
1155
1101
  stack: e.stack,
1156
- debug: "Is nile-auth running?"
1102
+ debug: "Is nile-auth running?",
1103
+ cause: e.cause
1157
1104
  });
1158
1105
  return new Error(e);
1159
1106
  });
@@ -2479,6 +2426,66 @@ var Users = class extends Config {
2479
2426
  };
2480
2427
  };
2481
2428
 
2429
+ // src/api/handlers/withContext/index.ts
2430
+ function handlersWithContext(configRoutes, config) {
2431
+ const GET6 = GETTER(configRoutes, config);
2432
+ const POST5 = POSTER(configRoutes, config);
2433
+ const DELETE3 = DELETER(configRoutes, config);
2434
+ const PUT4 = PUTER(configRoutes, config);
2435
+ return {
2436
+ GET: async (req) => {
2437
+ const response = await GET6(req);
2438
+ const updatedConfig = updateConfig(response, config);
2439
+ return { response, nile: new Server(updatedConfig) };
2440
+ },
2441
+ POST: async (req) => {
2442
+ const response = await POST5(req);
2443
+ const updatedConfig = updateConfig(response, config);
2444
+ return { response, nile: new Server(updatedConfig) };
2445
+ },
2446
+ DELETE: async (req) => {
2447
+ const response = await DELETE3(req);
2448
+ const updatedConfig = updateConfig(response, config);
2449
+ return { response, nile: new Server(updatedConfig) };
2450
+ },
2451
+ PUT: async (req) => {
2452
+ const response = await PUT4(req);
2453
+ const updatedConfig = updateConfig(response, config);
2454
+ return { response, nile: new Server(updatedConfig) };
2455
+ }
2456
+ };
2457
+ }
2458
+ function updateConfig(response, config) {
2459
+ let origin = "http://localhost:3000";
2460
+ let headers = null;
2461
+ if (response?.status === 302) {
2462
+ const location = response.headers.get("location");
2463
+ if (location) {
2464
+ origin = location;
2465
+ }
2466
+ }
2467
+ const setCookies = [];
2468
+ if (response?.headers) {
2469
+ for (const [key12, value] of response.headers) {
2470
+ if (key12.toLowerCase() === "set-cookie") {
2471
+ setCookies.push(value);
2472
+ }
2473
+ }
2474
+ }
2475
+ if (setCookies.length > 0) {
2476
+ const cookieHeader = setCookies.map((cookieStr) => cookieStr.split(";")[0]).join("; ");
2477
+ headers = new Headers({ cookie: cookieHeader });
2478
+ }
2479
+ return {
2480
+ ...config,
2481
+ api: {
2482
+ ...config.api,
2483
+ origin,
2484
+ headers: headers ?? void 0
2485
+ }
2486
+ };
2487
+ }
2488
+
2482
2489
  // src/Api.ts
2483
2490
  var Api = class {
2484
2491
  config;
@@ -2488,9 +2495,13 @@ var Api = class {
2488
2495
  routes;
2489
2496
  #headers;
2490
2497
  handlers;
2498
+ handlersWithContext;
2491
2499
  paths;
2492
2500
  constructor(config) {
2493
2501
  this.config = config;
2502
+ if (config?.api.headers) {
2503
+ this.headers = config?.api.headers;
2504
+ }
2494
2505
  this.auth = new Auth(config, void 0, {
2495
2506
  resetHeaders: this.resetHeaders
2496
2507
  });
@@ -2501,6 +2512,7 @@ var Api = class {
2501
2512
  ...config?.api.routes
2502
2513
  };
2503
2514
  this.handlers = Handlers(this.routes, config);
2515
+ this.handlersWithContext = handlersWithContext(this.routes, config);
2504
2516
  this.paths = {
2505
2517
  get: [
2506
2518
  this.routes.ME,
@@ -2552,7 +2564,6 @@ var Api = class {
2552
2564
  };
2553
2565
  resetHeaders = (headers) => {
2554
2566
  this.#headers = new Headers(headers ?? {});
2555
- setContext(new Headers());
2556
2567
  this.reset();
2557
2568
  };
2558
2569
  set headers(headers) {
@@ -2612,19 +2623,21 @@ var Api = class {
2612
2623
  };
2613
2624
  setContext = (req) => {
2614
2625
  if (req instanceof Headers) {
2615
- setContext(req);
2626
+ this.headers = req;
2616
2627
  return;
2617
2628
  } else if (req instanceof Request) {
2618
- setContext(req.headers);
2629
+ this.headers = new Headers(req.headers);
2619
2630
  return;
2620
2631
  }
2621
2632
  const headers = new Headers(req);
2622
2633
  if (headers) {
2623
- setContext(headers);
2634
+ this.headers = headers;
2624
2635
  } else {
2625
2636
  const { warn } = Logger(this.config, "[API]");
2626
2637
  if (warn) {
2627
- warn("Set context expects a Request or Header object");
2638
+ warn(
2639
+ "Set context expects a Request, Header instance or an object of Record<string, string>"
2640
+ );
2628
2641
  }
2629
2642
  }
2630
2643
  };
@@ -2711,7 +2724,7 @@ var Server = class {
2711
2724
  /**
2712
2725
  * A convenience function that applies a config and ensures whatever was passed is set properly
2713
2726
  */
2714
- getInstance(config) {
2727
+ getInstance(config, req) {
2715
2728
  const _config = { ...this.config, ...config };
2716
2729
  const updatedConfig = new Config(_config);
2717
2730
  this.setConfig(updatedConfig);
@@ -2721,6 +2734,9 @@ var Server = class {
2721
2734
  this.token = updatedConfig.api.token;
2722
2735
  }
2723
2736
  this.databaseId = updatedConfig.databaseId;
2737
+ if (req) {
2738
+ this.api.setContext(req);
2739
+ }
2724
2740
  return this;
2725
2741
  }
2726
2742
  };