chore: add test & coverage

This commit is contained in:
Ricardo Arturo Cabral Mejia 2022-08-14 05:33:57 +00:00
parent a362326118
commit b18eec513a
No known key found for this signature in database
GPG Key ID: 5931EBF43A650245
23 changed files with 5235 additions and 362 deletions

7
.gitignore vendored
View File

@ -3,6 +3,11 @@ logs
*.log
npm-debug.log*
# Coverage
.nyc_output
.test-report
.coverage
# Dependency directories
node_modules/
@ -22,4 +27,4 @@ dist
.vscode/*
# Env files
*.env
*.env

16
.mocharc.js Normal file
View File

@ -0,0 +1,16 @@
module.exports = {
extension: ['ts'],
require: ['ts-node/register/transpile-only', 'source-map-support/register'],
reporter: 'mochawesome',
slow: 75,
sorted: true,
'inline-diff': true,
diff: true,
'reporter-option': [
'reportDir=.test-report',
'reportFilename=index',
'quiet=true',
'json=false',
'consoleReporter=spec',
],
}

49
.nycrc.json Normal file
View File

@ -0,0 +1,49 @@
{
"all": true,
"cache": true,
"check-coverage": true,
"branches": 80,
"lines": 80,
"functions": 80,
"statements": 80,
"watermarks": {
"lines": [
80,
95
],
"functions": [
80,
95
],
"branches": [
80,
95
],
"statements": [
80,
95
]
},
"report-dir": ".coverage",
"extension": [
".ts"
],
"include": [
"src/**/*.ts"
],
"exclude": [
"src/@types",
"src/constants"
],
"require": [
"ts-node/register/transpile-only",
"source-map-support/register"
],
"reporter": [
"text",
"text-summary",
"html"
],
"instrument": true,
"sourceMap": true
}

3083
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,8 +15,10 @@
"db:migrate:rollback": "knex migrate:rollback",
"db:seed": "knex seed:run",
"start": "npm run build && node dist/index.js",
"test": "mocha -r ts-node/register 'test/**/*.spec.ts'",
"test:watch": "npm run test -- --min --watch --watch-files src/**/*,test/**/*"
"test": "mocha 'test/**/*.spec.ts'",
"test:watch": "npm run test -- --min --watch --watch-files src/**/*,test/**/*",
"cover": "nyc npm run test",
"cover:watch": "nyc npm run test"
},
"repository": {
"type": "git",
@ -38,14 +40,18 @@
"@types/pg": "^8.6.5",
"@types/ramda": "^0.28.13",
"@types/sinon": "^10.0.11",
"@types/sinon-chai": "^3.2.8",
"@types/ws": "^8.5.3",
"@typescript-eslint/eslint-plugin": "^5.19.0",
"@typescript-eslint/parser": "^5.19.0",
"chai": "^4.3.6",
"eslint": "^8.13.0",
"mocha": "^9.2.2",
"mochawesome": "^7.1.3",
"nyc": "^15.1.0",
"rimraf": "^3.0.2",
"sinon-chai": "^3.7.0",
"source-map-support": "^0.5.21",
"ts-node": "^10.7.0",
"ts-node-dev": "^1.1.8",
"typescript": "^4.6.3",

View File

@ -1,4 +1,896 @@
[
{
"id": "0d684e8ec2431de586aa3cafbee2f6d308d19b28805e53deabcac3220e9136a5",
"pubkey": "f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3",
"created_at": 1660407625,
"kind": 3,
"tags": [
[
"p",
"b34417513f66497d7b0e1a8406b6689ac32afb184027717e57d281ea19186315",
"wss://nostr-relay.untethr.me"
],
[
"p",
"2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5",
"wss://nostr.rocks"
],
[
"p",
"13e7f234ef71ffd63fdf3fec4eaec6fdea9bb850a37ba1a854a62b934c97855e",
"wss://nostr-relay.untethr.me"
],
[
"p",
"40e162e0a8d139c9ef1d1bcba5265d1953be1381fb4acd227d8f3c391f9b9486",
"wss://nostr-relay.untethr.me"
],
[
"p",
"42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d",
"wss://nostr-relay.untethr.me"
],
[
"p",
"3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"ed04f9c719af697ac1c045bfff5f841cdf61a0b0d2170c9970f0ce0a04f708bf",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"76f5960d381e7146b7f374a4a65afa403038441b46933840c71e436facb82ae7",
"wss://nostr.bitcoiner.social"
],
[
"p",
"c697f7f5f59de8ddb93c6b74fdd759ab2dc654bc36315f39770c214607fcd65e",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"d3fe840f672c191849f8500762d81af8a258e673b7ff07cf9ce1211c2d0f493d",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"14347702b99786cc0ee644620a5f71bc6a88e2882491f57c372f1deaed198701",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"cbc5ef6b01cbd1ffa2cb95a954f04c385a936c1a86e1bb9ccdf2cf0f4ebeaccb",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"8ff7a6132ffe1bb3600aa20496ab648f1daf6b50ceaa8054a37e6a0b1f7ee491",
"wss://nostr.bitcoiner.social"
],
[
"p",
"1f7dfb1b51bd4fb5d15245b28d86fab670a677580e2a0633a2cf76509d02471c",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"f5424d002fd0d48fadd6e54879387714c54bfa46535976ff2b385843aaddf8e5",
"wss://nostr.rocks"
],
[
"p",
"9aeb3bb495f09be3799048c3ef76649917efc46a8c8a69fefc31a7d012f6eccb",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"c181af1aca3a13243a9ef9c302d5e988eaec25caa60c9923e5faed097e52cd69",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"a4cb51f4618cfcd16b2d3171c466179bed8e197c43b8598823b04de266cef110",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"1221fd0054a6c8ebd07b39c5eeea388f7f0244409f8cd8649ac22fcd668d02f6",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"f61abb9886e1f4cd5d20419c197d5d7f3649addab24b6a32a2367124ca3194b4",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"b175db709771d32bbe7d8599e0c41f3f8768cc3a8333603d93c6d72d41c42f76",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"57225e0adcbad1fddf8d9ba1f5f36d657f134b7e0ea7aed6c0eb7013e4ef45f1",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"6446d04ecf9e0bb72c5ae218df9fc6c0a273149d9ecbfbe42519c53667b4405a",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"e0d05a5b8c7789eb83f87672f4eb0dca78f99292ab038e5c66f84d97d77b95ae",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"46fcbe3065eaf1ae7811465924e48923363ff3f526bd6f73d7c184b16bd8ce4d",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077"
],
[
"p",
"8d233d8babe9f40f170c5b0706fd4832869e07d040cfcd6b702d57e070aad1cb",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"566516663d91d4fef824eaeccbf9c2631a8d8a2efee8048ca5ee6095e6e5c843",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"0000a0fa65fcccd99e6fd32fc7870339af40f4a94703ea30999fc5c091daa222",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"d987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25"
],
[
"p",
"3878d95db7b854c3a0d3b2d6b7bf9bf28b36162be64326f5521ba71cf3b45a69",
"wss://nostr.rocks"
],
[
"p",
"7f0be893dc501f391260aa2088de28b35280dfd4ae8f8bfa9bdbb7319952755b"
],
[
"p",
"44c39a01cbdeb70905aaa9cbd614a1ef39d0f4386d0dee9d7493e6e680548eb9",
"wss://nostr-relay.untethr.me"
],
[
"p",
"484712e818a8373182c64e53c0d1fb9cec5de96daa2d39424b42d7b0dcd8e6c9"
],
[
"p",
"b2222fc7844fef7b002440b3216213d9b01dcf5e412a604ddfa50967db4d8bd6",
"wss://nostr-relay.untethr.me"
],
[
"p",
"78aa0c9a0fe2d2476469db25f19a293a6606c113fe2e87e17b8ab51cb120dbb7"
],
[
"p",
"9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437",
"wss://nostr.rocks"
],
[
"p",
"57f03c1604d109be088dbac71371b6939833dd24fdcf2886d3382a0479c0d4de"
],
[
"p",
"778fdd199044a2e8dc3cfac3c274f5577ed78c22fb3b5ccb13df6956980eff4c"
],
[
"p",
"e76e705283775febf3d5f4f97662648582d42ff822435924f21a47c8d46c5921",
"wss://nostr-relay.untethr.me"
],
[
"p",
"e794d71b8f7426a291004f592b758438a25d0012e5bb969e53307b3785fd5211",
"wss://nostr-pub.wellorder.net"
],
[
"p",
"88a2c3b420b4a027706a98600d1fd744ac6cfd12e201b74189be5ef4b2b3aa45",
"wss://nostr-relay.untethr.me"
],
[
"p",
"004db7605cfeba09b15625deb77c9369029f370591d68231b7c4dfd43f8f6f4f"
],
[
"p",
"b238e136091cb01cd21606dac1a2f503f504e7e8e7c75d98fcefd30aed084a1c",
"wss://nostr-relay.untethr.me"
],
[
"p",
"32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"
],
[
"p",
"b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a"
],
[
"p",
"dd81a8bacbab0b5c3007d1672fb8301383b4e9583d431835985057223eb298a5"
],
[
"p",
"ed1d0e1f743a7d19aa2dfb0162df73bacdbc699f67cc55bb91a98c35f7deac69"
],
[
"p",
"b2d1d0fc5b771a7041054ebded57bc3bf20f69ccbb9dc9b8ef432801d247df7c"
],
[
"p",
"d947d8f1be338c5cff194a6630453fa43c924eb9f58c339c68b26b2193efa276"
],
[
"p",
"6112a73a50518ed631dc6804a238525acdf10f26343199bc25ed7c9f5a0685c5"
],
[
"p",
"22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793"
],
[
"p",
"1bbb8324577ac089607e45813bac499ebdab4621d029f8c02b2c82b4410fd3f4"
],
[
"p",
"e668a111aa647e63ef587c17fb0e2513d5c2859cd8d389563c7640ffea1fc216"
],
[
"p",
"2508ed2c2ab3f6728a880fafbc0895a2afeacbb74eb69847255fb60564af0d85"
],
[
"p",
"c2bb5d6529095edbfbdbe3f136175c146c6706526325b32da881c7c34c7b1ab8"
],
[
"p",
"8f87ac34eb27a86fc917866fbc9016429bd89cf1d0d27a038a8eaac4c62c63e5"
],
[
"p",
"52cb4b34775fa781b6a964bda0432dbcdfede7a59bf8dfc279cbff0ad8fb09ff"
],
[
"p",
"3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
],
[
"p",
"7e88f589d2677ea4a863c72af5d0e85fbe1d3db111667c50d33fa42196a1afc0"
],
[
"p",
"f0bed2e11260f0f77f781db928f40a34c18713fda1918d3be996f91d0776e985"
],
[
"p",
"565152b2d1793a253cba282588a4b287b0ab2acbe7faa7021ea0dced39d33716"
],
[
"p",
"d9c8c00017a2a345c2f32132436a26e1c72cb7a57e7b6b316f62dee2f8bcf8dd"
],
[
"p",
"b28a0714f86fd344a7ecad9566c2e33f8485ef560a702e15c3f537914abc152d"
],
[
"p",
"7e7272c475d920ad408e7a6faf9a123aa7b882cba7151e6105a0fc9d212fb240"
],
[
"p",
"ea42658e9a1291a32d1b74793edaef3d8757589a32b16931cacd85ba5470ea7c"
],
[
"p",
"aff9a9f017f32b2e8b60754a4102db9d9cf9ff2b967804b50e070780aa45c9a8"
],
[
"p",
"b74848fa6f8975f00b04ce12ccbe18673ad1f4511f66d4e5a3a151720fdce62a"
],
[
"p",
"7e3b8e221023e92c297cb35937d88e495de780ac3190c23e1e2e1e6274f43f59"
],
[
"p",
"547fcc5c7e655fe7c83da5a812e6332f0a4779c87bf540d8e75a4edbbf36fe4a"
],
[
"p",
"a12535e8bf4f712211b68f7fe7303d03c3c5cfe8155116d553fe6b8adba85d41"
],
[
"p",
"772405d14585d9d8fe481cef6ce560b83f03c24f0efc179415530d54eee97534"
],
[
"p",
"2163edbd81fa58e64c7e38bf968dda1b2f42811b78ea06accd32007bbb8a018b"
],
[
"p",
"e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3"
],
[
"p",
"e9e4276490374a0daf7759fd5f475deff6ffb9b0fc5fa98c902b5f4b2fe3bba2"
],
[
"p",
"4557aab9aae76a892e01568064a9e262e613690421a79e584b8cc4c5ca9afb7e"
],
[
"p",
"9630f464cca6a5147aa8a35f0bcdd3ce485324e732fd39e09233b1d848238f31"
],
[
"p",
"1265c1c3d41f0f05bf306224ec40628231a5086a2eaa36643b3982a4eba19c9f"
],
[
"p",
"04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9"
],
[
"p",
"d3646691ba5b1d796c1e1b3430df00fe1189ec9c232877adde18c8f656af18f0"
],
[
"p",
"b7c66ce6f7bbe034e96be54c2ffc0adf631a889abc0834ba1431171b67c489aa"
],
[
"p",
"8355095016fddbe31fcf1453b26f613553e9758cf2263e190eac8fd96a3d3de9"
],
[
"p",
"06fca9f06f74cf86a16fe4c2feec508700643e2b105b519fd93d35332c51ad53"
],
[
"p",
"6b0d4c8d9dc59e110d380b0429a02891f1341a0fa2ba1b1cf83a3db4d47e3964"
],
[
"p",
"35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f"
],
[
"p",
"dcecb5c4c228e15a1f04305c34b39b7ff67675544cb7dc74dd5c715cf62ada74"
],
[
"p",
"b2c61317687060b2b7e9cb7f7fde04f30bab23e12bf471f8d356000ca2b12b4a"
],
[
"p",
"51fc7209201b1414f721c3d2d2b3430699b1e6317716c5182cc1d7945072e358"
],
[
"p",
"ce5061bfcc16476b9bde3f1d5b3ec7730c4361cf8c827fbd9c14eb8c7003a1de"
],
[
"p",
"0810b5bc4cddc3e7624a1f6acbdccdc95c6e9409c144ce83365ee04a3a63314e"
],
[
"p",
"975bbd239f0b7e25a080675d3db5892492ea9e9c7705c819ba3dafd8de95f3d9"
],
[
"p",
"76f928b303b095a6f17784151acd9a5127d183cb5f989a173b00bd0c12d07e83"
],
[
"p",
"d4d4fdde8ab4924b1e452e896709a3bd236da4c0576274b52af5992d4d34762c"
],
[
"p",
"ac9ec020170155f0feb347f0d777ee5fc38dd1f36353093046323646cff5169f"
],
[
"p",
"d91191e30e00444b942c0e82cad470b32af171764c2275bee0bd99377efd4075"
],
[
"p",
"ea75802dd1c86933c1e20c582541bb283d44c88e3445ed90d4375fc3d973f3a0"
],
[
"p",
"9682c33f9024dadb1bffdf762c3156e26b4aa340de8d06c91ca537fcc0fdb3a9"
],
[
"p",
"a8f14f05c64f9e62bdada89c21a52f09aa5d7948b47ccf52da1be16b0de9efac"
],
[
"p",
"80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78"
],
[
"p",
"b10c0000079a83cf26815dc7538818d8d56a2983e374e30a4143e50060978457"
],
[
"p",
"ae683cd251952448ad0d7b8ed6c2e0f8ab451578250cb35f0c977275b56b056e"
],
[
"p",
"954aaf69c2e7c9fb3f9998f61944ab8ab08ce3c8679ecd985e4486a6eb696217"
],
[
"p",
"d7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731"
],
[
"p",
"104749bc9151a0e54b9845ee50fc4b559439dd1ada006e36a6c49ad3ea16a55c"
],
[
"p",
"cf9413eb6bbe55c8a3c10119ec0635e134fa266f2c50f825d7225da9b92ecc4e"
],
[
"p",
"bae77874946ec111f94be59aef282de092dc4baf213f8ecb8c9e15cb7ed7304e"
],
[
"p",
"44bb2dd1615ed2a527946c41d854995f18866a8feffa88eb375728c20aeea30c"
],
[
"p",
"62903b1ff41559daf9ee98ef1ae67cc52f301bb5ce26d14baba3052f649c3f49"
],
[
"p",
"9a29ee8c3771573e5306bb7701182e970b188ce3552713ca68a157ebc3c0bf75"
],
[
"p",
"e3f0c72e7b653f395f64e03519bae3efeac184bcf0b3f38bdccb62a4d2aa5d30"
],
[
"p",
"9b9f5f1ec13105c8d1c2ea16aa952e98640b170b871420980ea11b18eb1f1e03"
],
[
"p",
"2b36fb6ae1022d0d4eac2a9f13fc2638f3350acc9b07bdca1de43a7c63429644"
],
[
"p",
"f00c952da33c06e02c930f76aba1085021b98075657daaff8ad119edcfde691e"
],
[
"p",
"8837f562e064282e4fb9902ae6062ee436a53236909a68c6d19564df6c208fbe"
],
[
"p",
"f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3"
],
[
"p",
"66e346dfe3a4e572359519f086bf45771a19224343183aa1c86b9f9e31b78ac9"
],
[
"p",
"8c24f2bf7df33aea0f05706162176343f34389d95ca5696dba1c2768887f586f"
],
[
"p",
"343558f07b07ffcb24b27b73812d74d4ff8f46e81ea903f1e7f37d30d907bcfc"
],
[
"p",
"57400e5b11c8b52ed04765df605fe9c30aa50abdeacff49d3de6b58359c907ed"
],
[
"p",
"4535551a40271b059ab92b71e7ab7e8700061a2d91b0d20f313ef82f052eb085"
],
[
"p",
"8431af1a305fd23b869a12ad87118f78d87bec6e2a431e38fd1fabdac281ff45"
],
[
"p",
"4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36"
],
[
"p",
"747adf8e9036ed78b47eca762bf80bc41af34df6da7bd44876cf2d27e6b7dd64"
],
[
"p",
"b832d7fdcf4f6fed87ccfc6e10426710b968d6c260206fecb24aa096879c44ce"
],
[
"p",
"09e935f7c01fda340051a4700cfb9dde533202bdf56808f68cafef6bae07a5bd"
],
[
"p",
"2b26251002f9bdd990da1990bcc378ac5c816f1446e82167819ab60c4b9a6ca9"
],
[
"p",
"2183e94758481d0f124fbd93c56ccaa45e7e545ceeb8d52848f98253f497b975"
],
[
"p",
"2bee8a0f48dcc76df4385df95ee184331e41fbde0731164c6627512b9b34f005"
],
[
"p",
"d0cb47a354003467a3a7cbc50ddc0c29250851f9040656bad9d0ab7adb5b7382"
],
[
"p",
"47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327"
],
[
"p",
"38b07a31f3b23dbeb9f59deb7bec5b993173fb4022206980f3809d0b68abf959"
],
[
"p",
"e6a92d8b6c20426f78bba8510ccdc73df5122814a3bac1d553adebac67a92b27"
],
[
"p",
"ad5aab5be883a571ea37b231cd996d37522e77d0f121cedfd6787b91d848268e"
],
[
"p",
"6d334336f9ba6c35fdc3b87950721b123f56f0d686fe9a5b4c95d2568b2398d8"
],
[
"p",
"c8b430569a2c95aa8d6eceea67f40c16e17f1ac10755fcf17f2ba772f3febd96"
],
[
"p",
"3b6a202702bc8c236ff2900aa564575fe56ae5a9e5b8386d3307c79b392674ab"
],
[
"p",
"d97cd1bcc21e393e5a8b053fba9db385ace78710ba68a6bc7828d57ad82e88bd"
],
[
"p",
"3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c"
],
[
"p",
"b99b149370e4f8533ce53d143af3f39e1f2628a39847f7fdd7544c9585da9299"
],
[
"p",
"e4c47aedea8ea54255f5ba07a77053b24553e9b975435e56da343da19aec7881"
],
[
"p",
"552b4d02f9db02f11bda4b4c1cdefe8852c6c6b6ca0e03b7013f182c854413b7"
],
[
"p",
"3f8e32d654fbc0da5fd570d70381a3e59843b208c5574a74a2305527bce8382b"
],
[
"p",
"84620a7b6a3d42b96b3e8a392fabca1e476e9049188808b0ecf3d64d36efffd1"
],
[
"p",
"047f497e13073d4303383c7abcc296a3b5b5956d243eafa6423c675a831a5cc1"
],
[
"p",
"b875065f96ff58c82e951f543857515798f5e50c6903d9602b425e2cd957f1ce"
],
[
"p",
"edfa27d49d2af37ee331e1225bb6ed1912c6d999281b36d8018ad99bc3573c29"
],
[
"p",
"8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168"
],
[
"p",
"bc1f8b83991f46f6f2f2b4569314d50b229e9f2761716ca56d4572a190801a44"
],
[
"p",
"84fe3febc748470ff1a363db8a375ffa1ff86603f2653d1c3c311ad0a70b5d0c"
],
[
"p",
"d543c820050efd6d2c1536b0990111ac293a4431e6a12929432366e0aa8001e7"
],
[
"p",
"7cf68b47a2b243d06322bfdb6a1c2422fb8b3a18d18a5c90c27b59e8f612553e"
],
[
"p",
"f0c864cf573de171053bef4df3b31c6593337a097fbbd9f20d78506e490c6b64"
],
[
"p",
"3702743c98430ba152e635b081637716a3c949c13ad3ad1e6c80e6e7d41fbc8a"
],
[
"p",
"2a043132d98c2457fb3581fdeddab380a8eda3760b2605f676be5059ed260066"
],
[
"p",
"c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188"
],
[
"p",
"51535ad9f0e13a810f73ea8829a79b3733bd1fffb767c4885990b02f59103a13"
],
[
"p",
"3707f1efc7515524dce41d3bf50bfd9fdaed3494620b5f94fcf16d2766da4ec2"
],
[
"p",
"dbab9040bc1f0c436b0f92f517702498358edc1fde2c7884d0e1036c739d44f3"
],
[
"p",
"904ea00a4a245559d6184be5c6e2cf2c66ea7fc91eb5f1eb5349506d19d63a11"
],
[
"p",
"9ac12013d20fae4f8829ba4e5ba6343e410288d3a0752d6143386d2c1af1f57e"
],
[
"p",
"7bc0ff3de7b2205ed8bc366f7657138eacb5164d43d9580b8f5b47b7e6a7c235"
],
[
"p",
"c5cfda98d01f152b3493d995eed4cdb4d9e55a973925f6f9ea24769a5a21e778"
],
[
"p",
"887645fef0ce0c3c1218d2f5d8e6132a19304cdc57cd20281d082f38cfea0072"
],
[
"p",
"88a502f72f216c93eb840fa805c1a215b97e0800ab2dfa017450d38cb4b60a03"
],
[
"p",
"3f152ab665d1079108529ff6bf0ba48809b6788b22ab8a3d76f7a3f63bec19a0"
],
[
"p",
"27da3f032e0fea007947b0da12f1183630c5a2da79d7202b96f35f16ef6ce48e"
],
[
"p",
"de29897a4a9086a1c5e8f6c7d06691afeda77103eea35eabecbfda21189fa995"
],
[
"p",
"0a2bfced3f7c8a08d88a697da80d7d85f12e69260cf308de27da1f5b6f65bf00"
],
[
"p",
"95405f16211a88c869ec87b684cb450136b7bf2420e236f9ec793385893d01e8"
],
[
"p",
"f9e24c0a9544d119b4f0e31ceac53d1b650c763e378541e1dfde402e350f5792"
],
[
"p",
"7f3bd39154ce2994d67bc89b782c12871bcd7a30093b4700b07c438fb7b906db"
],
[
"p",
"1d914450975db68d850f13a8950abda9dc6a1b140de6460634f839c49f5de958"
],
[
"p",
"545320c902a7c7de8f44c6c3c0e7870b72e8ddfdd203139db18b5d518f6771c1"
],
[
"p",
"e740b0275f467618fdebf8ad54cb597deabbca2a0490d314e509730c50118499"
],
[
"p",
"179744407ac4fda143a8635e7ae9c9eabf3ab107a818a4f740a9e46b39412a42"
],
[
"p",
"2d11d3a3123287b478e19e9ef011bceb48e8f14a0d58e22bd156f35a839c5640"
],
[
"p",
"ce5a47f6328beab97310a27269c4725988ced2aec93fcd3ab01282f667d696c3"
],
[
"p",
"c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86"
],
[
"p",
"e8caa2028a7090ffa85f1afee67451b309ba2f9dee655ec8f7e0a02c29388180"
],
[
"p",
"9c8e6bcf8438812fe44ccd32ba4208b3c72193a944d7e6f68ff311b48a28523e"
],
[
"p",
"7215b2db8754494fd3452b7f2d28b56e23863b95446bf68d79f980a7ad5ec7cd"
]
],
"content": "{\"wss://rsslay.fiatjaf.com\":{\"read\":true,\"write\":false},\"wss://nostr-pub.wellorder.net\":{\"read\":true,\"write\":true},\"wss://expensive-relay.fiatjaf.com\":{\"read\":true,\"write\":true},\"wss://nostr.rocks\":{\"read\":true,\"write\":true},\"wss://nostr-relay.untethr.me\\t\":{\"read\":true,\"write\":true},\"wss://relayer.fiatjaf.com\":{\"read\":true,\"write\":true},\"wss://nostr-relay.untethr.me\":{\"read\":true,\"write\":true},\"wss://nostr-relay.wlvs.space\":{\"read\":true,\"write\":true},\"wss://nostr.openchain.fr\":{\"read\":true,\"write\":true},\"wss://relay.futohq.com\":{\"read\":true,\"write\":true}}",
"sig": "f5935788cf7a5a402b14f3199f2ecb2f181f710a475693f2866fe3cd8bdaf900ec9edb9f831d23783023e0aa9011fe403fbaa4e4c93562d56ac8f463fd201e3d"
},
{
"id": "2e6dcaa6f7767b2f0ad7756e5bb19145dcd9817beb078ca7478154ad4fad54cd",
"pubkey": "42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d",
"created_at": 1660400296,
"kind": 3,
"tags": [
[
"p",
"3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681"
],
[
"p",
"42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d"
],
[
"p",
"46fcbe3065eaf1ae7811465924e48923363ff3f526bd6f73d7c184b16bd8ce4d"
],
[
"p",
"2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5"
],
[
"p",
"32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"
],
[
"p",
"2a043132d98c2457fb3581fdeddab380a8eda3760b2605f676be5059ed260066"
],
[
"p",
"35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f"
],
[
"p",
"aff9a9f017f32b2e8b60754a4102db9d9cf9ff2b967804b50e070780aa45c9a8"
],
[
"p",
"3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
],
[
"p",
"9ac12013d20fae4f8829ba4e5ba6343e410288d3a0752d6143386d2c1af1f57e"
],
[
"p",
"d7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731"
],
[
"p",
"47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327"
],
[
"p",
"dd81a8bacbab0b5c3007d1672fb8301383b4e9583d431835985057223eb298a5"
],
[
"p",
"c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188"
],
[
"p",
"52b4a076bcbbbdc3a1aefa3735816cf74993b1b8db202b01c883c58be7fad8bd"
],
[
"p",
"80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78"
],
[
"p",
"e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3"
],
[
"p",
"22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793"
],
[
"p",
"4570d7a0b49b5524797120810116a2a5c18281423b173a557056f08f15c5382d"
],
[
"p",
"4535551a40271b059ab92b71e7ab7e8700061a2d91b0d20f313ef82f052eb085"
],
[
"p",
"edfa27d49d2af37ee331e1225bb6ed1912c6d999281b36d8018ad99bc3573c29"
],
[
"p",
"4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36"
],
[
"p",
"f5424d002fd0d48fadd6e54879387714c54bfa46535976ff2b385843aaddf8e5"
],
[
"p",
"047f497e13073d4303383c7abcc296a3b5b5956d243eafa6423c675a831a5cc1"
],
[
"p",
"8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168"
],
[
"p",
"f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3"
],
[
"p",
"d987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25"
],
[
"p",
"c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86"
]
],
"content": "{\"wss:\\/\\/nostr.bitcoiner.social\":{\"write\":true,\"read\":true},\"wss:\\/\\/relay.damus.io\":{\"write\":true,\"read\":true},\"wss:\\/\\/nostr.onsats.org\":{\"write\":true,\"read\":true},\"wss:\\/\\/relay.zerosequioso.com\":{\"write\":true,\"read\":true},\"wss:\\/\\/relay.nostr.info\":{\"write\":true,\"read\":true}}",
"sig": "8d97d1027d28c0492c0d4733405e9680b8eea332418a3f5e65c13ba6d2c4e2db38c4d405cf06d144316a788cb9a7c6805e28aef286c775981872c922e6d2cbfd"
},
{
"id": "92242fb2c2d2c8228fad83d54caeaea3b7b596bd2413cbc840c91763e276edcb",
"pubkey": "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245",

View File

@ -13,6 +13,7 @@ export class EventMessageHandler implements IMessageHandler {
public async handleMessage(message: IncomingEventMessage): Promise<void> {
const [, event] = message
console.log('Received event:', event)
if (!await isEventSignatureValid(event) || !isEventIdValid(event)) {
console.warn(`Event ${event.id} from ${event.pubkey} with signature ${event.sig} is not valid`)
return

View File

@ -7,7 +7,7 @@ import { IWebSocketAdapter } from '../@types/adapters'
import { IEventRepository } from '../@types/repositories'
import { SubscriptionId, SubscriptionFilter } from '../@types/subscription'
import { toNostrEvent } from '../utils/event'
import { streamEach, streamMap } from '../utils/transforms'
import { streamEach, streamEnd, streamMap } from '../utils/stream'
import { Event } from '../@types/event'
@ -39,10 +39,8 @@ export class SubscribeMessageHandler implements IMessageHandler, IAbortable {
await pipeline(
findEvents,
streamMap(toNostrEvent),
streamEach(
sendEvent,
sendEOSE, // NIP-15: End of Stored Events Notice
),
streamEach(sendEvent),
streamEnd(sendEOSE), // NIP-15: End of Stored Events Notice
{
signal: this.abortController.signal,
},

View File

@ -6,7 +6,7 @@ import { DBEvent, Event } from '../@types/event'
import { IEventRepository } from '../@types/repositories'
import { SubscriptionFilter } from '../@types/subscription'
import { isGenericTagQuery } from '../utils/filter'
import { toBuffer, toJSON } from '../utils/transforms'
import { toBuffer, toJSON } from '../utils/transform'
const evenLengthTruncate = (input: string) => input.substring(0, input.length >> 1 << 1)

View File

@ -1,4 +1,6 @@
import Joi from 'joi'
import Schema from 'joi'
import { MessageType } from '../@types/messages'
import { subscriptionSchema } from './base-schema'
import { eventSchema } from './event-schema'
import { filterSchema } from './filter-schema'
@ -7,18 +9,24 @@ export const eventMessageSchema = Schema.array().ordered(
Schema.string().valid('EVENT').required(),
eventSchema.required(),
)
.label('EVENT message')
export const reqMessageSchema = Schema.array()
.ordered(Schema.string().valid('REQ').required(), Schema.string().required())
.items(filterSchema.required())
.ordered(Schema.string().valid('REQ').required(), Schema.string().required().label('subscriptionId'))
.items(filterSchema.required().label('filter')).max(12)
.label('REQ message')
export const closeMessageSchema = Schema.array().ordered(
Schema.string().valid('CLOSE').required(),
subscriptionSchema.required(),
)
subscriptionSchema.required().label('subscriptionId'),
).label('CLOSE message')
export const messageSchema = Schema.alternatives(
eventMessageSchema,
reqMessageSchema,
closeMessageSchema,
)
export const messageSchema = Schema.alternatives()
.conditional(Joi.ref('.'), {
switch: [
{ is: Joi.array().ordered(Joi.string().equal(MessageType.EVENT)).items(Joi.any()), then: eventMessageSchema },
{ is: Joi.array().ordered(Joi.string().equal(MessageType.REQ)).items(Joi.any()), then: reqMessageSchema },
{ is: Joi.array().ordered(Joi.string().equal(MessageType.CLOSE)).items(Joi.any()), then: closeMessageSchema },
],
})

View File

@ -1,6 +0,0 @@
export const deepFreeze = (obj) => {
Object.getOwnPropertyNames(obj)
.filter((prop) => obj[prop] && typeof obj[prop] === 'object')
.forEach(deepFreeze)
Object.freeze(obj)
}

View File

@ -4,7 +4,7 @@ import { applySpec, pipe, prop } from 'ramda'
import { CanonicalEvent, Event } from '../@types/event'
import { SubscriptionFilter } from '../@types/subscription'
import { isGenericTagQuery } from './filter'
import { fromBuffer } from './transforms'
import { fromBuffer } from './stream'
export const serializeEvent = (event: Partial<Event>): CanonicalEvent => [
0,
@ -26,7 +26,7 @@ export const toNostrEvent = applySpec({
})
export const isEventMatchingFilter = (filter: SubscriptionFilter) => (event: Event): boolean => {
const startsWith = (input: string | undefined) => (prefix) => input?.startsWith(prefix)
const startsWith = (input: string) => (prefix) => input.startsWith(prefix)
if (Array.isArray(filter.ids) && (
!filter.ids.some(startsWith(event.id))

View File

@ -1,12 +0,0 @@
import { createHash } from 'crypto'
import { Event } from '../@types/event'
import { serializeEvent } from './serialize-event'
export const getEventHash = (event: Event) => {
const hash = createHash('sha256')
.update(Buffer.from(serializeEvent(event)))
.digest()
return Buffer.from(hash).toString('hex')
}

View File

@ -1,10 +0,0 @@
import { Event } from '../@types/event'
export const serializeEvent = ({
pubkey,
created_at,
kind,
tags,
content,
}: Event): string =>
JSON.stringify([0, pubkey, created_at, kind, tags, content])

24
src/utils/stream.ts Normal file
View File

@ -0,0 +1,24 @@
import { PassThrough, Transform } from 'stream'
export const streamMap = (fn: (chunk) => any) => new Transform({
objectMode: true,
transform(chunk, _encoding, callback) {
callback(null, fn(chunk))
}
})
export const streamEach = (writeFn: (chunk: any) => void) => new PassThrough({
objectMode: true,
write(chunk, _encoding, callback) {
writeFn(chunk)
callback(null)
},
})
export const streamEnd = (finalFn: () => void) => new PassThrough({
objectMode: true,
final(callback) {
finalFn()
callback()
},
})

5
src/utils/transform.ts Normal file
View File

@ -0,0 +1,5 @@
export const toJSON = (input: any) => JSON.stringify(input)
export const toBuffer = (input: any) => Buffer.from(input, 'hex')
export const fromBuffer = (input: Buffer) => input.toString('hex')

View File

@ -1,26 +0,0 @@
import { Transform, Writable } from 'stream'
export const toJSON = (input: any) => JSON.stringify(input)
export const toBuffer = (input: any) => Buffer.from(input, 'hex')
export const fromBuffer = (input: Buffer) => input.toString('hex')
export const streamMap = (fn: (chunk) => any) => new Transform({
objectMode: true,
transform(chunk, _encoding, callback) {
callback(null, fn(chunk))
}
})
export const streamEach = (writeFn: (chunk: any) => void, finalFn: () => void) => new Writable({
objectMode: true,
write(chunk, _encoding, callback) {
writeFn(chunk)
callback()
},
final(callback) {
finalFn()
callback()
},
})

899
test/unit/data/events.ts Normal file
View File

@ -0,0 +1,899 @@
import { Event } from '../../../src/@types/event'
export const getEvents = (): Event[] => [
{
'id': 'e527fe8b0f64a38c6877f943a9e8841074056ba72aceb31a4c85e6d10b27095a',
'pubkey': '55b702c167c85eb1c2d5ab35d68bedd1a35b94c01147364d2395c2f66f35a503',
'created_at': 1564498626,
'kind': 0,
'tags': [],
'content': '{"name":"ottman@minds.io","about":"","picture":"https://feat-2311-nostr.minds.io/icon/1002952989368913934/medium/1564498626/1564498626/1653379539"}',
'sig': 'd1de98733de2b412549aa64454722d9b66ab3c68e9e0d0f9c5d42e7bd54c30a06174364b683d2c8dbb386ff47f31e6cb7e2f3c3498d8819ee80421216c8309a9'
},
{
'id': 'cf8de9db67a1d7203512d1d81e6190f5e53abfdc0ac90275f67172b65a5b09a0',
'pubkey': 'e8b487c079b0f67c695ae6c4c2552a47f38adfa2533cc5926bd2c102942fdcb7',
'created_at': 1645030752,
'kind': 1,
'tags': [['r', 'https://fiatjaf.com']],
'content': 'r',
'sig': '53d12018d036092794366283eca36df4e0cabd014b6e91bbf684c8bb9bbbe9dedafa77b6b928587e11e05e036227598dded8713e8da17d55076e12242b361542'
},
{
'id': '444b1e4cf4eea42d35c7f1be58ab9cf6a942153593251d66e0471084a3430dae',
'pubkey': '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245',
'created_at': 1652470951,
'kind': 2,
'tags': [],
'content': 'wss://relay.damus.io',
'sig': '1d8625765364edffa42f83fa1e53bf3486e7fb94eec065dd0a00b48dd777702fafbfa1063ef27f1dd27b3892132e4d1703fb0da2bfb98b70045f826ee76d5526'
},
{
'id': '0d684e8ec2431de586aa3cafbee2f6d308d19b28805e53deabcac3220e9136a5',
'pubkey': 'f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3',
'created_at': 1660407625,
'kind': 3,
'tags': [
[
'p',
'b34417513f66497d7b0e1a8406b6689ac32afb184027717e57d281ea19186315',
'wss://nostr-relay.untethr.me'
],
[
'p',
'2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5',
'wss://nostr.rocks'
],
[
'p',
'13e7f234ef71ffd63fdf3fec4eaec6fdea9bb850a37ba1a854a62b934c97855e',
'wss://nostr-relay.untethr.me'
],
[
'p',
'40e162e0a8d139c9ef1d1bcba5265d1953be1381fb4acd227d8f3c391f9b9486',
'wss://nostr-relay.untethr.me'
],
[
'p',
'42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d',
'wss://nostr-relay.untethr.me'
],
[
'p',
'3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'ed04f9c719af697ac1c045bfff5f841cdf61a0b0d2170c9970f0ce0a04f708bf',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'76f5960d381e7146b7f374a4a65afa403038441b46933840c71e436facb82ae7',
'wss://nostr.bitcoiner.social'
],
[
'p',
'c697f7f5f59de8ddb93c6b74fdd759ab2dc654bc36315f39770c214607fcd65e',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'd3fe840f672c191849f8500762d81af8a258e673b7ff07cf9ce1211c2d0f493d',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'14347702b99786cc0ee644620a5f71bc6a88e2882491f57c372f1deaed198701',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'cbc5ef6b01cbd1ffa2cb95a954f04c385a936c1a86e1bb9ccdf2cf0f4ebeaccb',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'8ff7a6132ffe1bb3600aa20496ab648f1daf6b50ceaa8054a37e6a0b1f7ee491',
'wss://nostr.bitcoiner.social'
],
[
'p',
'1f7dfb1b51bd4fb5d15245b28d86fab670a677580e2a0633a2cf76509d02471c',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'f5424d002fd0d48fadd6e54879387714c54bfa46535976ff2b385843aaddf8e5',
'wss://nostr.rocks'
],
[
'p',
'9aeb3bb495f09be3799048c3ef76649917efc46a8c8a69fefc31a7d012f6eccb',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'c181af1aca3a13243a9ef9c302d5e988eaec25caa60c9923e5faed097e52cd69',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'a4cb51f4618cfcd16b2d3171c466179bed8e197c43b8598823b04de266cef110',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'1221fd0054a6c8ebd07b39c5eeea388f7f0244409f8cd8649ac22fcd668d02f6',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'f61abb9886e1f4cd5d20419c197d5d7f3649addab24b6a32a2367124ca3194b4',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'b175db709771d32bbe7d8599e0c41f3f8768cc3a8333603d93c6d72d41c42f76',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'57225e0adcbad1fddf8d9ba1f5f36d657f134b7e0ea7aed6c0eb7013e4ef45f1',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'6446d04ecf9e0bb72c5ae218df9fc6c0a273149d9ecbfbe42519c53667b4405a',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'e0d05a5b8c7789eb83f87672f4eb0dca78f99292ab038e5c66f84d97d77b95ae',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'46fcbe3065eaf1ae7811465924e48923363ff3f526bd6f73d7c184b16bd8ce4d',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077'
],
[
'p',
'8d233d8babe9f40f170c5b0706fd4832869e07d040cfcd6b702d57e070aad1cb',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'566516663d91d4fef824eaeccbf9c2631a8d8a2efee8048ca5ee6095e6e5c843',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'0000a0fa65fcccd99e6fd32fc7870339af40f4a94703ea30999fc5c091daa222',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'd987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25'
],
[
'p',
'3878d95db7b854c3a0d3b2d6b7bf9bf28b36162be64326f5521ba71cf3b45a69',
'wss://nostr.rocks'
],
[
'p',
'7f0be893dc501f391260aa2088de28b35280dfd4ae8f8bfa9bdbb7319952755b'
],
[
'p',
'44c39a01cbdeb70905aaa9cbd614a1ef39d0f4386d0dee9d7493e6e680548eb9',
'wss://nostr-relay.untethr.me'
],
[
'p',
'484712e818a8373182c64e53c0d1fb9cec5de96daa2d39424b42d7b0dcd8e6c9'
],
[
'p',
'b2222fc7844fef7b002440b3216213d9b01dcf5e412a604ddfa50967db4d8bd6',
'wss://nostr-relay.untethr.me'
],
[
'p',
'78aa0c9a0fe2d2476469db25f19a293a6606c113fe2e87e17b8ab51cb120dbb7'
],
[
'p',
'9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437',
'wss://nostr.rocks'
],
[
'p',
'57f03c1604d109be088dbac71371b6939833dd24fdcf2886d3382a0479c0d4de'
],
[
'p',
'778fdd199044a2e8dc3cfac3c274f5577ed78c22fb3b5ccb13df6956980eff4c'
],
[
'p',
'e76e705283775febf3d5f4f97662648582d42ff822435924f21a47c8d46c5921',
'wss://nostr-relay.untethr.me'
],
[
'p',
'e794d71b8f7426a291004f592b758438a25d0012e5bb969e53307b3785fd5211',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'88a2c3b420b4a027706a98600d1fd744ac6cfd12e201b74189be5ef4b2b3aa45',
'wss://nostr-relay.untethr.me'
],
[
'p',
'004db7605cfeba09b15625deb77c9369029f370591d68231b7c4dfd43f8f6f4f'
],
[
'p',
'b238e136091cb01cd21606dac1a2f503f504e7e8e7c75d98fcefd30aed084a1c',
'wss://nostr-relay.untethr.me'
],
[
'p',
'32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245'
],
[
'p',
'b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a'
],
[
'p',
'dd81a8bacbab0b5c3007d1672fb8301383b4e9583d431835985057223eb298a5'
],
[
'p',
'ed1d0e1f743a7d19aa2dfb0162df73bacdbc699f67cc55bb91a98c35f7deac69'
],
[
'p',
'b2d1d0fc5b771a7041054ebded57bc3bf20f69ccbb9dc9b8ef432801d247df7c'
],
[
'p',
'd947d8f1be338c5cff194a6630453fa43c924eb9f58c339c68b26b2193efa276'
],
[
'p',
'6112a73a50518ed631dc6804a238525acdf10f26343199bc25ed7c9f5a0685c5'
],
[
'p',
'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793'
],
[
'p',
'1bbb8324577ac089607e45813bac499ebdab4621d029f8c02b2c82b4410fd3f4'
],
[
'p',
'e668a111aa647e63ef587c17fb0e2513d5c2859cd8d389563c7640ffea1fc216'
],
[
'p',
'2508ed2c2ab3f6728a880fafbc0895a2afeacbb74eb69847255fb60564af0d85'
],
[
'p',
'c2bb5d6529095edbfbdbe3f136175c146c6706526325b32da881c7c34c7b1ab8'
],
[
'p',
'8f87ac34eb27a86fc917866fbc9016429bd89cf1d0d27a038a8eaac4c62c63e5'
],
[
'p',
'52cb4b34775fa781b6a964bda0432dbcdfede7a59bf8dfc279cbff0ad8fb09ff'
],
[
'p',
'3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d'
],
[
'p',
'7e88f589d2677ea4a863c72af5d0e85fbe1d3db111667c50d33fa42196a1afc0'
],
[
'p',
'f0bed2e11260f0f77f781db928f40a34c18713fda1918d3be996f91d0776e985'
],
[
'p',
'565152b2d1793a253cba282588a4b287b0ab2acbe7faa7021ea0dced39d33716'
],
[
'p',
'd9c8c00017a2a345c2f32132436a26e1c72cb7a57e7b6b316f62dee2f8bcf8dd'
],
[
'p',
'b28a0714f86fd344a7ecad9566c2e33f8485ef560a702e15c3f537914abc152d'
],
[
'p',
'7e7272c475d920ad408e7a6faf9a123aa7b882cba7151e6105a0fc9d212fb240'
],
[
'p',
'ea42658e9a1291a32d1b74793edaef3d8757589a32b16931cacd85ba5470ea7c'
],
[
'p',
'aff9a9f017f32b2e8b60754a4102db9d9cf9ff2b967804b50e070780aa45c9a8'
],
[
'p',
'b74848fa6f8975f00b04ce12ccbe18673ad1f4511f66d4e5a3a151720fdce62a'
],
[
'p',
'7e3b8e221023e92c297cb35937d88e495de780ac3190c23e1e2e1e6274f43f59'
],
[
'p',
'547fcc5c7e655fe7c83da5a812e6332f0a4779c87bf540d8e75a4edbbf36fe4a'
],
[
'p',
'a12535e8bf4f712211b68f7fe7303d03c3c5cfe8155116d553fe6b8adba85d41'
],
[
'p',
'772405d14585d9d8fe481cef6ce560b83f03c24f0efc179415530d54eee97534'
],
[
'p',
'2163edbd81fa58e64c7e38bf968dda1b2f42811b78ea06accd32007bbb8a018b'
],
[
'p',
'e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3'
],
[
'p',
'e9e4276490374a0daf7759fd5f475deff6ffb9b0fc5fa98c902b5f4b2fe3bba2'
],
[
'p',
'4557aab9aae76a892e01568064a9e262e613690421a79e584b8cc4c5ca9afb7e'
],
[
'p',
'9630f464cca6a5147aa8a35f0bcdd3ce485324e732fd39e09233b1d848238f31'
],
[
'p',
'1265c1c3d41f0f05bf306224ec40628231a5086a2eaa36643b3982a4eba19c9f'
],
[
'p',
'04c915daefee38317fa734444acee390a8269fe5810b2241e5e6dd343dfbecc9'
],
[
'p',
'd3646691ba5b1d796c1e1b3430df00fe1189ec9c232877adde18c8f656af18f0'
],
[
'p',
'b7c66ce6f7bbe034e96be54c2ffc0adf631a889abc0834ba1431171b67c489aa'
],
[
'p',
'8355095016fddbe31fcf1453b26f613553e9758cf2263e190eac8fd96a3d3de9'
],
[
'p',
'06fca9f06f74cf86a16fe4c2feec508700643e2b105b519fd93d35332c51ad53'
],
[
'p',
'6b0d4c8d9dc59e110d380b0429a02891f1341a0fa2ba1b1cf83a3db4d47e3964'
],
[
'p',
'35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f'
],
[
'p',
'dcecb5c4c228e15a1f04305c34b39b7ff67675544cb7dc74dd5c715cf62ada74'
],
[
'p',
'b2c61317687060b2b7e9cb7f7fde04f30bab23e12bf471f8d356000ca2b12b4a'
],
[
'p',
'51fc7209201b1414f721c3d2d2b3430699b1e6317716c5182cc1d7945072e358'
],
[
'p',
'ce5061bfcc16476b9bde3f1d5b3ec7730c4361cf8c827fbd9c14eb8c7003a1de'
],
[
'p',
'0810b5bc4cddc3e7624a1f6acbdccdc95c6e9409c144ce83365ee04a3a63314e'
],
[
'p',
'975bbd239f0b7e25a080675d3db5892492ea9e9c7705c819ba3dafd8de95f3d9'
],
[
'p',
'76f928b303b095a6f17784151acd9a5127d183cb5f989a173b00bd0c12d07e83'
],
[
'p',
'd4d4fdde8ab4924b1e452e896709a3bd236da4c0576274b52af5992d4d34762c'
],
[
'p',
'ac9ec020170155f0feb347f0d777ee5fc38dd1f36353093046323646cff5169f'
],
[
'p',
'd91191e30e00444b942c0e82cad470b32af171764c2275bee0bd99377efd4075'
],
[
'p',
'ea75802dd1c86933c1e20c582541bb283d44c88e3445ed90d4375fc3d973f3a0'
],
[
'p',
'9682c33f9024dadb1bffdf762c3156e26b4aa340de8d06c91ca537fcc0fdb3a9'
],
[
'p',
'a8f14f05c64f9e62bdada89c21a52f09aa5d7948b47ccf52da1be16b0de9efac'
],
[
'p',
'80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78'
],
[
'p',
'b10c0000079a83cf26815dc7538818d8d56a2983e374e30a4143e50060978457'
],
[
'p',
'ae683cd251952448ad0d7b8ed6c2e0f8ab451578250cb35f0c977275b56b056e'
],
[
'p',
'954aaf69c2e7c9fb3f9998f61944ab8ab08ce3c8679ecd985e4486a6eb696217'
],
[
'p',
'd7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731'
],
[
'p',
'104749bc9151a0e54b9845ee50fc4b559439dd1ada006e36a6c49ad3ea16a55c'
],
[
'p',
'cf9413eb6bbe55c8a3c10119ec0635e134fa266f2c50f825d7225da9b92ecc4e'
],
[
'p',
'bae77874946ec111f94be59aef282de092dc4baf213f8ecb8c9e15cb7ed7304e'
],
[
'p',
'44bb2dd1615ed2a527946c41d854995f18866a8feffa88eb375728c20aeea30c'
],
[
'p',
'62903b1ff41559daf9ee98ef1ae67cc52f301bb5ce26d14baba3052f649c3f49'
],
[
'p',
'9a29ee8c3771573e5306bb7701182e970b188ce3552713ca68a157ebc3c0bf75'
],
[
'p',
'e3f0c72e7b653f395f64e03519bae3efeac184bcf0b3f38bdccb62a4d2aa5d30'
],
[
'p',
'9b9f5f1ec13105c8d1c2ea16aa952e98640b170b871420980ea11b18eb1f1e03'
],
[
'p',
'2b36fb6ae1022d0d4eac2a9f13fc2638f3350acc9b07bdca1de43a7c63429644'
],
[
'p',
'f00c952da33c06e02c930f76aba1085021b98075657daaff8ad119edcfde691e'
],
[
'p',
'8837f562e064282e4fb9902ae6062ee436a53236909a68c6d19564df6c208fbe'
],
[
'p',
'f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3'
],
[
'p',
'66e346dfe3a4e572359519f086bf45771a19224343183aa1c86b9f9e31b78ac9'
],
[
'p',
'8c24f2bf7df33aea0f05706162176343f34389d95ca5696dba1c2768887f586f'
],
[
'p',
'343558f07b07ffcb24b27b73812d74d4ff8f46e81ea903f1e7f37d30d907bcfc'
],
[
'p',
'57400e5b11c8b52ed04765df605fe9c30aa50abdeacff49d3de6b58359c907ed'
],
[
'p',
'4535551a40271b059ab92b71e7ab7e8700061a2d91b0d20f313ef82f052eb085'
],
[
'p',
'8431af1a305fd23b869a12ad87118f78d87bec6e2a431e38fd1fabdac281ff45'
],
[
'p',
'4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36'
],
[
'p',
'747adf8e9036ed78b47eca762bf80bc41af34df6da7bd44876cf2d27e6b7dd64'
],
[
'p',
'b832d7fdcf4f6fed87ccfc6e10426710b968d6c260206fecb24aa096879c44ce'
],
[
'p',
'09e935f7c01fda340051a4700cfb9dde533202bdf56808f68cafef6bae07a5bd'
],
[
'p',
'2b26251002f9bdd990da1990bcc378ac5c816f1446e82167819ab60c4b9a6ca9'
],
[
'p',
'2183e94758481d0f124fbd93c56ccaa45e7e545ceeb8d52848f98253f497b975'
],
[
'p',
'2bee8a0f48dcc76df4385df95ee184331e41fbde0731164c6627512b9b34f005'
],
[
'p',
'd0cb47a354003467a3a7cbc50ddc0c29250851f9040656bad9d0ab7adb5b7382'
],
[
'p',
'47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327'
],
[
'p',
'38b07a31f3b23dbeb9f59deb7bec5b993173fb4022206980f3809d0b68abf959'
],
[
'p',
'e6a92d8b6c20426f78bba8510ccdc73df5122814a3bac1d553adebac67a92b27'
],
[
'p',
'ad5aab5be883a571ea37b231cd996d37522e77d0f121cedfd6787b91d848268e'
],
[
'p',
'6d334336f9ba6c35fdc3b87950721b123f56f0d686fe9a5b4c95d2568b2398d8'
],
[
'p',
'c8b430569a2c95aa8d6eceea67f40c16e17f1ac10755fcf17f2ba772f3febd96'
],
[
'p',
'3b6a202702bc8c236ff2900aa564575fe56ae5a9e5b8386d3307c79b392674ab'
],
[
'p',
'd97cd1bcc21e393e5a8b053fba9db385ace78710ba68a6bc7828d57ad82e88bd'
],
[
'p',
'3235036bd0957dfb27ccda02d452d7c763be40c91a1ac082ba6983b25238388c'
],
[
'p',
'b99b149370e4f8533ce53d143af3f39e1f2628a39847f7fdd7544c9585da9299'
],
[
'p',
'e4c47aedea8ea54255f5ba07a77053b24553e9b975435e56da343da19aec7881'
],
[
'p',
'552b4d02f9db02f11bda4b4c1cdefe8852c6c6b6ca0e03b7013f182c854413b7'
],
[
'p',
'3f8e32d654fbc0da5fd570d70381a3e59843b208c5574a74a2305527bce8382b'
],
[
'p',
'84620a7b6a3d42b96b3e8a392fabca1e476e9049188808b0ecf3d64d36efffd1'
],
[
'p',
'047f497e13073d4303383c7abcc296a3b5b5956d243eafa6423c675a831a5cc1'
],
[
'p',
'b875065f96ff58c82e951f543857515798f5e50c6903d9602b425e2cd957f1ce'
],
[
'p',
'edfa27d49d2af37ee331e1225bb6ed1912c6d999281b36d8018ad99bc3573c29'
],
[
'p',
'8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168'
],
[
'p',
'bc1f8b83991f46f6f2f2b4569314d50b229e9f2761716ca56d4572a190801a44'
],
[
'p',
'84fe3febc748470ff1a363db8a375ffa1ff86603f2653d1c3c311ad0a70b5d0c'
],
[
'p',
'd543c820050efd6d2c1536b0990111ac293a4431e6a12929432366e0aa8001e7'
],
[
'p',
'7cf68b47a2b243d06322bfdb6a1c2422fb8b3a18d18a5c90c27b59e8f612553e'
],
[
'p',
'f0c864cf573de171053bef4df3b31c6593337a097fbbd9f20d78506e490c6b64'
],
[
'p',
'3702743c98430ba152e635b081637716a3c949c13ad3ad1e6c80e6e7d41fbc8a'
],
[
'p',
'2a043132d98c2457fb3581fdeddab380a8eda3760b2605f676be5059ed260066'
],
[
'p',
'c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188'
],
[
'p',
'51535ad9f0e13a810f73ea8829a79b3733bd1fffb767c4885990b02f59103a13'
],
[
'p',
'3707f1efc7515524dce41d3bf50bfd9fdaed3494620b5f94fcf16d2766da4ec2'
],
[
'p',
'dbab9040bc1f0c436b0f92f517702498358edc1fde2c7884d0e1036c739d44f3'
],
[
'p',
'904ea00a4a245559d6184be5c6e2cf2c66ea7fc91eb5f1eb5349506d19d63a11'
],
[
'p',
'9ac12013d20fae4f8829ba4e5ba6343e410288d3a0752d6143386d2c1af1f57e'
],
[
'p',
'7bc0ff3de7b2205ed8bc366f7657138eacb5164d43d9580b8f5b47b7e6a7c235'
],
[
'p',
'c5cfda98d01f152b3493d995eed4cdb4d9e55a973925f6f9ea24769a5a21e778'
],
[
'p',
'887645fef0ce0c3c1218d2f5d8e6132a19304cdc57cd20281d082f38cfea0072'
],
[
'p',
'88a502f72f216c93eb840fa805c1a215b97e0800ab2dfa017450d38cb4b60a03'
],
[
'p',
'3f152ab665d1079108529ff6bf0ba48809b6788b22ab8a3d76f7a3f63bec19a0'
],
[
'p',
'27da3f032e0fea007947b0da12f1183630c5a2da79d7202b96f35f16ef6ce48e'
],
[
'p',
'de29897a4a9086a1c5e8f6c7d06691afeda77103eea35eabecbfda21189fa995'
],
[
'p',
'0a2bfced3f7c8a08d88a697da80d7d85f12e69260cf308de27da1f5b6f65bf00'
],
[
'p',
'95405f16211a88c869ec87b684cb450136b7bf2420e236f9ec793385893d01e8'
],
[
'p',
'f9e24c0a9544d119b4f0e31ceac53d1b650c763e378541e1dfde402e350f5792'
],
[
'p',
'7f3bd39154ce2994d67bc89b782c12871bcd7a30093b4700b07c438fb7b906db'
],
[
'p',
'1d914450975db68d850f13a8950abda9dc6a1b140de6460634f839c49f5de958'
],
[
'p',
'545320c902a7c7de8f44c6c3c0e7870b72e8ddfdd203139db18b5d518f6771c1'
],
[
'p',
'e740b0275f467618fdebf8ad54cb597deabbca2a0490d314e509730c50118499'
],
[
'p',
'179744407ac4fda143a8635e7ae9c9eabf3ab107a818a4f740a9e46b39412a42'
],
[
'p',
'2d11d3a3123287b478e19e9ef011bceb48e8f14a0d58e22bd156f35a839c5640'
],
[
'p',
'ce5a47f6328beab97310a27269c4725988ced2aec93fcd3ab01282f667d696c3'
],
[
'p',
'c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86'
],
[
'p',
'e8caa2028a7090ffa85f1afee67451b309ba2f9dee655ec8f7e0a02c29388180'
],
[
'p',
'9c8e6bcf8438812fe44ccd32ba4208b3c72193a944d7e6f68ff311b48a28523e'
],
[
'p',
'7215b2db8754494fd3452b7f2d28b56e23863b95446bf68d79f980a7ad5ec7cd'
]
],
'content': '{"wss://rsslay.fiatjaf.com":{"read":true,"write":false},"wss://nostr-pub.wellorder.net":{"read":true,"write":true},"wss://expensive-relay.fiatjaf.com":{"read":true,"write":true},"wss://nostr.rocks":{"read":true,"write":true},"wss://nostr-relay.untethr.me\\t":{"read":true,"write":true},"wss://relayer.fiatjaf.com":{"read":true,"write":true},"wss://nostr-relay.untethr.me":{"read":true,"write":true},"wss://nostr-relay.wlvs.space":{"read":true,"write":true},"wss://nostr.openchain.fr":{"read":true,"write":true},"wss://relay.futohq.com":{"read":true,"write":true}}',
'sig': 'f5935788cf7a5a402b14f3199f2ecb2f181f710a475693f2866fe3cd8bdaf900ec9edb9f831d23783023e0aa9011fe403fbaa4e4c93562d56ac8f463fd201e3d'
},
{
'id': 'f937a7ca5e109b4527849681ceedea944abd5a2e516d3383cb17e7e189736e3b',
'pubkey': '7225179d3d25d907d843cd3824e6a74799e2b47b0f2fd1cc0250d3589816faa0',
'created_at': 1660432741,
'kind': 4,
'tags': [
[
'p',
'14347702b99786cc0ee644620a5f71bc6a88e2882491f57c372f1deaed198701',
''
]
],
'content': '+of2PlIcxGeMRExh7kpacc4fkZurwj8yL+uChrregn2DDbeSRE2rQV7SG1GQRUn5mq3gtOuX9P8tP0MzJbuXfqBryK2gRKJdyG7Yphmq5gods458VVME2yLMcUjAFU4P?iv=rPLf0PBhDYYub6BiJSiq4w==',
'sig': '632754a45a8556e408ceaa9a8e5c7b443044cb37a1c58126f96c4a44c87c1285e00c8997a7c9bd44325ef8782a4cf494c2bed3d7e5d94385d80c1b1d3795be30'
},
{
pubkey: 'f6f33f0b9cac10e1136c620501721565f561e564554a9a35ad9b190bd743b4c2',
created_at: 1660448789,
kind: 5,
tags: [
[
'e',
'2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5'
]
],
content: '',
sig: 'b6fc44d7b1bcab4ef9b40d3c5a92afce9d778964f5a477437af037aa3dd3de7f7498a1c56ea816e49cf5705252fe8dcd77384bb91580277ff576d60367047ee1',
id: '20942205680e130a7602fd735fe715f52edf814a0b6e6e7f0990a02b257504ed'
},
{
'id': '444cec7f44c53eee60ba62858920c74173aa6bbb76c622f484a88cfcca2e07ad',
'pubkey': '35d26e4690cbe1a898af61cc3515661eb5fa763b57bd0b42e45099c8b32fd50f',
'created_at': 1660449145,
'kind': 5,
'tags': [
[
'e', '9fafc99518ce02cb52a4e3befe82ca84088a79cc45e5340ebf5af042b464d84f'
]
],
'content': 'This is a demonstration of NIP-09.',
'sig': '45cfbfcb202521d87a2d0bf70eabb2533c7993f239065538fa9d336aef74160c072596f1792e95682b2098b9a339df03f1ca480c859a46c6f10543398f12c213'
},
{
'id': '23677e3d035be5de01172de203103e292126d542897086bf797d8794fe6b1081',
'pubkey': '7dbf37fb6692b6c5f792edad1972b5ae5616235622d92cb977ad3d8d71a1da2f',
'created_at': 1660424316,
'kind': 6,
'tags': [
[
'e',
'8da089fad0df548e490d93eccc413ecee63cc9da4901051b0bdcb801032f05d3'
],
[
'p',
'4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077'
]
],
'content': '{"pubkey":"4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077","content":"sometimes people just need a reason to believe ","id":"8da089fad0df548e490d93eccc413ecee63cc9da4901051b0bdcb801032f05d3","created_at":1660406626,"sig":"18ce5648b6c434258cf347c38a2939579ffea1211a1d20e5159c2b8a28960c053607916eeffa71d4d20f7f0b30bb4b34cf7965e254b4c41057730cb13f77b69d","kind":1,"tags":[]}',
'sig': '75f9117d90adc8ac768983cfce19e5156a0f62ecfe6c1e2d33d62ef1c438b83e87551916f1d2e62513f899d706dd54a98af0b5ce5dce3fba299b3e62791e6e8e'
},
{
'id': '1a621c1ff8f6ea2641205bcb8a2908c80f7e70338179ac6f0dab8dfebf748132',
'pubkey': '32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245',
'created_at': 1660438975,
'kind': 7,
'tags': [
[
'e',
'dc191f093c4e8932434aa939431be375a40eded7877ce03b0c549ff98de8460c',
'',
'root'
],
[
'e',
'834c0da081608ba0587f330a0e9038a983bb2f331bd3ca0af13acf923205afd9',
'',
'reply'
],
[
'p',
'c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86'
],
[
'p',
'32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245'
],
[
'e',
'c7499698cb59ab0e1dc3b15fa5ad1373bdb6d45e1a85f6c24da783bd2e13c2db'
],
[
'p',
'2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5'
]
],
'content': '',
'sig': '7bfc0ec98e6adcfc1ea9a8848b1e88ff3ded36175e7b3641791383f9eb88e362aae2909db1fb9138349170035dff63308ce6ba991c98752c1e4dbf8ad0f66583'
}
]

View File

@ -1,300 +1,121 @@
import { expect } from 'chai'
import { IncomingEventMessage } from '../../../src/@types/messages'
import { range } from 'ramda'
import { Event } from '../../../src/@types/event'
import { IncomingMessage } from '../../../src/@types/messages'
import { messageSchema } from '../../../src/schemas/message-schema'
import { validateSchema } from '../../../src/utils/validation'
import { getEvents } from '../data/events'
describe('NIP-01', () => {
let message: IncomingEventMessage
describe('validate message schema', () => {
it('returns message if EVENT message is valid', () => {
message = [
'EVENT',
{
'id': 'f6e771f7380374a4a8616dcc862925d0978ab646be54df6ae479a39228401d16',
'pubkey': '47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327',
'created_at': 1660371895,
'kind': 3,
'tags': [
[
'p',
'3efdaebb1d8923ebd99c9e7ace3b4194ab45512e2be79c1b7d68d9243e0d2681'
],
[
'p',
'47bae3a008414e24b4d91c8c170f7fce777dedc6780a462d010761dca6482327'
],
[
'p',
'32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245'
],
[
'p',
'80482e60178c2ce996da6d67577f56a2b2c47ccb1c84c81f2b7960637cb71b78'
],
[
'p',
'd7f0e3917c466f1e2233e9624fbd6d4bd1392dbcfcaf3574f457569d496cb731'
],
[
'p',
'b1dd5e8ed19644671e8693ca2445c68729249f6d4f2d2d8f072d5e1399ba7ecb'
],
[
'p',
'3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d',
'wss://relay.damus.io'
],
[
'p',
'c7eda660a6bc8270530e82b4a7712acdea2e31dc0a56f8dc955ac009efd97c86',
'wss://relay.damus.io'
],
[
'p',
'e4c47aedea8ea54255f5ba07a77053b24553e9b975435e56da343da19aec7881',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'9211af4fe742043111e923a6235065b1df69acb34df4d894b50f10e5ba57de8b',
'wss://relay.damus.io'
],
[
'p',
'22e804d26ed16b68db5259e78449e96dab5d464c8f470bda3eb1a70467f2c793'
],
[
'p',
'2b5c634536c53974fcc39c9cb0fc598d7bb1900b00fe9d4745144ac79ddfb140'
],
[
'p',
'f61abb9886e1f4cd5d20419c197d5d7f3649addab24b6a32a2367124ca3194b4',
'wss://relay.damus.io'
],
[
'p',
'8355095016fddbe31fcf1453b26f613553e9758cf2263e190eac8fd96a3d3de9',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'489485b5d4254bf11c72abfff3f254e7275e109516a4adf021426c0adc00df5a',
'wss://nostr-pub.wellorder.net'
],
[
'p',
'cdb55b719d18e264364d53b7826422daf05cf11af0ef6fa4076a7e2724b722a8',
'wss://nostr.onsats.org'
],
[
'p',
'38b07a31f3b23dbeb9f59deb7bec5b993173fb4022206980f3809d0b68abf959'
],
[
'p',
'6398e15e3416de093b963ca38783d2a66a9657cb08cbba4f02546cdd55b6f1a4'
],
[
'p',
'ac4e18391f45932c0067e28203d5083a356ce301ab60867de094c94b98358666',
'wss://nostr.onsats.org'
],
[
'p',
'40e162e0a8d139c9ef1d1bcba5265d1953be1381fb4acd227d8f3c391f9b9486'
],
[
'p',
'4d5ce768123563bc583697db5e84841fb528f7b708d966f2e546286ce3c72077'
],
[
'p',
'8bc3c8faf56ef7fea539c3e53192723633c1e6e586194c328bd7ef341da89574'
],
[
'p',
'd987084c48390a290f5d2a34603ae64f55137d9b4affced8c0eae030eb222a25'
],
[
'p',
'52b4a076bcbbbdc3a1aefa3735816cf74993b1b8db202b01c883c58be7fad8bd'
],
[
'p',
'7927bc6e25892729a9c02a1332c409a69b285e143b9d845c54fd9c1fe829e25e'
],
[
'p',
'1221fd0054a6c8ebd07b39c5eeea388f7f0244409f8cd8649ac22fcd668d02f6'
],
[
'p',
'9ec7a778167afb1d30c4833de9322da0c08ba71a69e1911d5578d3144bb56437'
],
[
'p',
'234d39919c1bd120766c4d874e8f34df4c80981236d76cdd95e246b1d01ae10b'
],
[
'p',
'b2d670de53b27691c0c3400225b65c35a26d06093bcc41f48ffc71e0907f9d4a'
],
[
'p',
'd72af1d47e5ab48a9ff112c1ca348c06d11623d9ddb07f19581a37e1c3147fe4'
],
[
'p',
'9aeb3bb495f09be3799048c3ef76649917efc46a8c8a69fefc31a7d012f6eccb'
],
[
'p',
'c5072866b41d6b88ab2ffee16ad7cb648f940867371a7808aaa94cf7d01f4188'
],
[
'p',
'c765522880ce949f2529f7cd090daa007e7a013d72472c085fd4db9355fa8eab'
],
[
'p',
'2ae8e03d89cb52861a0089a2f34c861dfd7f896a87b26fdaa8d84049029f5e56'
],
[
'p',
'cbc5ef6b01cbd1ffa2cb95a954f04c385a936c1a86e1bb9ccdf2cf0f4ebeaccb'
],
[
'p',
'5408e58979e6772bd7dd2830011eaaf4c346ce22650acec1939a7a4d33407a75'
],
[
'p',
'b1576eb99a4774158a32fc5e190afa3ded4da19f51fbfa0b1a1bf6421ea5733a'
],
[
'p',
'6f1a30b7951cab01c7217b673cac807f0195b05b1ab36ad4e6c7a5ee5b05c1ab'
],
[
'p',
'2b36fb6ae1022d0d4eac2a9f13fc2638f3350acc9b07bdca1de43a7c63429644'
],
[
'p',
'42a0825e980b9f97943d2501d99c3a3859d4e68cd6028c02afe58f96ba661a9d'
],
[
'p',
'e37d948a0eee45e6cd113faaad934fcf17a97de2236c655b70650d4252daa9d3'
],
[
'p',
'd3646691ba5b1d796c1e1b3430df00fe1189ec9c232877adde18c8f656af18f0'
],
[
'p',
'146bda4ec6932830503ee4f8e8b626bd7b3a5784232b8240ba15c8cbff9a07cd'
],
[
'p',
'c5cfda98d01f152b3493d995eed4cdb4d9e55a973925f6f9ea24769a5a21e778'
],
[
'p',
'f58708031143f54b521dc4b008533e72fbbbc74b0950b0e268e9143d3945e578'
],
[
'p',
'1f5cd0b7618dcd0b4040e0daa1e6719ae9e4b5c0822fc5f47ed55725e08b6564'
],
[
'p',
'2ef93f01cd2493e04235a6b87b10d3c4a74e2a7eb7c3caf168268f6af73314b5'
],
[
'p',
'4d960b819ff5c4f417431e73e7bf70ad41f181136d1baef47c25d1c8b23b4de2'
],
[
'p',
'4b12f6132a5ba813bdf55bcbf9d1acfefb02dabf67191dad71b455668c429b36'
],
[
'p',
'f43c1f9bff677b8f27b602725ea0ad51af221344f69a6b352a74991a4479bac3'
],
[
'p',
'd7e747f60a16bf0081c0a88184a34086cc13e6edb0662d4e55202531b47be026'
],
[
'p',
'8c0da4862130283ff9e67d889df264177a508974e2feb96de139804ea66d6168'
],
[
'p',
'9f376635bfcc2021daa2ddf5b93420e0a8a468ba35ccf613587948697bc42976'
],
[
'p',
'60d53675f07dee9e7d77910efa44682d87cb532313ba66b8f4449d649172296b'
],
[
'p',
'b9e76546ba06456ed301d9e52bc49fa48e70a6bf2282be7a1ae72947612023dc'
],
[
'p',
'7dbf37fb6692b6c5f792edad1972b5ae5616235622d92cb977ad3d8d71a1da2f'
],
[
'p',
'83f514b1e8c9beb71627094fc387ad141bd7b3a7ef75c52722bdf1d429265f54'
],
[
'p',
'fb019155556a54696af5e5625fc0283fbe519d1dec8b7059e01e8585c2a21798'
],
[
'p',
'16fa0fe9d13191a4349d154356941731db6dfffc4341386eb13818f5a69f0627'
]
],
'content': '{"wss:\\/\\/nostr-pub.wellorder.net\\t":{"write":true,"read":true},"wss:\\/\\/relay.damus.io":{"write":true,"read":true},"wss:\\/\\/nostr.rocks":{"write":true,"read":true},"wss:\\/\\/nostr.onsats.org":{"write":true,"read":true},"wss:\\/\\/relay.nostr.info\\/":{"write":true,"read":true},"wss:\\/\\/rsslay.fiatjaf.com":{"write":true,"read":true},"wss:\\/\\/relayer.fiatjaf.com":{"write":true,"read":true},"ws:\\/\\/192.168.1.103:8889":{"write":true,"read":true}}',
'sig': '4653bc7fd43b76abcbad92ebb105c34d4612deafcdac4820ed97e0ea62ca0afa996bd700988b3971a3590bf4ab40f5e5360c101c638c924782cc803edf1534b2'
}
] as any
let message: IncomingMessage
describe('validateSchema', () => {
describe('EVENT', () => {
let events: Event[]
beforeEach(() => {
events = getEvents()
})
expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message)
it('returns same message if valid', () => {
events.forEach((event) => {
message = [
'EVENT',
event
] as any
const result = validateSchema(messageSchema)(message)
expect(result).not.to.have.property('error')
expect(result).to.have.deep.property('value', message)
})
})
})
it('returns message if CLOSE message is valid', () => {
message = ['CLOSE', 'id'] as any
describe('CLOSE', () => {
it('returns same message if valid', () => {
message = ['CLOSE', 'id'] as any
expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message)
const result = validateSchema(messageSchema)(message)
expect(result).not.to.have.property('error')
expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message)
})
it('returns error if subscription ID is missing', () => {
message = ['CLOSE'] as any
const result = validateSchema(messageSchema)(message)
expect(result).to.have.nested.property('error.message', '"CLOSE message" does not contain [subscriptionId]')
})
})
it('returns message if REQ message is valid', () => {
message = [
'REQ',
'id',
{
ids: ['aa', 'bb', 'cc'],
authors: ['aa', 'bb', 'cc'],
kinds: [0, 1, 2, 3],
since: 1000,
until: 1000,
limit: 100,
'#e': ['aa', 'bb', 'cc'],
'#p': ['dd', 'ee', 'ff'],
'#r': ['00', '11', '22'],
},
] as any
describe('REQ', () => {
beforeEach(() => {
message = [
'REQ',
'id',
{
ids: ['aa', 'bb', 'cc'],
authors: ['aa', 'bb', 'cc'],
kinds: [0, 1, 2, 3],
since: 1000,
until: 1000,
limit: 100,
'#e': ['aa', 'bb', 'cc'],
'#p': ['dd', 'ee', 'ff'],
'#r': ['00', '11', '22'],
},
{
ids: ['aa', 'bb', 'cc'],
authors: ['aa', 'bb', 'cc'],
kinds: [0, 1, 2, 3],
since: 1000,
until: 1000,
limit: 100,
'#e': ['aa', 'bb', 'cc'],
'#p': ['dd', 'ee', 'ff'],
'#r': ['00', '11', '22'],
},
] as any
})
expect(validateSchema(messageSchema)(message)).to.have.deep.property('value', message)
it('returns same message if valid', () => {
const result = validateSchema(messageSchema)(message)
expect(result).not.to.have.property('error')
expect(result).to.have.deep.property('value', message)
})
it('returns error if subscription Id is missing', () => {
message[1] = null
const result = validateSchema(messageSchema)(message)
expect(result).to.have.nested.property('error.message', '"subscriptionId" must be a string')
})
it('returns error if filter is not an object', () => {
message[2] = null
const result = validateSchema(messageSchema)(message)
expect(result).to.have.nested.property('error.message', '"filter" must be of type object')
})
it('returns error if filter is missing', () => {
(message as any[]).splice(2, 2)
const result = validateSchema(messageSchema)(message)
expect(result).to.have.nested.property('error.message', '"REQ message" does not contain [filter]')
})
it('returns error if there are too many filters', () => {
(message as any[]).splice(2, 2);
(message as any[]).push(...range(0, 11).map(() => ({})))
const result = validateSchema(messageSchema)(message)
expect(result).to.have.nested.property('error.message', '"REQ message" must contain less than or equal to 12 items')
})
})
})
})

View File

@ -1,7 +1,7 @@
import { expect } from 'chai'
import { Event, CanonicalEvent } from '../../src/@types/event'
import { isEphemeralEvent, isEventIdValid, isEventMatchingFilter, isEventSignatureValid, isReplaceableEvent, serializeEvent } from '../../src/utils/event'
import { EventKinds } from '../../src/constants/base'
import { Event, CanonicalEvent } from '../../../src/@types/event'
import { isEphemeralEvent, isEventIdValid, isEventMatchingFilter, isEventSignatureValid, isNullEvent, isReplaceableEvent, serializeEvent } from '../../../src/utils/event'
import { EventKinds } from '../../../src/constants/base'
describe('NIP-01', () => {
describe('serializeEvent', () => {
@ -320,3 +320,13 @@ describe('NIP-16', () => {
})
})
})
describe('isNullEvent', () => {
it('returns true if kind equals max safe integer', () => {
expect(isNullEvent({ kind: Number.MAX_SAFE_INTEGER } as any)).to.be.true
})
it('returns false if kind does not equal max safe integer', () => {
expect(isNullEvent({ kind: Number.MAX_SAFE_INTEGER - 1 } as any)).to.be.false
})
})

View File

@ -0,0 +1,57 @@
import * as chai from 'chai'
import * as sinon from 'sinon'
import sinonChai from 'sinon-chai'
import { PassThrough } from 'stream'
import { streamEach, streamEnd, streamMap } from '../../../src/utils/stream'
chai.use(sinonChai)
const { expect } = chai
describe('streamMap', () => {
it('transforms chunk with given function', () => {
const spy = sinon.spy()
const sum = ({ a, b }: { a: number, b: number }) => ({ sum: a + b })
const stream = streamMap(sum)
stream.on('data', spy)
stream.write({ a: 1, b: 2 })
stream.write({ a: 10, b: 20 })
stream.end()
expect(spy).to.have.been.calledTwice
expect(spy.firstCall).to.have.been.calledWithExactly({ sum: 3 })
expect(spy.secondCall).to.have.been.calledWithExactly({ sum: 30 })
})
})
describe('streamEach', () => {
it('calls given function for each value in stream', () => {
const spy = sinon.spy()
const stream = streamEach(spy)
stream.write({ a: 1 })
stream.write({ b: 2 })
stream.end()
expect(spy).to.have.been.calledTwice
expect(spy.firstCall).to.have.been.calledWithExactly({ a: 1 })
expect(spy.secondCall).to.have.been.calledWithExactly({ b: 2 })
})
})
describe('streamEnd', () => {
it('calls given function for each value in stream', () => {
const spy = sinon.spy()
const stream = streamEnd(spy)
stream.write({ a: 1 })
stream.write({ b: 2 })
stream.end()
stream.end()
expect(spy).to.have.been.calledOnce
})
})

View File

@ -0,0 +1,21 @@
import { expect } from 'chai'
import { fromBuffer, toBuffer, toJSON } from '../../../src/utils/transform'
describe('toJSON', () => {
it('returns given value JSON stringified', () => {
expect(toJSON({ a: 1 })).to.equal('{"a":1}')
})
})
describe('toBuffer', () => {
it('returns buffer given a hex string', () => {
expect(toBuffer('aa55')).to.deep.equal(Buffer.from([0xAA, 0x55]))
})
})
describe('fromBuffer', () => {
it('returns given value JSON stringified', () => {
expect(fromBuffer(Buffer.from('aa55', 'hex'))).to.equal('aa55')
})
})

View File

@ -0,0 +1,32 @@
import { expect } from 'chai'
import Joi from 'joi'
import { attemptValidation, validateSchema } from '../../../src/utils/validation'
describe('attemptValidation', () => {
it('returns value if given value matches schema', () => {
const schema = Joi.string()
expect(attemptValidation(schema)('string')).to.equal('string')
})
it('throws error if given value does not match schema', () => {
const schema = Joi.string()
expect(() => attemptValidation(schema)(1)).to.throw(Joi.ValidationError)
})
})
describe('validateSchema', () => {
it('returns value property with given value if it matches schema', () => {
const schema = Joi.string()
expect(validateSchema(schema)('string')).to.have.property('value', 'string')
})
it('returns error property with ValidationError if given value does not match schema', () => {
const schema = Joi.string()
expect(validateSchema(schema)(1)).to.have.property('error').and.be.an.instanceOf(Joi.ValidationError)
})
})