From a892a87eb56f83ff2b9ff5f046b02cc8d9def1a9 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Thu, 6 Jan 2022 12:37:49 -0500 Subject: [PATCH] K8s changes (#19) * K8S changes * k8s: test explicit dns lookup of service * bugfix prev commit * typo * k8s: more dns * k8s: more dns * k8s: more dns fun * k8s cleanup * k8s: user service for rtpengine location * k8s cleanup * typo * change env name for fs in k8s * change k8s service name for feature server * add support for outbound connection mode * k8s change for outbound * minor * bugfix: drachtio connection was dropped after successful connect * drop drachtio connection on call end * Dockerfile * k8s pre-stop hook * actual hook committed * make hjook executable * dockerfile change * time series fix * bugfix: teams transfer using replaces --- Dockerfile | 2 +- app.js | 25 ++- bin/k8s-pre-stop-hook.js | 29 +++ lib/call-session.js | 10 +- lib/fs-tracking.js | 21 +- lib/middleware.js | 14 +- package-lock.json | 468 ++++++++++++++++++--------------------- package.json | 19 +- 8 files changed, 311 insertions(+), 277 deletions(-) create mode 100755 bin/k8s-pre-stop-hook.js diff --git a/Dockerfile b/Dockerfile index a9f12dd..fd875f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16 +FROM node:17-slim WORKDIR /opt/app/ COPY package.json ./ RUN npm install diff --git a/app.js b/app.js index 56e6a9f..b8d657a 100644 --- a/app.js +++ b/app.js @@ -10,7 +10,6 @@ assert.ok(process.env.JAMBONES_NETWORK_CIDR, 'missing JAMBONES_NETWORK_CIDR env const Srf = require('drachtio-srf'); const srf = new Srf('sbc-inbound'); const CIDRMatcher = require('cidr-matcher'); -const matcher = new CIDRMatcher([process.env.JAMBONES_NETWORK_CIDR]); const opts = Object.assign({ timestamp: () => {return `, "time": "${new Date().toISOString()}"`;} }, {level: process.env.JAMBONES_LOGLEVEL || 'info'}); @@ -22,6 +21,7 @@ const { AlertType } = require('@jambonz/time-series')(logger, { host: process.env.JAMBONES_TIME_SERIES_HOST, + port: process.env.JAMBONES_TIME_SERIES_PORT || 8086, commitSize: 50, commitInterval: 'test' === process.env.NODE_ENV ? 7 : 20 }); @@ -32,6 +32,11 @@ const setNameRtp = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:active-rtp const rtpServers = []; const setName = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:active-sip`; +const cidrs = process.env.JAMBONES_NETWORK_CIDR + .split(',') + .map((s) => s.trim()); +const matcher = new CIDRMatcher(cidrs); + const { pool, lookupAuthHook, @@ -105,7 +110,7 @@ const { } = require('./lib/middleware')(srf, logger); const CallSession = require('./lib/call-session'); -if (process.env.DRACHTIO_HOST) { +if (process.env.DRACHTIO_HOST && !process.env.K8S) { srf.connect({host: process.env.DRACHTIO_HOST, port: process.env.DRACHTIO_PORT, secret: process.env.DRACHTIO_SECRET }); srf.on('connect', (err, hp) => { if (err) return this.logger.error({err}, 'Error connecting to drachtio server'); @@ -131,6 +136,7 @@ if (process.env.DRACHTIO_HOST) { }); } else { + logger.info(`listening in outbound mode on port ${process.env.DRACHTIO_PORT}`); srf.listen({port: process.env.DRACHTIO_PORT, secret: process.env.DRACHTIO_SECRET}); } if (process.env.NODE_ENV === 'test') { @@ -163,6 +169,11 @@ srf.use((req, res, next, err) => { res.send(500); }); +const PORT = process.env.HTTP_PORT || 3000; +const getCount = () => activeCallIds.size; +const healthCheck = require('@jambonz/http-health-check'); +healthCheck({port: PORT, logger, path: '/', fn: getCount}); + /* update call stats periodically */ setInterval(() => { stats.gauge('sbc.sip.calls.count', activeCallIds.size, ['direction:inbound']); @@ -179,11 +190,13 @@ const arrayCompare = (a, b) => { return true; }; -/* update rtpengines periodically */ -if (process.env.JAMBONES_RTPENGINES) { - setRtpEngines([process.env.JAMBONES_RTPENGINES]); +const serviceName = process.env.JAMBONES_RTPENGINES || process.env.K8S_RTPENGINE_SERVICE_NAME; +if (serviceName) { + logger.info(`rtpengine(s) will be found at: ${serviceName}`); + setRtpEngines([serviceName]); } else { + /* update rtpengines periodically */ const getActiveRtpServers = async() => { try { const set = await retrieveSet(setNameRtp); @@ -199,11 +212,11 @@ else { logger.error({err}, 'Error setting new rtpengines'); } }; - setInterval(() => { getActiveRtpServers(); }, 30000); getActiveRtpServers(); + } const {lifecycleEmitter} = require('./lib/autoscale-manager')(logger); diff --git a/bin/k8s-pre-stop-hook.js b/bin/k8s-pre-stop-hook.js new file mode 100755 index 0000000..9d9e0cf --- /dev/null +++ b/bin/k8s-pre-stop-hook.js @@ -0,0 +1,29 @@ +#!/usr/bin/env node +const bent = require('bent'); +const getJSON = bent('json'); +const PORT = process.env.HTTP_PORT || 3000; + +const sleep = (ms) => { + return new Promise((resolve) => setTimeout(resolve, ms)); +}; + +(async function() { + + try { + do { + const obj = await getJSON(`http://127.0.0.1:${PORT}/`); + const {calls} = obj; + if (calls === 0) { + console.log('no calls on the system, we can exit'); + process.exit(0); + } + else { + console.log(`waiting for ${calls} to exit..`); + } + await sleep(10000); + } while (1); + } catch (err) { + console.error(err, 'Error querying health endpoint'); + process.exit(-1); + } +})(); diff --git a/lib/call-session.js b/lib/call-session.js index 12720db..957aa22 100644 --- a/lib/call-session.js +++ b/lib/call-session.js @@ -209,6 +209,7 @@ class CallSession extends Emitter { else if (err.message !== 'call canceled') { this.logger.error(err, 'unexpected error routing inbound call'); } + this.srf.endSession(this.req); } } @@ -223,6 +224,7 @@ class CallSession extends Emitter { this.rtpEngineResource.destroy().catch((err) => {}); this.activeCallIds.delete(callId); if (dlg.other && dlg.other.connected) dlg.other.destroy().catch((e) => {}); + this.srf.endSession(this.req); }); //re-invite @@ -272,6 +274,7 @@ class CallSession extends Emitter { trunk }).catch((err) => this.logger.error({err}, 'Error writing cdr for completed call')); } + this.srf.endSession(this.req); }); }); @@ -326,7 +329,7 @@ Duration=${payload.duration} ` */ async replaces(req, res) { try { - let opts = Object.assign(this.rtpEngineOpts.offer, {sdp: req.body}); + let opts = Object.assign(this.rtpEngineOpts.uas.mediaOpts, {sdp: req.body}); let response = await this.offer(opts); if ('ok' !== response.result) { res.send(488); @@ -334,8 +337,8 @@ Duration=${payload.duration} ` } this.logger.info({opts, response}, 'sent offer for reinvite to rtpengine'); const sdp = await this.uac.modify(response.sdp); - opts = Object.assign(this.rtpEngineOpts.answer, {sdp, 'to-tag': this.toTag}); - Object.assign(this.rtpEngineOpts.offer, {'to-tag': this.toTag}); + opts = Object.assign(this.rtpEngineOpts.uac.mediaOpts, {sdp, 'to-tag': this.toTag}); + Object.assign(this.rtpEngineOpts.uas.mediaOpts, {'to-tag': this.toTag}); response = await this.answer(opts); if ('ok' !== response.result) { res.send(488); @@ -529,6 +532,7 @@ Duration=${payload.duration} ` this.rtpEngineResource.destroy(); this.activeCallIds.delete(this.req.get('Call-ID')); uac.other.destroy(); + this.srf.endSession(this.req); }); // now we can destroy the old dialog dlg.destroy().catch(() => {}); diff --git a/lib/fs-tracking.js b/lib/fs-tracking.js index 675b27a..42078b7 100644 --- a/lib/fs-tracking.js +++ b/lib/fs-tracking.js @@ -1,4 +1,8 @@ const setName = `${(process.env.JAMBONES_CLUSTER_ID || 'default')}:active-fs`; +const assert = require('assert'); + +assert.ok(!process.env.K8S || process.env.K8S_FEATURE_SERVER_SERVICE_NAME, + 'when running in Kubernetes, an env var K8S_FEATURE_SERVER_SERVICE_NAME is required'); module.exports = (srf, logger) => { const {retrieveSet, createSet} = srf.locals.realtimeDbHelpers; @@ -10,13 +14,18 @@ module.exports = (srf, logger) => { return async() => { try { - const fs = await retrieveSet(setName); - if (0 === fs.length) { - logger.info('No available feature servers to handle incoming call'); - return; + if (process.env.K8S) { + return process.env.K8S_FEATURE_SERVER_SERVICE_NAME; + } + else { + const fs = await retrieveSet(setName); + if (0 === fs.length) { + logger.info('No available feature servers to handle incoming call'); + return; + } + logger.debug({fs}, `retrieved ${setName}`); + return fs[idx++ % fs.length]; } - logger.debug({fs}, `retrieved ${setName}`); - return fs[idx++ % fs.length]; } catch (err) { logger.error({err}, `Error retrieving ${setName}`); } diff --git a/lib/middleware.js b/lib/middleware.js index 417b0ee..c3bb458 100644 --- a/lib/middleware.js +++ b/lib/middleware.js @@ -152,7 +152,8 @@ module.exports = function(srf, logger) { const app = await lookupAppByTeamsTenant(uri.host); if (!app) { stats.increment('sbc.terminations', ['sipStatus:404']); - return res.send(404, {headers: {'X-Reason': 'no configured application'}}); + res.send(404, {headers: {'X-Reason': 'no configured application'}}); + return req.srf.endSession(req); } req.locals = { @@ -171,7 +172,8 @@ module.exports = function(srf, logger) { const account = await lookupAccountBySipRealm(uri.host); if (!account) { stats.increment('sbc.terminations', ['sipStatus:404']); - return res.send(404); + res.send(404); + return req.srf.endSession(req); } /* if this is a dedicated SBC (static IP) only take calls for that account's sip realm */ @@ -180,7 +182,8 @@ module.exports = function(srf, logger) { `identifyAccount: static IP for ${process.env.SBC_ACCOUNT_SID} but call for ${account.account_sid}`); stats.increment('sbc.terminations', ['sipStatus:404']); delete req.locals.cdr; - return res.send(404); + res.send(404); + return req.srf.endSession(req); } req.locals = { account_sid: account.account_sid, @@ -261,13 +264,15 @@ module.exports = function(srf, logger) { account_sid, count: limit_sessions }).catch((err) => logger.info({err}, 'checkLimits: error writing alert')); - return res.send(503, 'Maximum Calls In Progress'); + res.send(503, 'Maximum Calls In Progress'); + return req.srf.endSession(req); } next(); } catch (err) { stats.increment('sbc.terminations', ['sipStatus:500']); logger.error({err}, 'error checking limits error for inbound call'); res.send(500); + req.srf.endSession(req); } }; @@ -280,6 +285,7 @@ module.exports = function(srf, logger) { stats.increment('sbc.terminations', ['sipStatus:500']); logger.error(err, `${req.get('Call-ID')} Error looking up related info for inbound call`); res.send(500); + req.srf.endSession(req); } }; diff --git a/package-lock.json b/package-lock.json index 34b03de..2e78228 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,27 +1,28 @@ { "name": "sbc-inbound", - "version": "v0.6.7-rc8", + "version": "v0.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "v0.6.7-rc8", + "version": "v0.7.0", "license": "MIT", "dependencies": { - "@jambonz/db-helpers": "^0.6.12", + "@jambonz/db-helpers": "^0.6.13", "@jambonz/http-authenticator": "^0.2.0", + "@jambonz/http-health-check": "^0.0.1", "@jambonz/realtimedb-helpers": "^0.4.8", "@jambonz/rtpengine-utils": "^0.1.17", - "@jambonz/stats-collector": "^0.1.5", + "@jambonz/stats-collector": "^0.1.6", "@jambonz/time-series": "^0.1.5", - "aws-sdk": "^2.848.0", + "aws-sdk": "^2.1036.0", "bent": "^7.3.12", "cidr-matcher": "^2.1.1", - "debug": "^4.3.1", + "debug": "^4.3.2", "drachtio-fn-b2b-sugar": "0.0.12", "drachtio-srf": "^4.4.59", "express": "^4.17.1", - "pino": "^6.8.0", + "pino": "^6.13.3", "rtpengine-client": "^0.2.0", "verify-aws-sns-signature": "^0.0.6", "xml2js": "^0.4.23" @@ -503,9 +504,9 @@ } }, "node_modules/@jambonz/db-helpers": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.6.12.tgz", - "integrity": "sha512-AZB8iMqLpFhT1xcViQSmXpjzO8FWnW2DXaPcDHnZO0uhrAS+8OSpU1tBdl4p6yHwPQ8CEONyMIpF86tltnLpOg==", + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.6.14.tgz", + "integrity": "sha512-dWUjDb2If9NwUpUxlAJ4PbIWRyA1gZTkmiICix/f76yAF5aGCf0hgOiYXlh335BRYsX5By41yS7DkLXaTxbx9g==", "dependencies": { "cidr-matcher": "^2.1.1", "debug": "^4.3.1", @@ -525,6 +526,17 @@ "qs": "^6.9.4" } }, + "node_modules/@jambonz/http-health-check": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@jambonz/http-health-check/-/http-health-check-0.0.1.tgz", + "integrity": "sha512-pGBcaDLMQ2pwJF2pm0UAi30rNcMzwsdvUSExfCrR4IPYsrGFYf/AFJVOOiaaG9JBbI9dPKu6TKo4n6SIMn0yWA==", + "dependencies": { + "express": "^4.17.2" + }, + "engines": { + "node": ">=14.x" + } + }, "node_modules/@jambonz/promisify-redis": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@jambonz/promisify-redis/-/promisify-redis-0.0.6.tgz", @@ -558,12 +570,12 @@ } }, "node_modules/@jambonz/stats-collector": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@jambonz/stats-collector/-/stats-collector-0.1.5.tgz", - "integrity": "sha512-Lrz0kQe4MtN2jCvKntpvHhKQFnn9Vw+tDQtaeYg4tqHAiNQeqcWG6E9r7yObvn4VnjPUkVLtgyf8E+1xqkiEYA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@jambonz/stats-collector/-/stats-collector-0.1.6.tgz", + "integrity": "sha512-Qk+kpeb2wravpj3OYPC4N3ML1qoAzARNLfKGZtJ05PTAtfWoZMPnyfPAM9EJHIiVfs2Lec3CXDjEpHna0mc9EA==", "dependencies": { - "debug": "^4.3.1", - "hot-shots": "^8.2.1" + "debug": "^4.3.2", + "hot-shots": "^8.5.0" } }, "node_modules/@jambonz/time-series": { @@ -824,9 +836,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.860.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.860.0.tgz", - "integrity": "sha512-BUBWw28PNDhRDnPEnXiPEvgTWD8Iyq5pl9lk/WhXC/vkACJ3aUVe+sicezI1/JQRjLrO3R6w7X20YknVWfAibA==", + "version": "2.1046.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1046.0.tgz", + "integrity": "sha512-ocwHclMXdIA+NWocUyvp9Ild3/zy2vr5mHp3mTyodf0WU5lzBE8PocCVLSWhMAXLxyia83xv2y5f5AzAcetbqA==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -839,7 +851,7 @@ "xml2js": "0.4.19" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.0.0" } }, "node_modules/aws-sdk/node_modules/uuid": { @@ -928,20 +940,20 @@ } }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "engines": { "node": ">= 0.8" @@ -971,14 +983,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1027,9 +1031,9 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "engines": { "node": ">= 0.8" } @@ -1192,21 +1196,16 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -1231,9 +1230,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "engines": { "node": ">= 0.6" } @@ -1262,9 +1261,9 @@ } }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" }, @@ -1847,16 +1846,16 @@ } }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -1870,13 +1869,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -1899,19 +1898,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "node_modules/express/node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1957,15 +1943,20 @@ } }, "node_modules/fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-text-encoding": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, + "node_modules/fastify-warning": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", + "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2401,9 +2392,9 @@ } }, "node_modules/hot-shots": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-8.3.0.tgz", - "integrity": "sha512-bdhBiiIMFhn9cXYJMtDKWM7O15iSLS14O5KetoHnyYOZdFr0A3cCtHA4byzkS3E72xFbqWFg4lqJ2EN/33J7UQ==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-8.5.2.tgz", + "integrity": "sha512-1CKCtbYU28KtRriRW+mdOZzKce0WPqU0FOYE4bYs3gD1bFpOrYzQDXfQ09Qz9dJPEltasDOGhFKiYaiuW/j9Dg==", "engines": { "node": ">=6.0.0" }, @@ -2418,25 +2409,20 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, "node_modules/https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -3195,9 +3181,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "node_modules/natural-compare": { @@ -3543,15 +3529,16 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "node_modules/pino": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", - "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", + "version": "6.13.3", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", + "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", "dependencies": { "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", + "fast-safe-stringify": "^2.0.8", + "fastify-warning": "^0.2.0", "flatstr": "^1.0.12", "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.1", + "quick-format-unescaped": "^4.0.3", "sonic-boom": "^1.0.2" }, "bin": { @@ -3701,9 +3688,9 @@ } }, "node_modules/quick-format-unescaped": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", - "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" }, "node_modules/range-parser": { "version": "1.2.1", @@ -3714,12 +3701,12 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -3972,9 +3959,9 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -3983,9 +3970,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -4008,9 +3995,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/seq-queue": { "version": "0.0.5", @@ -4018,14 +4005,14 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" }, "engines": { "node": ">= 0.8.0" @@ -4038,9 +4025,9 @@ "dev": true }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -4383,9 +4370,9 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } @@ -5122,9 +5109,9 @@ "dev": true }, "@jambonz/db-helpers": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.6.12.tgz", - "integrity": "sha512-AZB8iMqLpFhT1xcViQSmXpjzO8FWnW2DXaPcDHnZO0uhrAS+8OSpU1tBdl4p6yHwPQ8CEONyMIpF86tltnLpOg==", + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.6.14.tgz", + "integrity": "sha512-dWUjDb2If9NwUpUxlAJ4PbIWRyA1gZTkmiICix/f76yAF5aGCf0hgOiYXlh335BRYsX5By41yS7DkLXaTxbx9g==", "requires": { "cidr-matcher": "^2.1.1", "debug": "^4.3.1", @@ -5144,6 +5131,14 @@ "qs": "^6.9.4" } }, + "@jambonz/http-health-check": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@jambonz/http-health-check/-/http-health-check-0.0.1.tgz", + "integrity": "sha512-pGBcaDLMQ2pwJF2pm0UAi30rNcMzwsdvUSExfCrR4IPYsrGFYf/AFJVOOiaaG9JBbI9dPKu6TKo4n6SIMn0yWA==", + "requires": { + "express": "^4.17.2" + } + }, "@jambonz/promisify-redis": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@jambonz/promisify-redis/-/promisify-redis-0.0.6.tgz", @@ -5174,12 +5169,12 @@ } }, "@jambonz/stats-collector": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@jambonz/stats-collector/-/stats-collector-0.1.5.tgz", - "integrity": "sha512-Lrz0kQe4MtN2jCvKntpvHhKQFnn9Vw+tDQtaeYg4tqHAiNQeqcWG6E9r7yObvn4VnjPUkVLtgyf8E+1xqkiEYA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@jambonz/stats-collector/-/stats-collector-0.1.6.tgz", + "integrity": "sha512-Qk+kpeb2wravpj3OYPC4N3ML1qoAzARNLfKGZtJ05PTAtfWoZMPnyfPAM9EJHIiVfs2Lec3CXDjEpHna0mc9EA==", "requires": { - "debug": "^4.3.1", - "hot-shots": "^8.2.1" + "debug": "^4.3.2", + "hot-shots": "^8.5.0" } }, "@jambonz/time-series": { @@ -5389,9 +5384,9 @@ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, "aws-sdk": { - "version": "2.860.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.860.0.tgz", - "integrity": "sha512-BUBWw28PNDhRDnPEnXiPEvgTWD8Iyq5pl9lk/WhXC/vkACJ3aUVe+sicezI1/JQRjLrO3R6w7X20YknVWfAibA==", + "version": "2.1046.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1046.0.tgz", + "integrity": "sha512-ocwHclMXdIA+NWocUyvp9Ild3/zy2vr5mHp3mTyodf0WU5lzBE8PocCVLSWhMAXLxyia83xv2y5f5AzAcetbqA==", "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -5468,20 +5463,20 @@ } }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "dependencies": { "debug": { @@ -5504,11 +5499,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" } } }, @@ -5550,9 +5540,9 @@ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" }, "bytesish": { "version": "0.4.4", @@ -5678,18 +5668,11 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } + "safe-buffer": "5.2.1" } }, "content-type": { @@ -5715,9 +5698,9 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { "version": "1.0.6", @@ -5740,9 +5723,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" } @@ -6190,16 +6173,16 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -6213,13 +6196,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -6239,16 +6222,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6287,15 +6260,20 @@ "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==" }, "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fast-text-encoding": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==" }, + "fastify-warning": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", + "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6617,9 +6595,9 @@ } }, "hot-shots": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-8.3.0.tgz", - "integrity": "sha512-bdhBiiIMFhn9cXYJMtDKWM7O15iSLS14O5KetoHnyYOZdFr0A3cCtHA4byzkS3E72xFbqWFg4lqJ2EN/33J7UQ==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-8.5.2.tgz", + "integrity": "sha512-1CKCtbYU28KtRriRW+mdOZzKce0WPqU0FOYE4bYs3gD1bFpOrYzQDXfQ09Qz9dJPEltasDOGhFKiYaiuW/j9Dg==", "requires": { "unix-dgram": "2.0.x" } @@ -6631,22 +6609,15 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } + "toidentifier": "1.0.1" } }, "https-proxy-agent": { @@ -7220,9 +7191,9 @@ } }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "natural-compare": { @@ -7487,15 +7458,16 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "pino": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.11.1.tgz", - "integrity": "sha512-PoDR/4jCyaP1k2zhuQ4N0NuhaMtei+C9mUHBRRJQujexl/bq3JkeL2OC23ada6Np3zeUMHbO4TGzY2D/rwZX3w==", + "version": "6.13.3", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", + "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", "requires": { "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.7", + "fast-safe-stringify": "^2.0.8", + "fastify-warning": "^0.2.0", "flatstr": "^1.0.12", "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.1", + "quick-format-unescaped": "^4.0.3", "sonic-boom": "^1.0.2" } }, @@ -7605,9 +7577,9 @@ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "quick-format-unescaped": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", - "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" }, "range-parser": { "version": "1.2.1", @@ -7615,12 +7587,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -7794,9 +7766,9 @@ } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -7805,9 +7777,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -7829,9 +7801,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, @@ -7841,14 +7813,14 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -7858,9 +7830,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shebang-command": { "version": "2.0.0", @@ -8126,9 +8098,9 @@ "dev": true }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "type-check": { "version": "0.4.0", diff --git a/package.json b/package.json index 4c78112..bbfad05 100644 --- a/package.json +++ b/package.json @@ -25,23 +25,24 @@ "jslint": "eslint app.js lib" }, "dependencies": { - "@jambonz/db-helpers": "^0.6.12", + "@jambonz/db-helpers": "^0.6.14", "@jambonz/http-authenticator": "^0.2.0", + "@jambonz/http-health-check": "^0.0.1", "@jambonz/realtimedb-helpers": "^0.4.8", "@jambonz/rtpengine-utils": "^0.1.17", - "@jambonz/stats-collector": "^0.1.5", + "@jambonz/stats-collector": "^0.1.6", "@jambonz/time-series": "^0.1.5", - "aws-sdk": "^2.848.0", + "aws-sdk": "^2.1036.0", "bent": "^7.3.12", - "express": "^4.17.1", - "verify-aws-sns-signature": "^0.0.6", - "xml2js": "^0.4.23", "cidr-matcher": "^2.1.1", - "debug": "^4.3.1", + "debug": "^4.3.3", "drachtio-fn-b2b-sugar": "0.0.12", "drachtio-srf": "^4.4.59", - "pino": "^6.8.0", - "rtpengine-client": "^0.2.0" + "express": "^4.17.1", + "pino": "^7.4.1", + "rtpengine-client": "^0.2.0", + "verify-aws-sns-signature": "^0.0.6", + "xml2js": "^0.4.23" }, "devDependencies": { "clear-module": "^4.1.1",