diff --git a/package.json b/package.json index 75e0e86d..8f2696f1 100644 --- a/package.json +++ b/package.json @@ -1,85 +1,85 @@ { - "name": "draupnir", - "version": "1.84.0", - "description": "A moderation tool for Matrix", - "main": "lib/index.js", - "repository": "git@github.com:MTRNord/Draupnir.git", - "author": "Gnuxie", - "license": "SEE LICENSE IN LICENSE", - "private": true, - "scripts": { - "build": "tsc", - "postbuild": "yarn remove-tests-from-lib && yarn describe-version", - "describe-version": "(git describe > version.txt.tmp && mv version.txt.tmp version.txt) || true && rm -f version.txt.tmp", - "remove-tests-from-lib": "rm -rf lib/test/ && cp -r lib/src/* lib/ && rm -rf lib/src/", - "lint": "tslint --project ./tsconfig.json -t stylish", - "start:dev": "yarn build && node --async-stack-traces lib/index.js", - "test": "ts-mocha --project ./tsconfig.json test/commands/**/*.ts", - "test:integration": "NODE_ENV=harness ts-mocha --async-stack-traces --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json \"test/integration/**/*Test.ts\"", - "test:integration:single": "NODE_ENV=harness npx ts-mocha --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json", - "test:appservice:integration": "NODE_ENV=harness ts-mocha --async-stack-traces --timeout 300000 --project ./tsconfig.json \"test/appservice/integration/**/*Test.ts\"", - "test:appservice:integration:single": "NODE_ENV=harness npx ts-mocha --timeout 300000 --project ./tsconfig.json", - "test:manual": "NODE_ENV=harness ts-node test/integration/manualLaunchScript.ts", - "version": "sed -i '/# version automated/s/[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][^\"]*/'$npm_package_version'/' synapse_antispam/setup.py && git add synapse_antispam/setup.py && cat synapse_antispam/setup.py" - }, - "devDependencies": { - "@types/config": "^3.3.0", - "@types/crypto-js": "^4.0.2", - "@types/express": "^4.17.13", - "@types/html-to-text": "^8.0.1", - "@types/humanize-duration": "^3.27.1", - "@types/js-yaml": "^4.0.5", - "@types/jsdom": "^16.2.11", - "@types/mocha": "^9.0.0", - "@types/nedb": "^1.8.12", - "@types/node": "^18.16.7", - "@types/pg": "^8.6.5", - "@types/request": "^2.48.8", - "@types/shell-quote": "1.7.1", - "crypto-js": "^4.1.1", - "eslint": "^7.32", - "expect": "^27.0.6", - "mocha": "^9.0.1", - "ts-mocha": "^9.0.2", - "tslint": "^6.1.3", - "typescript": "^5.1.6", - "typescript-formatter": "^7.2" - }, - "dependencies": { - "@opentelemetry/api": "^1.4.1", - "@opentelemetry/auto-instrumentations-node": "^0.38.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.41.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.41.0", - "@opentelemetry/sdk-metrics": "^1.15.0", - "@opentelemetry/sdk-node": "^0.41.0", - "@opentelemetry/sdk-trace-base": "^1.15.0", - "@sentry/node": "^7.17.2", - "@sentry/tracing": "^7.17.2", - "await-lock": "^2.2.2", - "body-parser": "^1.20.1", - "config": "^3.3.8", - "express": "^4.17", - "html-to-text": "^8.0.0", - "humanize-duration": "^3.27.1", - "humanize-duration-ts": "^2.1.1", - "js-yaml": "^4.1.0", - "jsdom": "^16.6.0", - "matrix-appservice-bridge": "8.1.2", - "parse-duration": "^1.0.2", - "pg": "^8.8.0", - "shell-quote": "^1.7.3", - "ulidx": "^0.3.0", - "yaml": "^2.2.2" - }, - "overrides": { - "matrix-appservice-bridge": { - "matrix-appservice": "MTRNord/matrix-appservice-node#669af793863f12429f30854dd104673794884abe" - } - }, - "resolutions": { - "matrix-appservice": "https://github.com/MTRNord/matrix-appservice-node.git#669af793863f12429f30854dd104673794884abe" - }, - "engines": { - "node": ">=18.0.0" + "name": "draupnir", + "version": "1.84.0", + "description": "A moderation tool for Matrix", + "main": "lib/index.js", + "repository": "https://github.com/MTRNord/Draupnir.git", + "author": "Gnuxie", + "license": "SEE LICENSE IN LICENSE", + "private": true, + "scripts": { + "build": "tsc", + "postbuild": "yarn remove-tests-from-lib && yarn describe-version", + "describe-version": "(git describe > version.txt.tmp && mv version.txt.tmp version.txt) || true && rm -f version.txt.tmp", + "remove-tests-from-lib": "rm -rf lib/test/ && cp -r lib/src/* lib/ && rm -rf lib/src/", + "lint": "tslint --project ./tsconfig.json -t stylish", + "start:dev": "yarn build && node --async-stack-traces lib/index.js", + "test": "ts-mocha --project ./tsconfig.json test/commands/**/*.ts", + "test:integration": "NODE_ENV=harness ts-mocha --async-stack-traces --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json \"test/integration/**/*Test.ts\"", + "test:integration:single": "NODE_ENV=harness npx ts-mocha --require test/integration/fixtures.ts --timeout 300000 --project ./tsconfig.json", + "test:appservice:integration": "NODE_ENV=harness ts-mocha --async-stack-traces --timeout 300000 --project ./tsconfig.json \"test/appservice/integration/**/*Test.ts\"", + "test:appservice:integration:single": "NODE_ENV=harness npx ts-mocha --timeout 300000 --project ./tsconfig.json", + "test:manual": "NODE_ENV=harness ts-node test/integration/manualLaunchScript.ts", + "version": "sed -i '/# version automated/s/[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][^\"]*/'$npm_package_version'/' synapse_antispam/setup.py && git add synapse_antispam/setup.py && cat synapse_antispam/setup.py" + }, + "devDependencies": { + "@types/config": "^3.3.0", + "@types/crypto-js": "^4.0.2", + "@types/express": "^4.17.13", + "@types/html-to-text": "^8.0.1", + "@types/humanize-duration": "^3.27.1", + "@types/js-yaml": "^4.0.5", + "@types/jsdom": "^16.2.11", + "@types/mocha": "^9.0.0", + "@types/nedb": "^1.8.12", + "@types/node": "^18.16.7", + "@types/pg": "^8.6.5", + "@types/request": "^2.48.8", + "@types/shell-quote": "1.7.1", + "crypto-js": "^4.1.1", + "eslint": "^7.32", + "expect": "^27.0.6", + "mocha": "^9.0.1", + "ts-mocha": "^9.0.2", + "tslint": "^6.1.3", + "typescript": "^5.1.6", + "typescript-formatter": "^7.2" + }, + "dependencies": { + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/auto-instrumentations-node": "^0.38.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.41.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.41.0", + "@opentelemetry/sdk-metrics": "^1.15.0", + "@opentelemetry/sdk-node": "^0.41.0", + "@opentelemetry/sdk-trace-base": "^1.15.0", + "@sentry/node": "^7.17.2", + "@sentry/tracing": "^7.17.2", + "await-lock": "^2.2.2", + "body-parser": "^1.20.1", + "config": "^3.3.8", + "express": "^4.17", + "html-to-text": "^8.0.0", + "humanize-duration": "^3.27.1", + "humanize-duration-ts": "^2.1.1", + "js-yaml": "^4.1.0", + "jsdom": "^16.6.0", + "matrix-appservice-bridge": "8.1.2", + "parse-duration": "^1.0.2", + "pg": "^8.8.0", + "shell-quote": "^1.7.3", + "ulidx": "^0.3.0", + "yaml": "^2.2.2" + }, + "overrides": { + "matrix-appservice-bridge": { + "matrix-appservice": "MTRNord/matrix-appservice-node#669af793863f12429f30854dd104673794884abe" } + }, + "resolutions": { + "matrix-appservice": "https://github.com/MTRNord/matrix-appservice-node.git#669af793863f12429f30854dd104673794884abe" + }, + "engines": { + "node": ">=18.0.0" + } } diff --git a/src/appservice/AppService.ts b/src/appservice/AppService.ts index 67bd935b..1f82b4f9 100644 --- a/src/appservice/AppService.ts +++ b/src/appservice/AppService.ts @@ -37,6 +37,7 @@ import { SOFTWARE_VERSION } from "../config"; import { independentTrace, trace } from "../utils"; import { DRAUPNIR_RESULT, DRAUPNIR_TRACING_ATTRIBUTES } from "../tracer"; import * as api from '@opentelemetry/api' +import { Registry } from 'prom-client'; const log = new Logger("AppService"); @@ -91,8 +92,12 @@ export class MjolnirAppService { const accessControlListId = await bridge.getBot().getClient().resolveRoom(config.adminRoom); const accessControl = await AccessControl.setupAccessControl(accessControlListId, bridge); // Activate /metrics endpoint for Prometheus + + // This should happen automatically but in testing this didn't happen in the docker image setBridgeVersion(SOFTWARE_VERSION); - const prometheus = bridge.getPrometheusMetrics(false); + + // Due to the way the tests and this prom library works we need to explicitly create a new one each time. + const prometheus = bridge.getPrometheusMetrics(true, new Registry()); const instanceCountGauge = prometheus.addGauge({ name: "draupnir_instances", help: "Count of Draupnir Instances", diff --git a/src/appservice/MjolnirManager.ts b/src/appservice/MjolnirManager.ts index 77df723e..63fbcc7a 100644 --- a/src/appservice/MjolnirManager.ts +++ b/src/appservice/MjolnirManager.ts @@ -14,6 +14,7 @@ import { MatrixRoomReference } from "../commands/interface-manager/MatrixRoomRef import { Gauge } from "prom-client"; import { trace } from "../utils"; import * as api from '@opentelemetry/api'; +import { decrementGaugeValue, incrementGaugeValue } from "../utils"; const log = new Logger('MjolnirManager'); @@ -76,18 +77,9 @@ export class MjolnirManager { await managedMjolnir.start(); this.mjolnirs.set(mxid, managedMjolnir); this.unstartedMjolnirs.delete(mxid); - // @ts-ignore - if (this.instanceCountGauge._getValue({ status: "offline", uuid: localPart })) { - this.instanceCountGauge.dec({ status: "offline", uuid: localPart }); - } - // @ts-ignore - if (this.instanceCountGauge._getValue({ status: "disabled", uuid: localPart })) { - this.instanceCountGauge.dec({ status: "disabled", uuid: localPart }); - } - // @ts-ignore - if (!this.instanceCountGauge._getValue({ status: "online", uuid: localPart })) { - this.instanceCountGauge.inc({ status: "online", uuid: localPart }); - } + incrementGaugeValue(this.instanceCountGauge, "offline", localPart); + decrementGaugeValue(this.instanceCountGauge, "disabled", localPart); + incrementGaugeValue(this.instanceCountGauge, "online", localPart); return managedMjolnir; } @@ -222,16 +214,11 @@ export class MjolnirManager { // Don't await, we don't want to clobber initialization just because we can't tell someone they're no longer allowed. mjIntent.matrixClient.sendNotice(mjolnirRecord.management_room, `Your mjolnir has been disabled by the administrator: ${access.rule?.reason ?? "no reason supplied"}`); this.reportUnstartedMjolnir(UnstartedMjolnir.FailCode.Unauthorized, access.outcome, mjolnirRecord, mjIntent.userId); - // @ts-ignore - if (this.instanceCountGauge._getValue({ status: "online", uuid: mjolnirRecord.local_part })) { - this.instanceCountGauge.dec({ status: "online", uuid: mjolnirRecord.local_part }); - } - // @ts-ignore - if (!this.instanceCountGauge._getValue({ status: "disabled", uuid: mjolnirRecord.local_part })) { - this.instanceCountGauge.inc({ status: "disabled", uuid: mjolnirRecord.local_part }); - } + decrementGaugeValue(this.instanceCountGauge, "online", mjolnirRecord.local_part); + incrementGaugeValue(this.instanceCountGauge, "disabled", mjolnirRecord.local_part); } else { - await this.makeInstance(mjolnirRecord.local_part, + await this.makeInstance( + mjolnirRecord.local_part, mjolnirRecord.owner, mjolnirRecord.management_room, mjIntent.matrixClient, @@ -241,14 +228,8 @@ export class MjolnirManager { // Don't await, we don't want to clobber initialization if this fails. mjIntent.matrixClient.sendNotice(mjolnirRecord.management_room, `Your mjolnir could not be started. Please alert the administrator`); this.reportUnstartedMjolnir(UnstartedMjolnir.FailCode.StartError, e, mjolnirRecord, mjIntent.userId); - // @ts-ignore - if (this.instanceCountGauge._getValue({ status: "online", uuid: mjolnirRecord.local_part })) { - this.instanceCountGauge.dec({ status: "online", uuid: mjolnirRecord.local_part }); - } - // @ts-ignore - if (!this.instanceCountGauge._getValue({ status: "offline", uuid: mjolnirRecord.local_part })) { - this.instanceCountGauge.inc({ status: "offline", uuid: mjolnirRecord.local_part }); - } + decrementGaugeValue(this.instanceCountGauge, "online", mjolnirRecord.local_part); + incrementGaugeValue(this.instanceCountGauge, "offline", mjolnirRecord.local_part); }); } } diff --git a/src/commands/interface-manager/MatrixHelpRenderer.tsx b/src/commands/interface-manager/MatrixHelpRenderer.tsx index 547c9e1f..9a91cbc1 100644 --- a/src/commands/interface-manager/MatrixHelpRenderer.tsx +++ b/src/commands/interface-manager/MatrixHelpRenderer.tsx @@ -64,10 +64,13 @@ export function renderCommandHelp(command: InterfaceCommand): stri } function renderTableHelp(table: CommandTable): DocumentNode { - // FIXME: is it possible to force case of table names? + let tableName = table.name; + if (typeof table.name === 'string') { + tableName = table.name.charAt(0).toUpperCase() + table.name.slice(1); + } return
- {table.name} commands: + {tableName} commands: {table.getExportedCommands().map(renderCommandSummary)} {table.getImportedTables().map(renderTableHelp)}
diff --git a/src/utils.ts b/src/utils.ts index a43567bd..9e0030aa 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -42,6 +42,7 @@ import * as _ from '@sentry/tracing'; // Performing the import activates tracing import ManagementRoomOutput from "./ManagementRoomOutput"; import { IConfig } from "./config"; import { MatrixSendClient } from "./MatrixEmitter"; +import { Gauge } from "prom-client"; // Define a few aliases to simplify parsing durations. @@ -71,6 +72,42 @@ export function setToArray(set: Set): T[] { return arr; } +/** + * This increments a prometheus gauge. Used in the Appservice MjolnirManager. + * + * The ts-ignore is mandatory since we access a private method due to lack of a public one. + * + * See https://github.com/Gnuxie/Draupnir/pull/70#discussion_r1299188922 + * + * @param gauge The Gauge to be modified + * @param status The status value that should be modified + * @param uuid The UUID of the instance. (Usually the localPart) + */ +export function incrementGaugeValue(gauge: Gauge<"status" | "uuid">, status: "offline" | "disabled" | "online", uuid: string) { + // @ts-ignore + if (!gauge._getValue({ status: status, uuid: uuid })) { + gauge.inc({ status: status, uuid: uuid }); + } +} + +/** + * This decrements a prometheus gauge. Used in the Appservice MjolnirManager. + * + * The ts-ignore is mandatory since we access a private method due to lack of a public one. + * + * See https://github.com/Gnuxie/Draupnir/pull/70#discussion_r1299188922 + * + * @param gauge The Gauge to be modified + * @param status The status value that should be modified + * @param uuid The UUID of the instance. (Usually the localPart) + */ +export function decrementGaugeValue(gauge: Gauge<"status" | "uuid">, status: "offline" | "disabled" | "online", uuid: string) { + // @ts-ignore + if (gauge._getValue({ status: status, uuid: uuid })) { + gauge.dec({ status: status, uuid: uuid }); + } +} + export function isTrueJoinEvent(event: any): boolean { const membership = event['content']['membership'] || 'join'; let prevMembership = "leave"; diff --git a/yarn.lock b/yarn.lock index 950c9bcf..bed73b04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1609,22 +1609,6 @@ bluebird@^3.5.0: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.19.2: - version "1.19.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" - type-is "~1.6.18" - body-parser@1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" @@ -1888,16 +1872,16 @@ cookie-signature@1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.2, cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - cookie@0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" @@ -1994,21 +1978,11 @@ depd@2.0.0, depd@~2.0.0: resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - destroy@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - integrity sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg== - diff-sequences@^27.0.6: version "27.5.1" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" @@ -2314,43 +2288,7 @@ express-rate-limit@^6.7.0: resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.7.0.tgz" integrity sha512-vhwIdRoqcYB/72TK3tRZI+0ttS8Ytrk24GfmsxDXK9o9IhHNO5bXRiXQSExPQ4GbaE5tvIS7j1SGrxsuWs+sGA== -express@^4.17: - version "4.17.3" - resolved "https://registry.npmjs.org/express/-/express-4.17.3.tgz" - integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.19.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.4.2" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.9.7" - range-parser "~1.2.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" - vary "~1.1.2" - -express@^4.18.1: +express@^4.17, express@^4.18.1: version "4.18.1" resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== @@ -2456,19 +2394,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-up@5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" @@ -2791,17 +2716,6 @@ htmlparser2@^6.0.0, htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-errors@1.8.1: - 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.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -3363,7 +3277,7 @@ make-error@^1.1.1: matrix-appservice-bridge@8.1.2: version "8.1.2" - resolved "https://registry.npmjs.org/matrix-appservice-bridge/-/matrix-appservice-bridge-8.1.2.tgz" + resolved "https://registry.yarnpkg.com/matrix-appservice-bridge/-/matrix-appservice-bridge-8.1.2.tgz#30953a4599533fe61a0c37bd5500b654cd236e30" integrity sha512-OTQVEuYgsnlg7fBFASCaiYHgwi5+I/+vxwjOmR4y9n5ESKXoqI465bN+6zvW8MazdNfBl6NgZVWSm4DZohz8Zw== dependencies: "@alloc/quick-lru" "^5.2.0" @@ -3388,9 +3302,9 @@ matrix-appservice-bridge@8.1.2: winston "^3.3.3" winston-daily-rotate-file "^4.5.1" -matrix-appservice@^1.1.0, "matrix-appservice@https://github.com/MTRNord/matrix-appservice-node.git#78e0cf8f025cea22236c6c12553794bc6dd1bb07": +matrix-appservice@^1.1.0, "matrix-appservice@https://github.com/MTRNord/matrix-appservice-node.git#669af793863f12429f30854dd104673794884abe": version "2.0.0" - resolved "https://github.com/MTRNord/matrix-appservice-node.git#78e0cf8f025cea22236c6c12553794bc6dd1bb07" + resolved "https://github.com/MTRNord/matrix-appservice-node.git#669af793863f12429f30854dd104673794884abe" dependencies: "@opentelemetry/api" "^1.4.1" "@opentelemetry/shim-opentracing" "^1.15.2" @@ -4037,11 +3951,6 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@6.9.7: - version "6.9.7" - resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - qs@~6.5.2: version "6.5.3" resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" @@ -4072,16 +3981,6 @@ range-parser@~1.2.1: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw-body@2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" @@ -4264,25 +4163,6 @@ semver@^7.2.1, semver@^7.5.1, semver@^7.5.4: dependencies: lru-cache "^6.0.0" -send@0.17.2: - 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" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "1.8.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" @@ -4309,16 +4189,6 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.14.2: - 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.2" - serve-static@1.15.0: version "1.15.0" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" @@ -4456,11 +4326,6 @@ statuses@2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz"