From 9fc71a3412cd4a96dacb8f90cf5c2640ebed456b Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Thu, 9 Jun 2022 20:44:57 -0500 Subject: [PATCH] Remove `matrix-bot-sdk` usage in tests (#15) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove `matrix-bot-sdk` usage in tests because it didn't have timestamp massaging `?ts` and it's not really necessary to rely on since we can just call the API directly 🤷. `matrix-bot-sdk` is also very annoying having to build rust crypto packages. We're now using direct `fetch` requests against the Matrix API and lightweight `client` object. All 3 current tests pass ✅ --- package-lock.json | 1524 +------------------ package.json | 2 - server/fetch-events-in-range.js | 2 +- server/lib/config.js | 2 +- server/lib/fetch-endpoint.js | 6 + shared/hydrogen-vm-render-script.js | 2 +- test/README.md | 16 +- test/client-utils.js | 211 +++ test/dockerfiles/Synapse.Dockerfile | 2 +- test/dockerfiles/synapse/homeserver.yaml | 8 + test/e2e-tests.js | 345 ++--- test/fixtures/friction_between_surfaces.jpg | Bin 0 -> 17471 bytes 12 files changed, 467 insertions(+), 1653 deletions(-) create mode 100644 test/client-utils.js create mode 100644 test/fixtures/friction_between_surfaces.jpg diff --git a/package-lock.json b/package-lock.json index b04f160..2143f0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,6 @@ "express": "^4.17.2", "hydrogen-view-sdk": "^0.0.4", "linkedom": "^0.14.1", - "matrix-bot-sdk": "^0.5.19", - "matrix-js-sdk": "^15.5.2", "matrix-public-archive-shared": "file:./shared/", "nconf": "^0.11.3", "node-fetch": "^2.6.7", @@ -34,17 +32,6 @@ "node": ">=16.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -167,78 +154,6 @@ "node": ">=6" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/@types/node": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", - "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -288,6 +203,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -368,59 +284,17 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, "node_modules/async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/base64-arraybuffer": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", @@ -429,30 +303,6 @@ "node": ">= 0.6.0" } }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/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/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -462,11 +312,6 @@ "node": ">=8" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/body-parser": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", @@ -536,28 +381,12 @@ "node": ">=8" } }, - "node_modules/browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=", - "engines": [ - "node" - ] - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { - "base-x": "^3.0.2" - } - }, "node_modules/bytes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", @@ -629,15 +458,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -741,17 +566,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -807,11 +621,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -866,17 +675,6 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -924,28 +722,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -1054,15 +836,6 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1479,6 +1252,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -1834,23 +1608,11 @@ "node": ">= 0.10.0" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-diff": { "version": "1.2.0", @@ -1861,7 +1623,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -1954,27 +1717,6 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2043,14 +1785,6 @@ "node": ">=6" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -2083,11 +1817,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/global-dirs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", @@ -2143,7 +1872,8 @@ "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "node_modules/growl": { "version": "1.10.5", @@ -2154,27 +1884,6 @@ "node": ">=4.x" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2191,6 +1900,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -2204,19 +1914,11 @@ "node": ">=8" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } @@ -2226,54 +1928,6 @@ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" }, - "node_modules/html-to-text": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-6.0.0.tgz", - "integrity": "sha512-r0KNC5aqCAItsjlgtirW6RW25c92Ee3ybQj8z//4Sl4suE3HIPqM4deGpYCUJULLjtVPEP1+Ma+1ZeX1iMsCiA==", - "dependencies": { - "deepmerge": "^4.2.2", - "he": "^1.2.0", - "htmlparser2": "^4.1.0", - "lodash": "^4.17.20", - "minimist": "^1.2.5" - }, - "bin": { - "html-to-text": "bin/cli.js" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/html-to-text/node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dependencies": { - "domelementtype": "^2.0.1" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/html-to-text/node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "node_modules/htmlencode": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/htmlencode/-/htmlencode-0.0.4.tgz", - "integrity": "sha1-9+LWr74YqHp45jujMI51N2Z0Dj8=" - }, "node_modules/htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", @@ -2324,20 +1978,6 @@ "node": ">= 0.6" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/hydrogen-view-sdk": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/hydrogen-view-sdk/-/hydrogen-view-sdk-0.0.4.tgz", @@ -2569,23 +2209,11 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -2611,11 +2239,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2628,26 +2251,17 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -2655,25 +2269,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -2735,11 +2330,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2762,33 +2352,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/lowdb": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", - "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", - "dependencies": { - "graceful-fs": "^4.1.3", - "is-promise": "^2.1.0", - "lodash": "4", - "pify": "^3.0.0", - "steno": "^0.4.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -2802,6 +2365,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -2824,53 +2388,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matrix-bot-sdk": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/matrix-bot-sdk/-/matrix-bot-sdk-0.5.19.tgz", - "integrity": "sha512-RIPyvQPkOVp2yTKeDgp5rcn6z/DiKdHb6E8c69K+utai8ypRGtfDRj0PGqP+1XzqC9Wb1OFrESCUB5t0ffdC9g==", - "dependencies": { - "@types/express": "^4.17.7", - "chalk": "^4.1.0", - "express": "^4.17.1", - "glob-to-regexp": "^0.4.1", - "hash.js": "^1.1.7", - "html-to-text": "^6.0.0", - "htmlencode": "^0.0.4", - "lowdb": "^1.0.0", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "morgan": "^1.10.0", - "request": "^2.88.2", - "request-promise": "^4.2.6", - "sanitize-html": "^2.3.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/matrix-events-sdk": { - "version": "0.0.1-beta.7", - "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz", - "integrity": "sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA==" - }, - "node_modules/matrix-js-sdk": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-15.5.2.tgz", - "integrity": "sha512-ohHTQs+w2gL3D+y4fL0yjahAyUUahDyvcIJoo+L+szmzqSmCJ65J14BYgIUmVcTd2ZMUzgAKVDq/LcfQd23FyA==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "another-json": "^0.2.0", - "browser-request": "^0.3.3", - "bs58": "^4.0.1", - "content-type": "^1.0.4", - "loglevel": "^1.7.1", - "matrix-events-sdk": "^0.0.1-beta.6", - "p-retry": "^4.5.0", - "qs": "^6.9.6", - "request": "^2.88.2", - "unhomoglyph": "^1.0.6" - } - }, "node_modules/matrix-public-archive-shared": { "resolved": "shared", "link": true @@ -2947,11 +2464,6 @@ "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -2967,18 +2479,8 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/mocha": { "version": "9.2.1", @@ -3091,29 +2593,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3123,6 +2602,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3295,14 +2775,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -3314,14 +2786,6 @@ "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3387,18 +2851,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dependencies": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -3426,11 +2878,6 @@ "node": ">=6" } }, - "node_modules/parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -3477,15 +2924,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -3499,18 +2942,11 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, "node_modules/postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3584,11 +3020,6 @@ "node": ">= 0.10" } }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -3609,6 +3040,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, "engines": { "node": ">=6" } @@ -3709,11 +3141,6 @@ "node": ">=8.10.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -3750,77 +3177,6 @@ "node": ">=8" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dependencies": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3864,14 +3220,6 @@ "lowercase-keys": "^1.0.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3926,37 +3274,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/sanitize-html": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.0.tgz", - "integrity": "sha512-jfQelabOn5voO7FAfnQF7v+jsA6z9zC/O4ec0z3E35XPEtHYJT/OdUziVWlKW4irCr2kXaQAyXTXDHWAibg1tA==", - "dependencies": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^6.0.0", - "is-plain-object": "^5.0.0", - "parse-srcset": "^1.0.2", - "postcss": "^8.3.11" - } - }, - "node_modules/sanitize-html/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, "node_modules/secure-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", @@ -4070,30 +3387,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4106,22 +3400,6 @@ "node": ">= 0.6" } }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=", - "dependencies": { - "graceful-fs": "^4.1.3" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4162,6 +3440,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4228,39 +3507,11 @@ "nodetouch": "bin/nodetouch.js" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -4317,11 +3568,6 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "node_modules/unhomoglyph": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unhomoglyph/-/unhomoglyph-1.0.6.tgz", - "integrity": "sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==" - }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -4389,6 +3635,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -4418,15 +3665,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -4441,19 +3679,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "node_modules/vite": { "version": "2.9.6", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.6.tgz", @@ -4601,7 +3826,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yargs": { "version": "16.2.0", @@ -4658,14 +3884,6 @@ "shared": {} }, "dependencies": { - "@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -4759,78 +3977,6 @@ "defer-to-connect": "^1.0.1" } }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "@types/node": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.19.tgz", - "integrity": "sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -4869,6 +4015,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4930,92 +4077,28 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "base64-arraybuffer": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==" }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "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==" - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "body-parser": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", @@ -5073,25 +4156,12 @@ "fill-range": "^7.0.1" } }, - "browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, "bytes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", @@ -5141,15 +4211,11 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5226,14 +4292,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5277,11 +4335,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5321,14 +4374,6 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -5364,22 +4409,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -5458,15 +4493,6 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5683,7 +4709,8 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "eslint": { "version": "8.8.0", @@ -5935,20 +4962,11 @@ "vary": "~1.1.2" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-diff": { "version": "1.2.0", @@ -5959,7 +4977,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -6031,21 +5050,6 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6095,14 +5099,6 @@ "pump": "^3.0.0" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -6126,11 +5122,6 @@ "is-glob": "^4.0.3" } }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "global-dirs": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", @@ -6171,7 +5162,8 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "growl": { "version": "1.10.5", @@ -6179,20 +5171,6 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -6205,7 +5183,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-yarn": { "version": "2.1.0", @@ -6213,63 +5192,17 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, "html-escaper": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==" }, - "html-to-text": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-6.0.0.tgz", - "integrity": "sha512-r0KNC5aqCAItsjlgtirW6RW25c92Ee3ybQj8z//4Sl4suE3HIPqM4deGpYCUJULLjtVPEP1+Ma+1ZeX1iMsCiA==", - "requires": { - "deepmerge": "^4.2.2", - "he": "^1.2.0", - "htmlparser2": "^4.1.0", - "lodash": "^4.17.20", - "minimist": "^1.2.5" - }, - "dependencies": { - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - } - } - }, - "htmlencode": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/htmlencode/-/htmlencode-0.0.4.tgz", - "integrity": "sha1-9+LWr74YqHp45jujMI51N2Z0Dj8=" - }, "htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", @@ -6306,16 +5239,6 @@ "toidentifier": "1.0.1" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "hydrogen-view-sdk": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/hydrogen-view-sdk/-/hydrogen-view-sdk-0.0.4.tgz", @@ -6481,20 +5404,11 @@ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-unicode-supported": { "version": "0.1.0", @@ -6514,11 +5428,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -6528,26 +5437,17 @@ "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -6555,22 +5455,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -6620,11 +5504,6 @@ "p-locate": "^5.0.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -6641,23 +5520,6 @@ "is-unicode-supported": "^0.1.0" } }, - "loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - }, - "lowdb": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", - "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", - "requires": { - "graceful-fs": "^4.1.3", - "is-promise": "^2.1.0", - "lodash": "4", - "pify": "^3.0.0", - "steno": "^0.4.1" - } - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -6668,6 +5530,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -6681,50 +5544,6 @@ "semver": "^6.0.0" } }, - "matrix-bot-sdk": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/matrix-bot-sdk/-/matrix-bot-sdk-0.5.19.tgz", - "integrity": "sha512-RIPyvQPkOVp2yTKeDgp5rcn6z/DiKdHb6E8c69K+utai8ypRGtfDRj0PGqP+1XzqC9Wb1OFrESCUB5t0ffdC9g==", - "requires": { - "@types/express": "^4.17.7", - "chalk": "^4.1.0", - "express": "^4.17.1", - "glob-to-regexp": "^0.4.1", - "hash.js": "^1.1.7", - "html-to-text": "^6.0.0", - "htmlencode": "^0.0.4", - "lowdb": "^1.0.0", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "morgan": "^1.10.0", - "request": "^2.88.2", - "request-promise": "^4.2.6", - "sanitize-html": "^2.3.2" - } - }, - "matrix-events-sdk": { - "version": "0.0.1-beta.7", - "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz", - "integrity": "sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA==" - }, - "matrix-js-sdk": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-15.5.2.tgz", - "integrity": "sha512-ohHTQs+w2gL3D+y4fL0yjahAyUUahDyvcIJoo+L+szmzqSmCJ65J14BYgIUmVcTd2ZMUzgAKVDq/LcfQd23FyA==", - "requires": { - "@babel/runtime": "^7.12.5", - "another-json": "^0.2.0", - "browser-request": "^0.3.3", - "bs58": "^4.0.1", - "content-type": "^1.0.4", - "loglevel": "^1.7.1", - "matrix-events-sdk": "^0.0.1-beta.6", - "p-retry": "^4.5.0", - "qs": "^6.9.6", - "request": "^2.88.2", - "unhomoglyph": "^1.0.6" - } - }, "matrix-public-archive-shared": { "version": "file:shared" }, @@ -6776,11 +5595,6 @@ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -6793,12 +5607,8 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "mocha": { "version": "9.2.1", @@ -6881,25 +5691,6 @@ } } }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6908,7 +5699,8 @@ "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -7025,11 +5817,6 @@ "boolbase": "^1.0.0" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -7038,11 +5825,6 @@ "ee-first": "1.1.1" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7090,15 +5872,6 @@ "p-limit": "^3.0.2" } }, - "p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - } - }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -7120,11 +5893,6 @@ "callsites": "^3.0.0" } }, - "parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -7159,15 +5927,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "picomatch": { "version": "2.3.1", @@ -7175,15 +5939,11 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, "postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "dev": true, "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -7226,11 +5986,6 @@ "ipaddr.js": "1.9.1" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -7250,7 +6005,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "pupa": { "version": "2.1.1", @@ -7326,11 +6082,6 @@ "picomatch": "^2.2.1" } }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -7355,59 +6106,6 @@ "rc": "^1.2.8" } }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - } - } - }, - "request-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", - "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7439,11 +6137,6 @@ "lowercase-keys": "^1.0.0" } }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -7472,32 +6165,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sanitize-html": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.0.tgz", - "integrity": "sha512-jfQelabOn5voO7FAfnQF7v+jsA6z9zC/O4ec0z3E35XPEtHYJT/OdUziVWlKW4irCr2kXaQAyXTXDHWAibg1tA==", - "requires": { - "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "htmlparser2": "^6.0.0", - "is-plain-object": "^5.0.0", - "parse-srcset": "^1.0.2", - "postcss": "^8.3.11" - }, - "dependencies": { - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, "secure-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", @@ -7594,42 +6261,14 @@ "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=", - "requires": { - "graceful-fs": "^4.1.3" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7658,6 +6297,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -7703,33 +6343,11 @@ "nopt": "~1.0.10" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7774,11 +6392,6 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "unhomoglyph": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unhomoglyph/-/unhomoglyph-1.0.6.tgz", - "integrity": "sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==" - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -7830,6 +6443,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -7853,11 +6467,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -7869,16 +6478,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vite": { "version": "2.9.6", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.6.tgz", @@ -7978,7 +6577,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index b38f08c..bab172c 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,6 @@ "express": "^4.17.2", "hydrogen-view-sdk": "^0.0.4", "linkedom": "^0.14.1", - "matrix-bot-sdk": "^0.5.19", - "matrix-js-sdk": "^15.5.2", "matrix-public-archive-shared": "file:./shared/", "nconf": "^0.11.3", "node-fetch": "^2.6.7", diff --git a/server/fetch-events-in-range.js b/server/fetch-events-in-range.js index 5b2d07f..f8cca37 100644 --- a/server/fetch-events-in-range.js +++ b/server/fetch-events-in-range.js @@ -16,7 +16,7 @@ assert(matrixServerUrl); // Consider this scenario: dayStart(fromTs) <---- msg1 <- msg2 <-- msg3 <---- dayEnd(toTs) // - ❌ If we start from dayStart and look backwards, we will find nothing. // - ❌ If we start from dayStart and look forwards, we will find msg1, but federated backfill won't be able to paginate forwards -// - ✅ If we start from dayEnd and look backwards, we will msg3 +// - ✅ If we start from dayEnd and look backwards, we will find msg3 // - ❌ If we start from dayEnd and look forwards, we will find nothing // // Returns events in reverse-chronological order. diff --git a/server/lib/config.js b/server/lib/config.js index e2d3cd0..904477c 100644 --- a/server/lib/config.js +++ b/server/lib/config.js @@ -20,7 +20,7 @@ function configureNodeEnv() { } const nodeEnv = configureNodeEnv(); -console.log('nodeEnv', nodeEnv); +console.log(`Config is using nodeEnv=${nodeEnv}`); const configDir = path.join(__dirname, '../../config'); nconf.argv().env('__'); diff --git a/server/lib/fetch-endpoint.js b/server/lib/fetch-endpoint.js index b2358ba..cc25dad 100644 --- a/server/lib/fetch-endpoint.js +++ b/server/lib/fetch-endpoint.js @@ -33,6 +33,7 @@ async function fetchEndpoint(endpoint, options = {}) { const res = await fetch(endpoint, { method, headers, + body: options.body, }); await checkResponseStatus(res); @@ -49,11 +50,16 @@ async function fetchEndpointAsJson(endpoint, options) { const opts = { ...options, headers: { + Accept: 'application/json', 'Content-Type': 'application/json', ...(options.headers || {}), }, }; + if (options.body) { + opts.body = JSON.stringify(options.body); + } + const res = await fetchEndpoint(endpoint, opts); const data = await res.json(); return data; diff --git a/shared/hydrogen-vm-render-script.js b/shared/hydrogen-vm-render-script.js index 33e5b83..4cda967 100644 --- a/shared/hydrogen-vm-render-script.js +++ b/shared/hydrogen-vm-render-script.js @@ -174,7 +174,7 @@ async function mountHydrogen() { const memberEvent = workingStateEventMap[event.user_id]; return makeEventEntryFromEventJson(event, memberEvent); }); - console.log('eventEntries', eventEntries.length); + //console.log('eventEntries', eventEntries.length); // Map of `event_id` to `EventEntry` const eventEntriesByEventId = eventEntries.reduce((currentMap, eventEntry) => { diff --git a/test/README.md b/test/README.md index 344576e..27f329e 100644 --- a/test/README.md +++ b/test/README.md @@ -1,17 +1,17 @@ -``` +```sh $ docker pull matrixdotorg/synapse:latest $ docker build -t matrix-public-archive-test-homeserver -f test/dockerfiles/Synapse.Dockerfile test/dockerfiles/ ``` -``` -docker-compose -f test/docker-compose.yml up -d --no-recreate +```sh +$ docker-compose --project-name matrix_public_archive_test -f test/docker-compose.yml up -d --no-recreate ``` -``` +```sh $ docker ps --all | grep test_hs -$ docker logs test_hs1_1 -$ docker logs test_hs2_1 +$ docker logs -f --tail 10 matrix_public_archive_test_hs1_1 +$ docker logs -f --tail 10 matrix_public_archive_test_hs2_1 -$ docker stop test_hs1_1 test_hs2_1 -$ docker rm test_hs1_1 test_hs2_1 +$ docker stop matrix_public_archive_test_hs1_1 matrix_public_archive_test_hs2_1 +$ docker rm matrix_public_archive_test_hs1_1 matrix_public_archive_test_hs2_1 ``` diff --git a/test/client-utils.js b/test/client-utils.js new file mode 100644 index 0000000..e921fbd --- /dev/null +++ b/test/client-utils.js @@ -0,0 +1,211 @@ +'use strict'; + +const assert = require('assert'); +const { URLSearchParams } = require('url'); +const urlJoin = require('url-join'); +const { fetchEndpointAsJson, fetchEndpoint } = require('../server/lib/fetch-endpoint'); + +const config = require('../server/lib/config'); +const matrixAccessToken = config.get('matrixAccessToken'); +assert(matrixAccessToken); + +let txnCount = 0; +function getTxnId() { + txnCount++; + return `${new Date().getTime()}--${txnCount}`; +} + +// Get client to act with for all of the client methods. This will use the +// application service access token and client methods will append `?user_id` +// for the specific user to act upon so we can use the `?ts` message timestamp +// massaging when sending. +async function getTestClientForHs(testMatrixServerUrl) { + // Register the virtual user + const username = `user-t${new Date().getTime()}-r${Math.floor(Math.random() * 1000000000)}`; + const registerResponse = await fetchEndpointAsJson( + urlJoin(testMatrixServerUrl, '/_matrix/client/v3/register'), + { + method: 'POST', + body: { + type: 'm.login.application_service', + username, + }, + accessToken: matrixAccessToken, + } + ); + + const userId = registerResponse['user_id']; + assert(userId); + + return { + homeserverUrl: testMatrixServerUrl, + // We use the application service AS token because we need to be able to use + // the `?ts` timestamp massaging when sending events + accessToken: matrixAccessToken, + userId: userId, + }; +} + +// Create a public room to test in +async function createTestRoom(client) { + let qs = new URLSearchParams(); + if (client.userId) { + qs.append('user_id', client.userId); + } + + const createRoomResponse = await fetchEndpointAsJson( + urlJoin(client.homeserverUrl, `/_matrix/client/v3/createRoom?${qs.toString()}`), + { + method: 'POST', + body: { + preset: 'public_chat', + name: 'the hangout spot', + initial_state: [ + { + type: 'm.room.history_visibility', + state_key: '', + content: { + history_visibility: 'world_readable', + }, + }, + ], + }, + accessToken: client.accessToken, + } + ); + + const roomId = createRoomResponse['room_id']; + assert(roomId); + return roomId; +} + +async function joinRoom({ client, roomId, viaServers }) { + let qs = new URLSearchParams(); + if (viaServers) { + [].concat(viaServers).forEach((viaServer) => { + qs.append('server_name', viaServer); + }); + } + + if (client.userId) { + qs.append('user_id', client.userId); + } + + const joinRoomResponse = await fetchEndpointAsJson( + urlJoin(client.homeserverUrl, `/_matrix/client/v3/join/${roomId}?${qs.toString()}`), + { + method: 'POST', + accessToken: client.accessToken, + } + ); + + const joinedRoomId = joinRoomResponse['room_id']; + assert(joinedRoomId); + return joinedRoomId; +} + +async function sendEvent({ client, roomId, eventType, content, timestamp }) { + assert(client); + assert(roomId); + assert(content); + + let qs = new URLSearchParams(); + if (timestamp) { + assert( + timestamp && client.userId, + 'We can only do `?ts` massaging from an application service access token. ' + + 'Expected `client.userId` to be defined so we can act on behalf of that user' + ); + + qs.append('ts', timestamp); + } + + if (client.userId) { + qs.append('user_id', client.userId); + } + + const sendResponse = await fetchEndpointAsJson( + urlJoin( + client.homeserverUrl, + `/_matrix/client/v3/rooms/${roomId}/send/${eventType}/${getTxnId()}?${qs.toString()}` + ), + { + method: 'PUT', + body: content, + accessToken: client.accessToken, + } + ); + + const eventId = sendResponse['event_id']; + assert(eventId); + return eventId; +} + +async function sendMessage({ client, roomId, content, timestamp }) { + return sendEvent({ client, roomId, eventType: 'm.room.message', content, timestamp }); +} + +// Create a number of messages in the given room +async function createMessagesInRoom({ client, roomId, numMessages, prefix, timestamp }) { + let eventIds = []; + for (let i = 0; i < numMessages; i++) { + const eventId = await sendMessage({ + client, + roomId, + content: { + msgtype: 'm.text', + body: `${prefix} - message${i}`, + }, + timestamp, + }); + eventIds.push(eventId); + } + + return eventIds; +} + +// Uploads the given data Buffer and returns the MXC URI of the uploaded content +async function uploadContent({ client, roomId, data, fileName, contentType }) { + assert(client); + assert(roomId); + assert(data); + + let qs = new URLSearchParams(); + if (client.userId) { + qs.append('user_id', client.userId); + } + + if (fileName) { + qs.append('filename', fileName); + } + + // We don't want to use `fetchEndpointAsJson` here because it will + // `JSON.stringify(...)` the body data + const uploadResponse = await fetchEndpoint( + urlJoin(client.homeserverUrl, `/_matrix/media/v3/upload`), + { + method: 'POST', + body: data, + headers: { + 'Content-Type': contentType || 'application/octet-stream', + }, + accessToken: client.accessToken, + } + ); + + const uploadResponseData = await uploadResponse.json(); + + const mxcUri = uploadResponseData['content_uri']; + assert(mxcUri); + return mxcUri; +} + +module.exports = { + getTestClientForHs, + createTestRoom, + joinRoom, + sendEvent, + sendMessage, + createMessagesInRoom, + uploadContent, +}; diff --git a/test/dockerfiles/Synapse.Dockerfile b/test/dockerfiles/Synapse.Dockerfile index 0cf6348..85f76cd 100644 --- a/test/dockerfiles/Synapse.Dockerfile +++ b/test/dockerfiles/Synapse.Dockerfile @@ -24,7 +24,7 @@ COPY keys/* /ca/ RUN openssl genrsa -out /conf/server.tls.key 2048 # generate a signing key -RUN generate_signing_key.py -o /conf/server.signing.key +RUN generate_signing_key -o /conf/server.signing.key WORKDIR /data diff --git a/test/dockerfiles/synapse/homeserver.yaml b/test/dockerfiles/synapse/homeserver.yaml index a1b36e0..a60d3d7 100644 --- a/test/dockerfiles/synapse/homeserver.yaml +++ b/test/dockerfiles/synapse/homeserver.yaml @@ -6,6 +6,7 @@ report_stats: False signing_key_path: /conf/server.signing.key trusted_key_servers: [] enable_registration: true +enable_registration_without_verification: true ## Listeners ## @@ -94,6 +95,13 @@ rc_joins: federation_rr_transactions_per_room_per_second: 9999 +## Media Store ## + +# Whether to generate new thumbnails on the fly. This lets the image thumbnails +# load in the tests. +# +dynamic_thumbnails: true + ## API Configuration ## # A list of application service config files to use diff --git a/test/e2e-tests.js b/test/e2e-tests.js index 59d6667..71a55f2 100644 --- a/test/e2e-tests.js +++ b/test/e2e-tests.js @@ -3,16 +3,26 @@ process.env.NODE_ENV = 'test'; const assert = require('assert'); +const path = require('path'); const urlJoin = require('url-join'); const escapeStringRegexp = require('escape-string-regexp'); -const { MatrixAuth } = require('matrix-bot-sdk'); const { parseHTML } = require('linkedom'); - -const { fetchEndpointAsText, fetchEndpointAsJson } = require('../server/lib/fetch-endpoint'); +const { readFile } = require('fs').promises; const MatrixPublicArchiveURLCreator = require('matrix-public-archive-shared/lib/url-creator'); - +const { fetchEndpointAsText, fetchEndpointAsJson } = require('../server/lib/fetch-endpoint'); const config = require('../server/lib/config'); + +const { + getTestClientForHs, + createTestRoom, + joinRoom, + sendEvent, + sendMessage, + createMessagesInRoom, + uploadContent, +} = require('./client-utils'); + const testMatrixServerUrl1 = config.get('testMatrixServerUrl1'); const testMatrixServerUrl2 = config.get('testMatrixServerUrl2'); assert(testMatrixServerUrl1); @@ -28,48 +38,6 @@ const HOMESERVER_URL_TO_PRETTY_NAME_MAP = { [testMatrixServerUrl2]: 'hs2', }; -async function getTestClientForHs(testMatrixServerUrl) { - const auth = new MatrixAuth(testMatrixServerUrl); - - const client = await auth.passwordRegister( - `user-t${new Date().getTime()}-r${Math.floor(Math.random() * 1000000000)}`, - 'password' - ); - - return client; -} - -async function createMessagesInRoom(client, roomId, numMessages, prefix) { - let eventIds = []; - for (let i = 0; i < numMessages; i++) { - const eventId = await client.sendMessage(roomId, { - msgtype: 'm.text', - body: `${prefix} - message${i}`, - }); - eventIds.push(eventId); - } - - return eventIds; -} - -async function createTestRoom(client) { - const roomId = await client.createRoom({ - preset: 'public_chat', - name: 'the hangout spot', - initial_state: [ - { - type: 'm.room.history_visibility', - state_key: '', - content: { - history_visibility: 'world_readable', - }, - }, - ], - }); - - return roomId; -} - describe('matrix-public-archive', () => { let server; before(() => { @@ -83,24 +51,28 @@ describe('matrix-public-archive', () => { } }); - // Sanity check that our test homeservers can actually federate with each - // other. The rest of the tests won't work properly if this isn't working. - it('Test federation between fixture homeservers', async () => { - try { + describe('Test fixture homeservers', () => { + // Sanity check that our test homeservers can actually federate with each + // other. The rest of the tests won't work properly if this isn't working. + it('Test federation between fixture homeservers', async () => { const hs1Client = await getTestClientForHs(testMatrixServerUrl1); const hs2Client = await getTestClientForHs(testMatrixServerUrl2); // Create a room on hs2 const hs2RoomId = await createTestRoom(hs2Client); - const room2EventIds = await createMessagesInRoom( - hs2Client, - hs2RoomId, - 10, - HOMESERVER_URL_TO_PRETTY_NAME_MAP[hs2Client.homeserverUrl] - ); + const room2EventIds = await createMessagesInRoom({ + client: hs2Client, + roomId: hs2RoomId, + numMessages: 10, + prefix: HOMESERVER_URL_TO_PRETTY_NAME_MAP[hs2Client.homeserverUrl], + }); // Join hs1 to a room on hs2 (federation) - await hs1Client.joinRoom(hs2RoomId, 'hs2'); + await joinRoom({ + client: hs1Client, + roomId: hs2RoomId, + viaServers: 'hs2', + }); // From, hs1, make sure we can fetch messages from hs2 const messagesEndpoint = urlJoin( @@ -129,31 +101,59 @@ describe('matrix-public-archive', () => { }") to be in room on hs2=${JSON.stringify(room2EventIds)}` ); }); - } catch (err) { - if (err.body) { - // FIXME: Remove this try/catch once the matrix-bot-sdk no longer throws - // huge response objects as errors, see - // https://github.com/turt2live/matrix-bot-sdk/pull/158 - throw new Error( - `Error occured in matrix-bot-sdk (this new error is to stop it from logging the huge response) statusCode=${ - err.statusCode - } body=${JSON.stringify(err.body)}` - ); - } - - throw err; - } + }); }); - it('shows all events in a given day', async () => { - try { + describe('Archive', () => { + // Use a fixed date at the start of the UTC day so that the tests are + // consistent. Otherwise, the tests could fail when they start close to + // midnight and it rolls over to the next day. + const archiveDate = new Date(Date.UTC(2022, 0, 3)); + let archiveUrl; + let numMessagesSent = 0; + afterEach(() => { + if (interactive) { + console.log('Interactive URL for test', archiveUrl); + } + + // Reset `numMessagesSent` between tests so each test starts from the + // beginning of the day and we don't run out of minutes in the day to send + // messages in (we space messages out by a minute so the timestamp visibly + // changes in the UI). + numMessagesSent = 0; + }); + + // Sends a message and makes sure that a timestamp was provided + async function sendMessageOnArchiveDate(options) { + const minute = 1000 * 60; + // Adjust the timestamp by a minute each time so there is some visual difference. + options.timestamp = archiveDate.getTime() + minute * numMessagesSent; + numMessagesSent++; + + return sendMessage(options); + } + + // Sends a message and makes sure that a timestamp was provided + async function sendEventOnArchiveDate(options) { + const minute = 1000 * 60; + // Adjust the timestamp by a minute each time so there is some visual difference. + options.timestamp = archiveDate.getTime() + minute * numMessagesSent; + numMessagesSent++; + + return sendEvent(options); + } + + it('shows all events in a given day', async () => { const client = await getTestClientForHs(testMatrixServerUrl1); const roomId = await createTestRoom(client); - const archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForDate(roomId, new Date()); - // Just render the page initially so that the archiver user is already joined to the page. - // We don't want their join event masking the one-off problem where we're missing the latest message in the room. - await fetchEndpointAsText(archiveUrl); + // Just render the page initially so that the archiver user is already + // joined to the page. We don't want their join event masking the one-off + // problem where we're missing the latest message in the room. We just use the date now + // because it will find whatever events backwards no matter when they were sent. + await fetchEndpointAsText( + matrixPublicArchiveURLCreator.archiveUrlForDate(roomId, new Date()) + ); const messageTextList = [ `Amontons' First Law: The force of friction is directly proportional to the applied load.`, @@ -164,9 +164,13 @@ describe('matrix-public-archive', () => { const eventIds = []; for (const messageText of messageTextList) { - const eventId = await client.sendMessage(roomId, { - msgtype: 'm.text', - body: messageText, + const eventId = await sendMessageOnArchiveDate({ + client, + roomId, + content: { + msgtype: 'm.text', + body: messageText, + }, }); eventIds.push(eventId); } @@ -174,10 +178,7 @@ describe('matrix-public-archive', () => { // Sanity check that we actually sent some messages assert.strictEqual(eventIds.length, 3); - if (interactive) { - console.log('Interactive URL for test', archiveUrl); - } - + archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForDate(roomId, archiveDate); const archivePageHtml = await fetchEndpointAsText(archiveUrl); const dom = parseHTML(archivePageHtml); @@ -191,25 +192,10 @@ describe('matrix-public-archive', () => { new RegExp(`.*${escapeStringRegexp(eventText)}.*`) ); } - } catch (err) { - if (err.body) { - // FIXME: Remove this try/catch once the matrix-bot-sdk no longer throws - // huge response objects as errors, see - // https://github.com/turt2live/matrix-bot-sdk/pull/158 - throw new Error( - `Error occured in matrix-bot-sdk (this new error is to stop it from logging the huge response) statusCode=${ - err.statusCode - } body=${JSON.stringify(err.body)}` - ); - } + }); - throw err; - } - }); - - // eslint-disable-next-line max-statements - it('can render diverse messages', async () => { - try { + // eslint-disable-next-line max-statements + it('can render diverse messages', async () => { const client = await getTestClientForHs(testMatrixServerUrl1); const roomId = await createTestRoom(client); @@ -218,84 +204,102 @@ describe('matrix-public-archive', () => { // TODO: Set avatar of room // Test image - const mxcUri = await client.uploadContentFromUrl( - 'https://en.wikipedia.org/wiki/Friction#/media/File:Friction_between_surfaces.jpg' + // via https://en.wikipedia.org/wiki/Friction#/media/File:Friction_between_surfaces.jpg (CaoHao) + const imageBuffer = await readFile( + path.resolve(__dirname, './fixtures/friction_between_surfaces.jpg') ); - const imageEventId = await client.sendMessage(roomId, { - body: 'Friction_between_surfaces.jpeg', - info: { - size: 396644, - mimetype: 'image/jpeg', - thumbnail_info: { - w: 800, - h: 390, + const imageFileName = 'friction_between_surfaces.jpg'; + const mxcUri = await uploadContent({ + client, + roomId, + data: imageBuffer, + fileName: imageFileName, + }); + const imageEventId = await sendMessageOnArchiveDate({ + client, + roomId, + content: { + body: imageFileName, + info: { + size: 17471, mimetype: 'image/jpeg', - size: 126496, + w: 640, + h: 312, + 'xyz.amorgan.blurhash': 'LkR3G|IU?w%NbxbIemae_NxuD$M{', }, - w: 1894, - h: 925, - 'xyz.amorgan.blurhash': 'LkR3G|IU?w%NbwbIemae_NxuD$M{', - // TODO: How to get a proper thumnail URL that will load? - thumbnail_url: mxcUri, + msgtype: 'm.image', + url: mxcUri, }, - msgtype: 'm.image', - url: mxcUri, }); // A normal text message const normalMessageText1 = '^ Figure 1: Simulated blocks with fractal rough surfaces, exhibiting static frictional interactions'; - const normalMessageEventId1 = await client.sendMessage(roomId, { - msgtype: 'm.text', - body: normalMessageText1, + const normalMessageEventId1 = await sendMessageOnArchiveDate({ + client, + roomId, + content: { + msgtype: 'm.text', + body: normalMessageText1, + }, }); // Another normal text message const normalMessageText2 = 'The topography of the Moon has been measured with laser altimetry and stereo image analysis.'; - const normalMessageEventId2 = await client.sendMessage(roomId, { - msgtype: 'm.text', - body: normalMessageText2, + const normalMessageEventId2 = await sendMessageOnArchiveDate({ + client, + roomId, + content: { + msgtype: 'm.text', + body: normalMessageText2, + }, }); // Test replies const replyMessageText = `The concentration of maria on the near side likely reflects the substantially thicker crust of the highlands of the Far Side, which may have formed in a slow-velocity impact of a second moon of Earth a few tens of millions of years after the Moon's formation.`; - const replyMessageEventId = await client.sendMessage(roomId, { - 'org.matrix.msc1767.message': [ - { - body: '> <@ericgittertester:my.synapse.server> ${normalMessageText2}', - mimetype: 'text/plain', - }, - { - body: `
In reply to @ericgittertester:my.synapse.server
${normalMessageText2}
${replyMessageText}`, - mimetype: 'text/html', - }, - ], - body: `> <@ericgittertester:my.synapse.server> ${normalMessageText2}\n\n${replyMessageText}`, - msgtype: 'm.text', - format: 'org.matrix.custom.html', - formatted_body: `
In reply to @ericgittertester:my.synapse.server
${normalMessageText2}
${replyMessageText}`, - 'm.relates_to': { - 'm.in_reply_to': { - event_id: normalMessageEventId2, + const replyMessageEventId = await sendMessageOnArchiveDate({ + client, + roomId, + content: { + 'org.matrix.msc1767.message': [ + { + body: '> <@ericgittertester:my.synapse.server> ${normalMessageText2}', + mimetype: 'text/plain', + }, + { + body: `
In reply to @ericgittertester:my.synapse.server
${normalMessageText2}
${replyMessageText}`, + mimetype: 'text/html', + }, + ], + body: `> <@ericgittertester:my.synapse.server> ${normalMessageText2}\n\n${replyMessageText}`, + msgtype: 'm.text', + format: 'org.matrix.custom.html', + formatted_body: `
In reply to @ericgittertester:my.synapse.server
${normalMessageText2}
${replyMessageText}`, + 'm.relates_to': { + 'm.in_reply_to': { + event_id: normalMessageEventId2, + }, }, }, }); // Test reactions const reactionText = '😅'; - await client.sendEvent(roomId, 'm.reaction', { - 'm.relates_to': { - rel_type: 'm.annotation', - event_id: replyMessageEventId, - key: reactionText, + await sendEventOnArchiveDate({ + client, + roomId, + eventType: 'm.reaction', + content: { + 'm.relates_to': { + rel_type: 'm.annotation', + event_id: replyMessageEventId, + key: reactionText, + }, }, }); - const archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForDate(roomId, new Date()); - if (interactive) { - console.log('Interactive URL for test', archiveUrl); - } + archiveUrl = matrixPublicArchiveURLCreator.archiveUrlForDate(roomId, archiveDate); const archivePageHtml = await fetchEndpointAsText(archiveUrl); @@ -305,7 +309,7 @@ describe('matrix-public-archive', () => { const imageElement = dom.document.querySelector(`[data-event-id="${imageEventId}"] img`); assert(imageElement); assert.match(imageElement.getAttribute('src'), new RegExp(`^http://.*`)); - assert.strictEqual(imageElement.getAttribute('alt'), 'Friction_between_surfaces.jpeg'); + assert.strictEqual(imageElement.getAttribute('alt'), imageFileName); // Make sure the normal message is visible assert.match( @@ -337,29 +341,16 @@ describe('matrix-public-archive', () => { replyMessageElement.outerHTML, new RegExp(`.*${escapeStringRegexp(reactionText)}.*`) ); - } catch (err) { - if (err.body) { - // FIXME: Remove this try/catch once the matrix-bot-sdk no longer throws - // huge response objects as errors, see - // https://github.com/turt2live/matrix-bot-sdk/pull/158 - throw new Error( - `Error occured in matrix-bot-sdk (this new error is to stop it from logging the huge response) statusCode=${ - err.statusCode - } body=${JSON.stringify(err.body)}` - ); - } + }); - throw err; - } + it(`can render day back in time from room on remote homeserver we haven't backfilled from`); + + it(`will redirect to hour pagination when there are too many messages`); + + it(`will render a room with only a day of messages`); + + it( + `will render a room with a sparse amount of messages (a few per day) with no contamination between days` + ); }); - - it(`can render day back in time from room on remote homeserver we haven't backfilled from`); - - it(`will redirect to hour pagination when there are too many messages`); - - it(`will render a room with only a day of messages`); - - it( - `will render a room with a sparse amount of messages (a few per day) with no contamination between days` - ); }); diff --git a/test/fixtures/friction_between_surfaces.jpg b/test/fixtures/friction_between_surfaces.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfb60772d785697d63fe725149fa8c57ba125b3f GIT binary patch literal 17471 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 b@x=D}72`kRiTNkIIsaY8e=(9NUKaib>dW@E literal 0 HcmV?d00001