@autofleet/nitur 2.2.1-3 → 2.2.1-5

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,2 +1,2 @@
1
- const e=require(`./base.cjs`),t=require(`../logger.cjs`);function n(n){let r=n.logger??t.logger;return async(t,i)=>{try{let t=await e.systemAliveCheck(n);return i.json(t),!0}catch(e){return i.status(500).json({err:e}),r.error(`Error on alive endpoint`,{err:e}),!1}}}exports.aliveEndpointMiddleware=n;
1
+ const e=require(`./base.cjs`),t=require(`../logger.cjs`),n=require(`../health/liveness.cjs`);function r(r){let i=r.logger??t.logger;return async(t,a)=>{let o=t.query;if(`probe`in o&&o.probe===`liveness`)return n.livenessEndpoint({logger:i})(t,a);try{let t=await e.systemAliveCheck(r);return a.json(t),!0}catch(e){return a.status(500).json({err:e}),i.error(`Error on alive endpoint`,{err:e}),!1}}}exports.aliveEndpointMiddleware=r;
2
2
  //# sourceMappingURL=middleware.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.cjs","names":["parameters: SystemAliveParameters","logger","loggerFallback","_req: Request","res: Response"],"sources":["../../src/alive-endpoint/middleware.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as loggerFallback } from '../logger';\nimport { systemAliveCheck, type SystemAliveParameters } from './base';\n\nexport function aliveEndpointMiddleware(parameters: SystemAliveParameters) {\n const logger = parameters.logger ?? loggerFallback;\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n const response = await systemAliveCheck(parameters);\n res.json(response);\n return true;\n } catch (err) {\n res.status(500).json({ err });\n logger.error('Error on alive endpoint', { err });\n return false;\n }\n };\n}\n"],"mappings":"yDAIA,SAAgB,EAAwBA,EAAmC,CACzE,IAAMC,EAAS,EAAW,QAAUC,EAAAA,OACpC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CACF,IAAM,EAAW,KAAM,GAAA,iBAAiB,EAAW,CAEnD,MADA,GAAI,KAAK,EAAS,EACX,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAI,OAAO,IAAI,CAAC,KAAK,CAAE,KAAK,EAAC,CAC7B,EAAO,MAAM,0BAA2B,CAAE,KAAK,EAAC,EACzC,CACR,CACF,CACF"}
1
+ {"version":3,"file":"middleware.cjs","names":["parameters: SystemAliveParameters","logger","loggerFallback","_req: Request","res: Response"],"sources":["../../src/alive-endpoint/middleware.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as loggerFallback } from '../logger';\nimport { systemAliveCheck, type SystemAliveParameters } from './base';\nimport { livenessEndpoint } from '../health/liveness';\n// import { readinessEndpoint } from '../health/readiness';\n\nexport function aliveEndpointMiddleware(parameters: SystemAliveParameters) {\n const logger = parameters.logger ?? loggerFallback;\n return async (_req: Request, res: Response): Promise<boolean> => {\n const queryParams = _req.query;\n if ('probe' in queryParams) {\n if (queryParams.probe === 'liveness') {\n return livenessEndpoint({ logger })(_req, res);\n }\n }\n\n try {\n const response = await systemAliveCheck(parameters);\n res.json(response);\n return true;\n } catch (err) {\n res.status(500).json({ err });\n logger.error('Error on alive endpoint', { err });\n return false;\n }\n };\n}\n"],"mappings":"6FAMA,SAAgB,EAAwBA,EAAmC,CACzE,IAAMC,EAAS,EAAW,QAAUC,EAAAA,OACpC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,IAAM,EAAc,EAAK,MACzB,GAAI,UAAW,GACT,EAAY,QAAU,WACxB,MAAO,GAAA,iBAAiB,CAAE,OAAA,CAAQ,EAAC,CAAC,EAAM,EAAI,CAIlD,GAAI,CACF,IAAM,EAAW,KAAM,GAAA,iBAAiB,EAAW,CAEnD,MADA,GAAI,KAAK,EAAS,EACX,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAI,OAAO,IAAI,CAAC,KAAK,CAAE,KAAK,EAAC,CAC7B,EAAO,MAAM,0BAA2B,CAAE,KAAK,EAAC,EACzC,CACR,CACF,CACF"}
@@ -2,6 +2,7 @@ import { SystemAliveParameters } from "./base.cjs";
2
2
  import { Request, Response } from "express";
3
3
 
4
4
  //#region src/alive-endpoint/middleware.d.ts
5
+ // import { readinessEndpoint } from '../health/readiness';
5
6
  declare function aliveEndpointMiddleware(parameters: SystemAliveParameters): (_req: Request, res: Response) => Promise<boolean>;
6
7
  //#endregion
7
8
  export { aliveEndpointMiddleware };
@@ -2,6 +2,7 @@ import { SystemAliveParameters } from "./base.js";
2
2
  import { Request, Response } from "express";
3
3
 
4
4
  //#region src/alive-endpoint/middleware.d.ts
5
+ // import { readinessEndpoint } from '../health/readiness';
5
6
  declare function aliveEndpointMiddleware(parameters: SystemAliveParameters): (_req: Request, res: Response) => Promise<boolean>;
6
7
  //#endregion
7
8
  export { aliveEndpointMiddleware };
@@ -1,2 +1,2 @@
1
- import{systemAliveCheck as e}from"./base.js";import{logger as t}from"../logger.js";function n(n){let r=n.logger??t;return async(t,i)=>{try{let t=await e(n);return i.json(t),!0}catch(e){return i.status(500).json({err:e}),r.error(`Error on alive endpoint`,{err:e}),!1}}}export{n as aliveEndpointMiddleware};
1
+ import{systemAliveCheck as e}from"./base.js";import{logger as t}from"../logger.js";import{livenessEndpoint as n}from"../health/liveness.js";function r(r){let i=r.logger??t;return async(t,a)=>{let o=t.query;if(`probe`in o&&o.probe===`liveness`)return n({logger:i})(t,a);try{let t=await e(r);return a.json(t),!0}catch(e){return a.status(500).json({err:e}),i.error(`Error on alive endpoint`,{err:e}),!1}}}export{r as aliveEndpointMiddleware};
2
2
  //# sourceMappingURL=middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":["parameters: SystemAliveParameters","logger","loggerFallback","_req: Request","res: Response"],"sources":["../../src/alive-endpoint/middleware.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as loggerFallback } from '../logger';\nimport { systemAliveCheck, type SystemAliveParameters } from './base';\n\nexport function aliveEndpointMiddleware(parameters: SystemAliveParameters) {\n const logger = parameters.logger ?? loggerFallback;\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n const response = await systemAliveCheck(parameters);\n res.json(response);\n return true;\n } catch (err) {\n res.status(500).json({ err });\n logger.error('Error on alive endpoint', { err });\n return false;\n }\n };\n}\n"],"mappings":"mFAIA,SAAgB,EAAwBA,EAAmC,CACzE,IAAMC,EAAS,EAAW,QAAUC,EACpC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CACF,IAAM,EAAW,KAAM,GAAiB,EAAW,CAEnD,MADA,GAAI,KAAK,EAAS,EACX,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAI,OAAO,IAAI,CAAC,KAAK,CAAE,KAAK,EAAC,CAC7B,EAAO,MAAM,0BAA2B,CAAE,KAAK,EAAC,EACzC,CACR,CACF,CACF"}
1
+ {"version":3,"file":"middleware.js","names":["parameters: SystemAliveParameters","logger","loggerFallback","_req: Request","res: Response"],"sources":["../../src/alive-endpoint/middleware.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as loggerFallback } from '../logger';\nimport { systemAliveCheck, type SystemAliveParameters } from './base';\nimport { livenessEndpoint } from '../health/liveness';\n// import { readinessEndpoint } from '../health/readiness';\n\nexport function aliveEndpointMiddleware(parameters: SystemAliveParameters) {\n const logger = parameters.logger ?? loggerFallback;\n return async (_req: Request, res: Response): Promise<boolean> => {\n const queryParams = _req.query;\n if ('probe' in queryParams) {\n if (queryParams.probe === 'liveness') {\n return livenessEndpoint({ logger })(_req, res);\n }\n }\n\n try {\n const response = await systemAliveCheck(parameters);\n res.json(response);\n return true;\n } catch (err) {\n res.status(500).json({ err });\n logger.error('Error on alive endpoint', { err });\n return false;\n }\n };\n}\n"],"mappings":"4IAMA,SAAgB,EAAwBA,EAAmC,CACzE,IAAMC,EAAS,EAAW,QAAUC,EACpC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,IAAM,EAAc,EAAK,MACzB,GAAI,UAAW,GACT,EAAY,QAAU,WACxB,MAAO,GAAiB,CAAE,OAAA,CAAQ,EAAC,CAAC,EAAM,EAAI,CAIlD,GAAI,CACF,IAAM,EAAW,KAAM,GAAiB,EAAW,CAEnD,MADA,GAAI,KAAK,EAAS,EACX,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAI,OAAO,IAAI,CAAC,KAAK,CAAE,KAAK,EAAC,CAC7B,EAAO,MAAM,0BAA2B,CAAE,KAAK,EAAC,EACzC,CACR,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- const e=require(`../logger.cjs`),t=require(`./shared.cjs`);function n(n){let r=n?.logger??e.logger;return async(e,n)=>{try{return await t.eventLoopHeartbeat(),r.info(`Liveness check passed`,{pid:process.pid}),n.status(200).json({status:`ok`}),!0}catch(e){return r.error(`Liveness failed`,{err:e}),n.status(500).json({err:e.message}),!1}}}exports.livenessEndpoint=n;
1
+ const e=require(`../logger.cjs`),t=require(`./shared.cjs`);function n(n){let r=n?.logger??e.logger;return async(e,n)=>{try{return await t.eventLoopHeartbeat(),r.debug?.(`Liveness check passed`,{pid:process.pid}),n.status(200).json({status:`ok`}),!0}catch(e){return r.error(`Liveness failed`,{err:e}),n.status(500).json({err:e.message}),!1}}}exports.livenessEndpoint=n;
2
2
  //# sourceMappingURL=liveness.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"liveness.cjs","names":["options?: { logger?: SimpleLogger; }","logger","fallbackLogger","_req: Request","res: Response"],"sources":["../../src/health/liveness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport { eventLoopHeartbeat } from './shared';\nimport type { SimpleLogger } from './shared';\n\nexport function livenessEndpoint(options?: { logger?: SimpleLogger; }) {\n const logger = options?.logger ?? fallbackLogger;\n\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n await eventLoopHeartbeat();\n logger.info('Liveness check passed', { pid: process.pid });\n res.status(200).json({ status: 'ok' });\n return true;\n } catch (err) {\n logger.error('Liveness failed', { err });\n res.status(500).json({ err: (err as Error).message });\n return false;\n }\n };\n}\n"],"mappings":"2DAKA,SAAgB,EAAiBA,EAAsC,CACrE,IAAMC,EAAS,GAAS,QAAUC,EAAAA,OAElC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CAIF,OAHA,KAAM,GAAA,oBAAoB,CAC1B,EAAO,KAAK,wBAAyB,CAAE,IAAK,QAAQ,GAAK,EAAC,CAC1D,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,EAC/B,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAO,MAAM,kBAAmB,CAAE,KAAK,EAAC,CACxC,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,IAAM,EAAc,OAAS,EAAC,EAC9C,CACR,CACF,CACF"}
1
+ {"version":3,"file":"liveness.cjs","names":["options?: { logger?: SimpleLogger; }","logger","fallbackLogger","_req: Request","res: Response"],"sources":["../../src/health/liveness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport { eventLoopHeartbeat } from './shared';\nimport type { SimpleLogger } from './shared';\n\nexport function livenessEndpoint(options?: { logger?: SimpleLogger; }) {\n const logger = options?.logger ?? fallbackLogger;\n\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n await eventLoopHeartbeat();\n logger.debug?.('Liveness check passed', { pid: process.pid });\n res.status(200).json({ status: 'ok' });\n return true;\n } catch (err) {\n logger.error('Liveness failed', { err });\n res.status(500).json({ err: (err as Error).message });\n return false;\n }\n };\n}\n"],"mappings":"2DAKA,SAAgB,EAAiBA,EAAsC,CACrE,IAAMC,EAAS,GAAS,QAAUC,EAAAA,OAElC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CAIF,OAHA,KAAM,GAAA,oBAAoB,CAC1B,EAAO,QAAQ,wBAAyB,CAAE,IAAK,QAAQ,GAAK,EAAC,CAC7D,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,EAC/B,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAO,MAAM,kBAAmB,CAAE,KAAK,EAAC,CACxC,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,IAAM,EAAc,OAAS,EAAC,EAC9C,CACR,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- import{logger as e}from"../logger.js";import{eventLoopHeartbeat as t}from"./shared.js";function n(n){let r=n?.logger??e;return async(e,n)=>{try{return await t(),r.info(`Liveness check passed`,{pid:process.pid}),n.status(200).json({status:`ok`}),!0}catch(e){return r.error(`Liveness failed`,{err:e}),n.status(500).json({err:e.message}),!1}}}export{n as livenessEndpoint};
1
+ import{logger as e}from"../logger.js";import{eventLoopHeartbeat as t}from"./shared.js";function n(n){let r=n?.logger??e;return async(e,n)=>{try{return await t(),r.debug?.(`Liveness check passed`,{pid:process.pid}),n.status(200).json({status:`ok`}),!0}catch(e){return r.error(`Liveness failed`,{err:e}),n.status(500).json({err:e.message}),!1}}}export{n as livenessEndpoint};
2
2
  //# sourceMappingURL=liveness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"liveness.js","names":["options?: { logger?: SimpleLogger; }","logger","fallbackLogger","_req: Request","res: Response"],"sources":["../../src/health/liveness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport { eventLoopHeartbeat } from './shared';\nimport type { SimpleLogger } from './shared';\n\nexport function livenessEndpoint(options?: { logger?: SimpleLogger; }) {\n const logger = options?.logger ?? fallbackLogger;\n\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n await eventLoopHeartbeat();\n logger.info('Liveness check passed', { pid: process.pid });\n res.status(200).json({ status: 'ok' });\n return true;\n } catch (err) {\n logger.error('Liveness failed', { err });\n res.status(500).json({ err: (err as Error).message });\n return false;\n }\n };\n}\n"],"mappings":"uFAKA,SAAgB,EAAiBA,EAAsC,CACrE,IAAMC,EAAS,GAAS,QAAUC,EAElC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CAIF,OAHA,KAAM,IAAoB,CAC1B,EAAO,KAAK,wBAAyB,CAAE,IAAK,QAAQ,GAAK,EAAC,CAC1D,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,EAC/B,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAO,MAAM,kBAAmB,CAAE,KAAK,EAAC,CACxC,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,IAAM,EAAc,OAAS,EAAC,EAC9C,CACR,CACF,CACF"}
1
+ {"version":3,"file":"liveness.js","names":["options?: { logger?: SimpleLogger; }","logger","fallbackLogger","_req: Request","res: Response"],"sources":["../../src/health/liveness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport { eventLoopHeartbeat } from './shared';\nimport type { SimpleLogger } from './shared';\n\nexport function livenessEndpoint(options?: { logger?: SimpleLogger; }) {\n const logger = options?.logger ?? fallbackLogger;\n\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n await eventLoopHeartbeat();\n logger.debug?.('Liveness check passed', { pid: process.pid });\n res.status(200).json({ status: 'ok' });\n return true;\n } catch (err) {\n logger.error('Liveness failed', { err });\n res.status(500).json({ err: (err as Error).message });\n return false;\n }\n };\n}\n"],"mappings":"uFAKA,SAAgB,EAAiBA,EAAsC,CACrE,IAAMC,EAAS,GAAS,QAAUC,EAElC,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CAIF,OAHA,KAAM,IAAoB,CAC1B,EAAO,QAAQ,wBAAyB,CAAE,IAAK,QAAQ,GAAK,EAAC,CAC7D,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,EAC/B,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAO,MAAM,kBAAmB,CAAE,KAAK,EAAC,CACxC,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,IAAM,EAAc,OAAS,EAAC,EAC9C,CACR,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- const e=require(`../logger.cjs`),t=require(`./shared.cjs`);function n(n){let{rabbit:r,sequelize:i,redis:a,elasticsearch:o,timeoutMs:s=400,logger:c=e.logger}=n;return async(e,n)=>{try{await t.eventLoopHeartbeat();let e=[];return r&&e.push(r.isConnected().then(e=>{if(!e)throw Error(`RabbitMQ is not connected`);return c.info?.(`RabbitMQ is connected`,{pid:process.pid}),e})),i&&e.push(i.authenticate().then(()=>(c.info?.(`Sequelize connection is authenticated`,{pid:process.pid}),!0))),a&&e.push(a.ping().then(()=>(c.info?.(`Redis is connected`,{pid:process.pid}),!0))),o&&e.push(o.ping()),await t.runParallelChecks(e,s),c.info?.(`Readiness check passed`,{pid:process.pid}),n.status(200).json({status:`ok`}),!0}catch(e){return c.warn?.(`Readiness failed`,{err:e}),n.status(503).json({err:e.message}),!1}}}exports.readinessEndpoint=n;
1
+ const e=require(`../logger.cjs`),t=require(`./shared.cjs`),n=(e,t,n)=>Promise.race([e,new Promise((e,r)=>setTimeout(()=>r(Error(`${n} timeout`)),t))]);function r({rabbit:r,sequelize:i,redis:a,elasticsearch:o,logger:s=e.logger,timeoutMs:c=400}){return async(e,l)=>{try{await t.eventLoopHeartbeat();let e=[];r&&e.push(n(r.isConnected().then(e=>{if(!e)throw Error(`rabbit disconnected`);s.debug?.(`rabbit ok`,{pid:process.pid})}),c,`rabbit`)),i&&e.push(n(i.query(`select 'ok' as status`).then(e=>{let{status:t}=e[0][0];if(t!==`ok`)throw Error(`sequelize disconnected`);s.debug?.(`sequelize ok`,{pid:process.pid})}),c,`sequelize`)),a&&e.push(n(a.ping().then(()=>s.debug?.(`redis ok`,{pid:process.pid})),c,`redis`)),o&&e.push(n(o.ping().then(e=>{if(!e)throw Error(`elasticsearch disconnected`);s.debug?.(`elasticsearch ok`,{pid:process.pid})}),c,`elasticsearch`)),await Promise.all(e),l.status(200).json({status:`ok`})}catch(e){s.warn?.(`readiness failed`,{err:e}),l.status(503).json({error:e.message})}}}exports.readinessEndpoint=r;
2
2
  //# sourceMappingURL=readiness.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"readiness.cjs","names":["deps: ReadinessDeps","fallbackLogger","_req: Request","res: Response","checks: Promise<unknown>[]"],"sources":["../../src/health/readiness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport {\n eventLoopHeartbeat,\n runParallelChecks,\n type SimpleLogger,\n} from './shared';\n\nexport interface ReadinessDeps {\n rabbit?: { isConnected: () => Promise<boolean>; };\n sequelize?: { authenticate: () => Promise<void>; };\n redis?: { ping: () => Promise<void>; };\n elasticsearch?: { ping: () => Promise<boolean>; };\n timeoutMs?: number;\n logger?: SimpleLogger;\n}\n\nexport function readinessEndpoint(deps: ReadinessDeps) {\n const {\n rabbit,\n sequelize,\n redis,\n elasticsearch,\n timeoutMs = 400,\n logger = fallbackLogger,\n } = deps;\n\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n await eventLoopHeartbeat();\n\n const checks: Promise<unknown>[] = [];\n if (rabbit) {\n checks.push(rabbit.isConnected().then((ok) => {\n if (!ok) {\n throw new Error('RabbitMQ is not connected');\n }\n logger.info?.('RabbitMQ is connected', { pid: process.pid });\n return ok;\n }));\n }\n if (sequelize) checks.push(sequelize.authenticate().then(() => {\n logger.info?.('Sequelize connection is authenticated', { pid: process.pid });\n return true;\n }));\n if (redis) checks.push(redis.ping().then(() => {\n logger.info?.('Redis is connected', { pid: process.pid });\n return true;\n }));\n if (elasticsearch) checks.push(elasticsearch.ping());\n\n await runParallelChecks(checks, timeoutMs);\n logger.info?.('Readiness check passed', { pid: process.pid });\n res.status(200).json({ status: 'ok' });\n return true;\n } catch (err) {\n logger.warn?.('Readiness failed', { err });\n res.status(503).json({ err: (err as Error).message });\n return false;\n }\n };\n}\n"],"mappings":"2DAiBA,SAAgB,EAAkBA,EAAqB,CACrD,GAAM,CACJ,SACA,YACA,QACA,gBACA,YAAY,IACZ,OAAA,EAASC,EAAAA,OACV,CAAG,EAEJ,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CACF,KAAM,GAAA,oBAAoB,CAE1B,IAAMC,EAA6B,CAAE,EAuBrC,OAtBI,GACF,EAAO,KAAK,EAAO,aAAa,CAAC,KAAK,AAAC,GAAO,CAC5C,IAAK,EACH,KAAM,CAAI,MAAM,4BAAA,CAGlB,MADA,GAAO,OAAO,wBAAyB,CAAE,IAAK,QAAQ,GAAK,EAAC,CACrD,CACR,EAAC,CAAC,CAED,GAAW,EAAO,KAAK,EAAU,cAAc,CAAC,KAAK,KACvD,EAAO,OAAO,wCAAyC,CAAE,IAAK,QAAQ,GAAK,EAAC,EACrE,GACP,CAAC,CACC,GAAO,EAAO,KAAK,EAAM,MAAM,CAAC,KAAK,KACvC,EAAO,OAAO,qBAAsB,CAAE,IAAK,QAAQ,GAAK,EAAC,EAClD,GACP,CAAC,CACC,GAAe,EAAO,KAAK,EAAc,MAAM,CAAC,CAEpD,KAAM,GAAA,kBAAkB,EAAQ,EAAU,CAC1C,EAAO,OAAO,yBAA0B,CAAE,IAAK,QAAQ,GAAK,EAAC,CAC7D,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,EAC/B,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAO,OAAO,mBAAoB,CAAE,KAAK,EAAC,CAC1C,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,IAAM,EAAc,OAAS,EAAC,EAC9C,CACR,CACF,CACF"}
1
+ {"version":3,"file":"readiness.cjs","names":["p: Promise<T>","ms: number","tag: string","fallbackLogger","_req: Request","res: Response","checks: Promise<unknown>[]","result: [[{ status: string; }]]"],"sources":["../../src/health/readiness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport { eventLoopHeartbeat } from './shared';\n\nexport interface ReadinessDeps {\n rabbit?: { isConnected: () => Promise<boolean>; };\n sequelize?: { query: (sql: string | { query: string; values: unknown[]; }) => Promise<any>; };\n redis?: { ping: () => Promise<void>; };\n elasticsearch?: { ping: () => Promise<boolean>; };\n logger?: { debug?: (...a: any[]) => void; warn?: (...a: any[]) => void; };\n timeoutMs?: number;\n}\n\nconst withTimeout = <T>(p: Promise<T>, ms: number, tag: string) =>\n Promise.race([\n p,\n new Promise<never>((_, r) => setTimeout(() => r(new Error(`${tag} timeout`)), ms)),\n ]);\n\nexport function readinessEndpoint({\n rabbit,\n sequelize,\n redis,\n elasticsearch,\n logger = fallbackLogger,\n timeoutMs = 400,\n}: ReadinessDeps) {\n return async (_req: Request, res: Response): Promise<void> => {\n try {\n await eventLoopHeartbeat();\n\n const checks: Promise<unknown>[] = [];\n\n if (rabbit)\n checks.push(\n withTimeout(\n rabbit.isConnected().then((ok) => {\n if (!ok) throw new Error('rabbit disconnected');\n logger.debug?.('rabbit ok', { pid: process.pid });\n }),\n timeoutMs,\n 'rabbit',\n ),\n );\n\n if (sequelize)\n checks.push(\n withTimeout(\n sequelize\n .query('select \\'ok\\' as status')\n .then((result: [[{ status: string; }]]) => {\n const { status } = result[0][0];\n if (status !== 'ok') throw new Error('sequelize disconnected');\n logger.debug?.('sequelize ok', { pid: process.pid });\n }),\n timeoutMs,\n 'sequelize',\n ),\n );\n\n if (redis)\n checks.push(\n withTimeout(\n redis.ping().then(() => logger.debug?.('redis ok', { pid: process.pid })),\n timeoutMs,\n 'redis',\n ),\n );\n\n if (elasticsearch)\n checks.push(\n withTimeout(\n elasticsearch\n .ping()\n .then((ok) => {\n if (!ok) throw new Error('elasticsearch disconnected');\n logger.debug?.('elasticsearch ok', { pid: process.pid });\n }),\n timeoutMs,\n 'elasticsearch',\n ),\n );\n\n await Promise.all(checks);\n res.status(200).json({ status: 'ok' });\n } catch (err) {\n logger.warn?.('readiness failed', { err });\n res.status(503).json({ error: (err as Error).message });\n }\n };\n}\n"],"mappings":"2DAaM,EAAc,CAAIA,EAAeC,EAAYC,IACjD,QAAQ,KAAK,CACX,EACA,IAAI,QAAe,CAAC,EAAG,IAAM,WAAW,IAAM,EAAE,AAAI,OAAO,EAAE,EAAI,UAAA,CAAW,CAAE,EAAG,CAClF,EAAC,CAEJ,SAAgB,EAAkB,CAChC,SACA,YACA,QACA,gBACA,OAAA,EAASC,EAAAA,OACT,YAAY,IACE,CAAE,CAChB,OAAO,MAAOC,EAAeC,IAAiC,CAC5D,GAAI,CACF,KAAM,GAAA,oBAAoB,CAE1B,IAAMC,EAA6B,CAAE,EAqDrC,AAnDI,GACF,EAAO,KACL,EACE,EAAO,aAAa,CAAC,KAAK,AAAC,GAAO,CAChC,IAAK,EAAI,KAAM,CAAI,MAAM,sBAAA,CACzB,EAAO,QAAQ,YAAa,CAAE,IAAK,QAAQ,GAAK,EAAC,AAClD,EAAC,CACF,EACA,SACD,CACF,CAEC,GACF,EAAO,KACL,EACE,EACG,MAAM,wBAA0B,CAChC,KAAK,AAACC,GAAoC,CACzC,GAAM,CAAE,SAAQ,CAAG,EAAO,GAAG,GAC7B,GAAI,IAAW,KAAM,KAAM,CAAI,MAAM,yBAAA,CACrC,EAAO,QAAQ,eAAgB,CAAE,IAAK,QAAQ,GAAK,EAAC,AACrD,EAAC,CACJ,EACA,YACD,CACF,CAEC,GACF,EAAO,KACL,EACE,EAAM,MAAM,CAAC,KAAK,IAAM,EAAO,QAAQ,WAAY,CAAE,IAAK,QAAQ,GAAK,EAAC,CAAC,CACzE,EACA,QACD,CACF,CAEC,GACF,EAAO,KACL,EACE,EACG,MAAM,CACN,KAAK,AAAC,GAAO,CACZ,IAAK,EAAI,KAAM,CAAI,MAAM,6BAAA,CACzB,EAAO,QAAQ,mBAAoB,CAAE,IAAK,QAAQ,GAAK,EAAC,AACzD,EAAC,CACJ,EACA,gBACD,CACF,CAEH,KAAM,SAAQ,IAAI,EAAO,CACzB,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,AACvC,OAAQ,EAAK,CAEZ,AADA,EAAO,OAAO,mBAAoB,CAAE,KAAK,EAAC,CAC1C,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,MAAQ,EAAc,OAAS,EAAC,AACxD,CACF,CACF"}
@@ -1,4 +1,3 @@
1
- import { SimpleLogger } from "./shared.cjs";
2
1
  import { Request, Response } from "express";
3
2
 
4
3
  //#region src/health/readiness.d.ts
@@ -7,7 +6,10 @@ interface ReadinessDeps {
7
6
  isConnected: () => Promise<boolean>;
8
7
  };
9
8
  sequelize?: {
10
- authenticate: () => Promise<void>;
9
+ query: (sql: string | {
10
+ query: string;
11
+ values: unknown[];
12
+ }) => Promise<any>;
11
13
  };
12
14
  redis?: {
13
15
  ping: () => Promise<void>;
@@ -15,10 +17,20 @@ interface ReadinessDeps {
15
17
  elasticsearch?: {
16
18
  ping: () => Promise<boolean>;
17
19
  };
20
+ logger?: {
21
+ debug?: (...a: any[]) => void;
22
+ warn?: (...a: any[]) => void;
23
+ };
18
24
  timeoutMs?: number;
19
- logger?: SimpleLogger;
20
25
  }
21
- declare function readinessEndpoint(deps: ReadinessDeps): (_req: Request, res: Response) => Promise<boolean>;
26
+ declare function readinessEndpoint({
27
+ rabbit,
28
+ sequelize,
29
+ redis,
30
+ elasticsearch,
31
+ logger,
32
+ timeoutMs
33
+ }: ReadinessDeps): (_req: Request, res: Response) => Promise<void>;
22
34
  //#endregion
23
35
  export { readinessEndpoint };
24
36
  //# sourceMappingURL=readiness.d.cts.map
@@ -1,4 +1,3 @@
1
- import { SimpleLogger } from "./shared.js";
2
1
  import { Request, Response } from "express";
3
2
 
4
3
  //#region src/health/readiness.d.ts
@@ -7,7 +6,10 @@ interface ReadinessDeps {
7
6
  isConnected: () => Promise<boolean>;
8
7
  };
9
8
  sequelize?: {
10
- authenticate: () => Promise<void>;
9
+ query: (sql: string | {
10
+ query: string;
11
+ values: unknown[];
12
+ }) => Promise<any>;
11
13
  };
12
14
  redis?: {
13
15
  ping: () => Promise<void>;
@@ -15,10 +17,20 @@ interface ReadinessDeps {
15
17
  elasticsearch?: {
16
18
  ping: () => Promise<boolean>;
17
19
  };
20
+ logger?: {
21
+ debug?: (...a: any[]) => void;
22
+ warn?: (...a: any[]) => void;
23
+ };
18
24
  timeoutMs?: number;
19
- logger?: SimpleLogger;
20
25
  }
21
- declare function readinessEndpoint(deps: ReadinessDeps): (_req: Request, res: Response) => Promise<boolean>;
26
+ declare function readinessEndpoint({
27
+ rabbit,
28
+ sequelize,
29
+ redis,
30
+ elasticsearch,
31
+ logger,
32
+ timeoutMs
33
+ }: ReadinessDeps): (_req: Request, res: Response) => Promise<void>;
22
34
  //#endregion
23
35
  export { readinessEndpoint };
24
36
  //# sourceMappingURL=readiness.d.ts.map
@@ -1,2 +1,2 @@
1
- import{logger as e}from"../logger.js";import{eventLoopHeartbeat as t,runParallelChecks as n}from"./shared.js";function r(r){let{rabbit:i,sequelize:a,redis:o,elasticsearch:s,timeoutMs:c=400,logger:l=e}=r;return async(e,r)=>{try{await t();let e=[];return i&&e.push(i.isConnected().then(e=>{if(!e)throw Error(`RabbitMQ is not connected`);return l.info?.(`RabbitMQ is connected`,{pid:process.pid}),e})),a&&e.push(a.authenticate().then(()=>(l.info?.(`Sequelize connection is authenticated`,{pid:process.pid}),!0))),o&&e.push(o.ping().then(()=>(l.info?.(`Redis is connected`,{pid:process.pid}),!0))),s&&e.push(s.ping()),await n(e,c),l.info?.(`Readiness check passed`,{pid:process.pid}),r.status(200).json({status:`ok`}),!0}catch(e){return l.warn?.(`Readiness failed`,{err:e}),r.status(503).json({err:e.message}),!1}}}export{r as readinessEndpoint};
1
+ import{logger as e}from"../logger.js";import{eventLoopHeartbeat as t}from"./shared.js";const n=(e,t,n)=>Promise.race([e,new Promise((e,r)=>setTimeout(()=>r(Error(`${n} timeout`)),t))]);function r({rabbit:r,sequelize:i,redis:a,elasticsearch:o,logger:s=e,timeoutMs:c=400}){return async(e,l)=>{try{await t();let e=[];r&&e.push(n(r.isConnected().then(e=>{if(!e)throw Error(`rabbit disconnected`);s.debug?.(`rabbit ok`,{pid:process.pid})}),c,`rabbit`)),i&&e.push(n(i.query(`select 'ok' as status`).then(e=>{let{status:t}=e[0][0];if(t!==`ok`)throw Error(`sequelize disconnected`);s.debug?.(`sequelize ok`,{pid:process.pid})}),c,`sequelize`)),a&&e.push(n(a.ping().then(()=>s.debug?.(`redis ok`,{pid:process.pid})),c,`redis`)),o&&e.push(n(o.ping().then(e=>{if(!e)throw Error(`elasticsearch disconnected`);s.debug?.(`elasticsearch ok`,{pid:process.pid})}),c,`elasticsearch`)),await Promise.all(e),l.status(200).json({status:`ok`})}catch(e){s.warn?.(`readiness failed`,{err:e}),l.status(503).json({error:e.message})}}}export{r as readinessEndpoint};
2
2
  //# sourceMappingURL=readiness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readiness.js","names":["deps: ReadinessDeps","fallbackLogger","_req: Request","res: Response","checks: Promise<unknown>[]"],"sources":["../../src/health/readiness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport {\n eventLoopHeartbeat,\n runParallelChecks,\n type SimpleLogger,\n} from './shared';\n\nexport interface ReadinessDeps {\n rabbit?: { isConnected: () => Promise<boolean>; };\n sequelize?: { authenticate: () => Promise<void>; };\n redis?: { ping: () => Promise<void>; };\n elasticsearch?: { ping: () => Promise<boolean>; };\n timeoutMs?: number;\n logger?: SimpleLogger;\n}\n\nexport function readinessEndpoint(deps: ReadinessDeps) {\n const {\n rabbit,\n sequelize,\n redis,\n elasticsearch,\n timeoutMs = 400,\n logger = fallbackLogger,\n } = deps;\n\n return async (_req: Request, res: Response): Promise<boolean> => {\n try {\n await eventLoopHeartbeat();\n\n const checks: Promise<unknown>[] = [];\n if (rabbit) {\n checks.push(rabbit.isConnected().then((ok) => {\n if (!ok) {\n throw new Error('RabbitMQ is not connected');\n }\n logger.info?.('RabbitMQ is connected', { pid: process.pid });\n return ok;\n }));\n }\n if (sequelize) checks.push(sequelize.authenticate().then(() => {\n logger.info?.('Sequelize connection is authenticated', { pid: process.pid });\n return true;\n }));\n if (redis) checks.push(redis.ping().then(() => {\n logger.info?.('Redis is connected', { pid: process.pid });\n return true;\n }));\n if (elasticsearch) checks.push(elasticsearch.ping());\n\n await runParallelChecks(checks, timeoutMs);\n logger.info?.('Readiness check passed', { pid: process.pid });\n res.status(200).json({ status: 'ok' });\n return true;\n } catch (err) {\n logger.warn?.('Readiness failed', { err });\n res.status(503).json({ err: (err as Error).message });\n return false;\n }\n };\n}\n"],"mappings":"8GAiBA,SAAgB,EAAkBA,EAAqB,CACrD,GAAM,CACJ,SACA,YACA,QACA,gBACA,YAAY,IACZ,OAAA,EAASC,EACV,CAAG,EAEJ,OAAO,MAAOC,EAAeC,IAAoC,CAC/D,GAAI,CACF,KAAM,IAAoB,CAE1B,IAAMC,EAA6B,CAAE,EAuBrC,OAtBI,GACF,EAAO,KAAK,EAAO,aAAa,CAAC,KAAK,AAAC,GAAO,CAC5C,IAAK,EACH,KAAM,CAAI,MAAM,4BAAA,CAGlB,MADA,GAAO,OAAO,wBAAyB,CAAE,IAAK,QAAQ,GAAK,EAAC,CACrD,CACR,EAAC,CAAC,CAED,GAAW,EAAO,KAAK,EAAU,cAAc,CAAC,KAAK,KACvD,EAAO,OAAO,wCAAyC,CAAE,IAAK,QAAQ,GAAK,EAAC,EACrE,GACP,CAAC,CACC,GAAO,EAAO,KAAK,EAAM,MAAM,CAAC,KAAK,KACvC,EAAO,OAAO,qBAAsB,CAAE,IAAK,QAAQ,GAAK,EAAC,EAClD,GACP,CAAC,CACC,GAAe,EAAO,KAAK,EAAc,MAAM,CAAC,CAEpD,KAAM,GAAkB,EAAQ,EAAU,CAC1C,EAAO,OAAO,yBAA0B,CAAE,IAAK,QAAQ,GAAK,EAAC,CAC7D,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,EAC/B,CACR,OAAQ,EAAK,CAGZ,MAFA,GAAO,OAAO,mBAAoB,CAAE,KAAK,EAAC,CAC1C,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,IAAM,EAAc,OAAS,EAAC,EAC9C,CACR,CACF,CACF"}
1
+ {"version":3,"file":"readiness.js","names":["p: Promise<T>","ms: number","tag: string","fallbackLogger","_req: Request","res: Response","checks: Promise<unknown>[]","result: [[{ status: string; }]]"],"sources":["../../src/health/readiness.ts"],"sourcesContent":["import type { Request, Response } from 'express';\nimport { logger as fallbackLogger } from '../logger';\nimport { eventLoopHeartbeat } from './shared';\n\nexport interface ReadinessDeps {\n rabbit?: { isConnected: () => Promise<boolean>; };\n sequelize?: { query: (sql: string | { query: string; values: unknown[]; }) => Promise<any>; };\n redis?: { ping: () => Promise<void>; };\n elasticsearch?: { ping: () => Promise<boolean>; };\n logger?: { debug?: (...a: any[]) => void; warn?: (...a: any[]) => void; };\n timeoutMs?: number;\n}\n\nconst withTimeout = <T>(p: Promise<T>, ms: number, tag: string) =>\n Promise.race([\n p,\n new Promise<never>((_, r) => setTimeout(() => r(new Error(`${tag} timeout`)), ms)),\n ]);\n\nexport function readinessEndpoint({\n rabbit,\n sequelize,\n redis,\n elasticsearch,\n logger = fallbackLogger,\n timeoutMs = 400,\n}: ReadinessDeps) {\n return async (_req: Request, res: Response): Promise<void> => {\n try {\n await eventLoopHeartbeat();\n\n const checks: Promise<unknown>[] = [];\n\n if (rabbit)\n checks.push(\n withTimeout(\n rabbit.isConnected().then((ok) => {\n if (!ok) throw new Error('rabbit disconnected');\n logger.debug?.('rabbit ok', { pid: process.pid });\n }),\n timeoutMs,\n 'rabbit',\n ),\n );\n\n if (sequelize)\n checks.push(\n withTimeout(\n sequelize\n .query('select \\'ok\\' as status')\n .then((result: [[{ status: string; }]]) => {\n const { status } = result[0][0];\n if (status !== 'ok') throw new Error('sequelize disconnected');\n logger.debug?.('sequelize ok', { pid: process.pid });\n }),\n timeoutMs,\n 'sequelize',\n ),\n );\n\n if (redis)\n checks.push(\n withTimeout(\n redis.ping().then(() => logger.debug?.('redis ok', { pid: process.pid })),\n timeoutMs,\n 'redis',\n ),\n );\n\n if (elasticsearch)\n checks.push(\n withTimeout(\n elasticsearch\n .ping()\n .then((ok) => {\n if (!ok) throw new Error('elasticsearch disconnected');\n logger.debug?.('elasticsearch ok', { pid: process.pid });\n }),\n timeoutMs,\n 'elasticsearch',\n ),\n );\n\n await Promise.all(checks);\n res.status(200).json({ status: 'ok' });\n } catch (err) {\n logger.warn?.('readiness failed', { err });\n res.status(503).json({ error: (err as Error).message });\n }\n };\n}\n"],"mappings":"uFAaA,MAAM,EAAc,CAAIA,EAAeC,EAAYC,IACjD,QAAQ,KAAK,CACX,EACA,IAAI,QAAe,CAAC,EAAG,IAAM,WAAW,IAAM,EAAE,AAAI,OAAO,EAAE,EAAI,UAAA,CAAW,CAAE,EAAG,CAClF,EAAC,CAEJ,SAAgB,EAAkB,CAChC,SACA,YACA,QACA,gBACA,OAAA,EAASC,EACT,YAAY,IACE,CAAE,CAChB,OAAO,MAAOC,EAAeC,IAAiC,CAC5D,GAAI,CACF,KAAM,IAAoB,CAE1B,IAAMC,EAA6B,CAAE,EAqDrC,AAnDI,GACF,EAAO,KACL,EACE,EAAO,aAAa,CAAC,KAAK,AAAC,GAAO,CAChC,IAAK,EAAI,KAAM,CAAI,MAAM,sBAAA,CACzB,EAAO,QAAQ,YAAa,CAAE,IAAK,QAAQ,GAAK,EAAC,AAClD,EAAC,CACF,EACA,SACD,CACF,CAEC,GACF,EAAO,KACL,EACE,EACG,MAAM,wBAA0B,CAChC,KAAK,AAACC,GAAoC,CACzC,GAAM,CAAE,SAAQ,CAAG,EAAO,GAAG,GAC7B,GAAI,IAAW,KAAM,KAAM,CAAI,MAAM,yBAAA,CACrC,EAAO,QAAQ,eAAgB,CAAE,IAAK,QAAQ,GAAK,EAAC,AACrD,EAAC,CACJ,EACA,YACD,CACF,CAEC,GACF,EAAO,KACL,EACE,EAAM,MAAM,CAAC,KAAK,IAAM,EAAO,QAAQ,WAAY,CAAE,IAAK,QAAQ,GAAK,EAAC,CAAC,CACzE,EACA,QACD,CACF,CAEC,GACF,EAAO,KACL,EACE,EACG,MAAM,CACN,KAAK,AAAC,GAAO,CACZ,IAAK,EAAI,KAAM,CAAI,MAAM,6BAAA,CACzB,EAAO,QAAQ,mBAAoB,CAAE,IAAK,QAAQ,GAAK,EAAC,AACzD,EAAC,CACJ,EACA,gBACD,CACF,CAEH,KAAM,SAAQ,IAAI,EAAO,CACzB,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,OAAQ,IAAM,EAAC,AACvC,OAAQ,EAAK,CAEZ,AADA,EAAO,OAAO,mBAAoB,CAAE,KAAK,EAAC,CAC1C,EAAI,OAAO,IAAI,CAAC,KAAK,CAAE,MAAQ,EAAc,OAAS,EAAC,AACxD,CACF,CACF"}
@@ -1,2 +1,2 @@
1
- function e(e=200){return new Promise((t,n)=>{let r=Date.now();setImmediate(()=>{Date.now()-r>e?n(Error(`event‑loop lag`)):t()})})}async function t(e,t){let n=new Promise((e,n)=>setTimeout(n,t,Error(`probe timeout`)));return Promise.race([Promise.all(e),n]).then(()=>void 0)}exports.eventLoopHeartbeat=e,exports.runParallelChecks=t;
1
+ function e(e=200){return new Promise((t,n)=>{let r=Date.now();setImmediate(()=>{Date.now()-r>e?n(Error(`event‑loop lag`)):t()})})}exports.eventLoopHeartbeat=e;
2
2
  //# sourceMappingURL=shared.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.cjs","names":["checks: Promise<unknown>[]","timeoutMs: number"],"sources":["../../src/health/shared.ts"],"sourcesContent":["export interface SimpleLogger {\n error: (message: string, meta: Record<string, unknown>) => void;\n warn: (message: string, meta: Record<string, unknown>) => void;\n info: (message: string, meta: Record<string, unknown>) => void;\n};\n\nexport function eventLoopHeartbeat(maxLag = 200): Promise<void> {\n return new Promise((resolve, reject) => {\n const start = Date.now();\n setImmediate(() => {\n if (Date.now() - start > maxLag) {\n reject(new Error('event‑loop lag'));\n } else {\n resolve();\n }\n });\n });\n}\n\nexport async function runParallelChecks(\n checks: Promise<unknown>[],\n timeoutMs: number,\n): Promise<void> {\n const timeout = new Promise((_, reject) =>\n setTimeout(reject, timeoutMs, new Error('probe timeout')),\n );\n return Promise.race([Promise.all(checks), timeout]).then(() => undefined);\n}\n"],"mappings":"AAMA,SAAgB,EAAmB,EAAS,IAAoB,CAC9D,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAM,EAAQ,KAAK,KAAK,CACxB,aAAa,IAAM,CACjB,AAAI,KAAK,KAAK,CAAG,EAAQ,EACvB,EAAO,AAAI,MAAM,iBAAA,CAAkB,CAEnC,GAAS,AAEZ,EAAC,AACH,EACF,CAED,eAAsB,EACpBA,EACAC,EACe,CACf,IAAM,EAAU,IAAI,QAAQ,CAAC,EAAG,IAC9B,WAAW,EAAQ,EAAW,AAAI,MAAM,gBAAA,CAAiB,EAE3D,MAAO,SAAQ,KAAK,CAAC,QAAQ,IAAI,EAAO,CAAE,CAAQ,EAAC,CAAC,KAAK,QAAA,GAAgB,AAC1E"}
1
+ {"version":3,"file":"shared.cjs","names":[],"sources":["../../src/health/shared.ts"],"sourcesContent":["export interface SimpleLogger {\n error: (message: string, meta: Record<string, unknown>) => void;\n warn: (message: string, meta: Record<string, unknown>) => void;\n info: (message: string, meta: Record<string, unknown>) => void;\n debug?: (message: string, meta: Record<string, unknown>) => void;\n};\n\nexport function eventLoopHeartbeat(maxLag = 200): Promise<void> {\n return new Promise((resolve, reject) => {\n const start = Date.now();\n setImmediate(() => {\n if (Date.now() - start > maxLag) {\n reject(new Error('event‑loop lag'));\n } else {\n resolve();\n }\n });\n });\n}\n\nexport async function runParallelChecks(\n checks: Map<string, Promise<unknown>>,\n): Promise<void> {\n if (checks.size === 0) {\n return;\n }\n await Promise.all(\n Array.from(checks.values()).map(check =>\n check.catch((err) => {\n throw new Error(`Check failed: ${err.message}`);\n }),\n ),\n );\n}\n"],"mappings":"AAOA,SAAgB,EAAmB,EAAS,IAAoB,CAC9D,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAM,EAAQ,KAAK,KAAK,CACxB,aAAa,IAAM,CACjB,AAAI,KAAK,KAAK,CAAG,EAAQ,EACvB,EAAO,AAAI,MAAM,iBAAA,CAAkB,CAEnC,GAAS,AAEZ,EAAC,AACH,EACF"}
@@ -3,6 +3,7 @@ interface SimpleLogger {
3
3
  error: (message: string, meta: Record<string, unknown>) => void;
4
4
  warn: (message: string, meta: Record<string, unknown>) => void;
5
5
  info: (message: string, meta: Record<string, unknown>) => void;
6
+ debug?: (message: string, meta: Record<string, unknown>) => void;
6
7
  }
7
8
  //#endregion
8
9
  export { SimpleLogger };
@@ -3,6 +3,7 @@ interface SimpleLogger {
3
3
  error: (message: string, meta: Record<string, unknown>) => void;
4
4
  warn: (message: string, meta: Record<string, unknown>) => void;
5
5
  info: (message: string, meta: Record<string, unknown>) => void;
6
+ debug?: (message: string, meta: Record<string, unknown>) => void;
6
7
  }
7
8
  //#endregion
8
9
  export { SimpleLogger };
@@ -1,2 +1,2 @@
1
- function e(e=200){return new Promise((t,n)=>{let r=Date.now();setImmediate(()=>{Date.now()-r>e?n(Error(`event‑loop lag`)):t()})})}async function t(e,t){let n=new Promise((e,n)=>setTimeout(n,t,Error(`probe timeout`)));return Promise.race([Promise.all(e),n]).then(()=>void 0)}export{e as eventLoopHeartbeat,t as runParallelChecks};
1
+ function e(e=200){return new Promise((t,n)=>{let r=Date.now();setImmediate(()=>{Date.now()-r>e?n(Error(`event‑loop lag`)):t()})})}export{e as eventLoopHeartbeat};
2
2
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","names":["checks: Promise<unknown>[]","timeoutMs: number"],"sources":["../../src/health/shared.ts"],"sourcesContent":["export interface SimpleLogger {\n error: (message: string, meta: Record<string, unknown>) => void;\n warn: (message: string, meta: Record<string, unknown>) => void;\n info: (message: string, meta: Record<string, unknown>) => void;\n};\n\nexport function eventLoopHeartbeat(maxLag = 200): Promise<void> {\n return new Promise((resolve, reject) => {\n const start = Date.now();\n setImmediate(() => {\n if (Date.now() - start > maxLag) {\n reject(new Error('event‑loop lag'));\n } else {\n resolve();\n }\n });\n });\n}\n\nexport async function runParallelChecks(\n checks: Promise<unknown>[],\n timeoutMs: number,\n): Promise<void> {\n const timeout = new Promise((_, reject) =>\n setTimeout(reject, timeoutMs, new Error('probe timeout')),\n );\n return Promise.race([Promise.all(checks), timeout]).then(() => undefined);\n}\n"],"mappings":"AAMA,SAAgB,EAAmB,EAAS,IAAoB,CAC9D,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAM,EAAQ,KAAK,KAAK,CACxB,aAAa,IAAM,CACjB,AAAI,KAAK,KAAK,CAAG,EAAQ,EACvB,EAAO,AAAI,MAAM,iBAAA,CAAkB,CAEnC,GAAS,AAEZ,EAAC,AACH,EACF,CAED,eAAsB,EACpBA,EACAC,EACe,CACf,IAAM,EAAU,IAAI,QAAQ,CAAC,EAAG,IAC9B,WAAW,EAAQ,EAAW,AAAI,MAAM,gBAAA,CAAiB,EAE3D,MAAO,SAAQ,KAAK,CAAC,QAAQ,IAAI,EAAO,CAAE,CAAQ,EAAC,CAAC,KAAK,QAAA,GAAgB,AAC1E"}
1
+ {"version":3,"file":"shared.js","names":[],"sources":["../../src/health/shared.ts"],"sourcesContent":["export interface SimpleLogger {\n error: (message: string, meta: Record<string, unknown>) => void;\n warn: (message: string, meta: Record<string, unknown>) => void;\n info: (message: string, meta: Record<string, unknown>) => void;\n debug?: (message: string, meta: Record<string, unknown>) => void;\n};\n\nexport function eventLoopHeartbeat(maxLag = 200): Promise<void> {\n return new Promise((resolve, reject) => {\n const start = Date.now();\n setImmediate(() => {\n if (Date.now() - start > maxLag) {\n reject(new Error('event‑loop lag'));\n } else {\n resolve();\n }\n });\n });\n}\n\nexport async function runParallelChecks(\n checks: Map<string, Promise<unknown>>,\n): Promise<void> {\n if (checks.size === 0) {\n return;\n }\n await Promise.all(\n Array.from(checks.values()).map(check =>\n check.catch((err) => {\n throw new Error(`Check failed: ${err.message}`);\n }),\n ),\n );\n}\n"],"mappings":"AAOA,SAAgB,EAAmB,EAAS,IAAoB,CAC9D,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACtC,IAAM,EAAQ,KAAK,KAAK,CACxB,aAAa,IAAM,CACjB,AAAI,KAAK,KAAK,CAAG,EAAQ,EACvB,EAAO,AAAI,MAAM,iBAAA,CAAkB,CAEnC,GAAS,AAEZ,EAAC,AACH,EACF"}
package/lib/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- const e=require(`./alive-endpoint/middleware.cjs`),t=require(`./health/liveness.cjs`),n=require(`./health/readiness.cjs`),r={liveness:t.livenessEndpoint,readiness:n.readinessEndpoint};exports.aliveEndpoint=e.aliveEndpointMiddleware,exports.probes=r;
1
+ const e=require(`./health/liveness.cjs`),t=require(`./alive-endpoint/middleware.cjs`),n=require(`./health/readiness.cjs`),r={liveness:e.livenessEndpoint,readiness:n.readinessEndpoint};exports.aliveEndpoint=t.aliveEndpointMiddleware,exports.probes=r;
2
2
  //# sourceMappingURL=index.cjs.map
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{aliveEndpointMiddleware as e}from"./alive-endpoint/middleware.js";import{livenessEndpoint as t}from"./health/liveness.js";import{readinessEndpoint as n}from"./health/readiness.js";const r={liveness:t,readiness:n};export{e as aliveEndpoint,r as probes};
1
+ import{livenessEndpoint as e}from"./health/liveness.js";import{aliveEndpointMiddleware as t}from"./alive-endpoint/middleware.js";import{readinessEndpoint as n}from"./health/readiness.js";const r={liveness:e,readiness:n};export{t as aliveEndpoint,r as probes};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/nitur",
3
- "version": "2.2.1-3",
3
+ "version": "2.2.1-5",
4
4
  "description": "A package for service monitoring",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",