zaps
This commit is contained in:
parent
e07a856deb
commit
ddba968541
11 changed files with 707 additions and 65 deletions
505
package-lock.json
generated
505
package-lock.json
generated
|
|
@ -1,21 +1,25 @@
|
|||
{
|
||||
"name": "nostri.chat",
|
||||
"version": "0.1.1",
|
||||
"version": "0.1.2",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "nostri.chat",
|
||||
"version": "0.1.1",
|
||||
"version": "0.1.2",
|
||||
"dependencies": {
|
||||
"@nostr-connect/connect": "^0.2.3",
|
||||
"@rollup/plugin-commonjs": "^24.0.1",
|
||||
"@rollup/plugin-json": "^6.0.0",
|
||||
"@rollup/plugin-typescript": "^11.0.0",
|
||||
"@sveltejs/adapter-node": "^1.1.7",
|
||||
"@tailwindcss/forms": "^0.5.3",
|
||||
"@tailwindcss/typography": "^0.5.9",
|
||||
"emoji-regex": "^10.2.1",
|
||||
"eventemitter3": "^5.0.0",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"nostr": "^0.2.7",
|
||||
"nostr-dev-kit": "file:../../nostr/ndk/nostr-dev-kit",
|
||||
"nostr-tools": "^1.2.1",
|
||||
"rollup-plugin-css-only": "^4.3.0",
|
||||
"rollup-plugin-esformatter": "^3.0.0",
|
||||
|
|
@ -27,6 +31,8 @@
|
|||
"svelte-qr": "^1.0.0",
|
||||
"svelte-scrollto": "^0.2.0",
|
||||
"uuid": "^9.0.0",
|
||||
"webln": "^0.3.2",
|
||||
"websocket-polyfill": "^0.0.3",
|
||||
"ws": "^8.12.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
@ -46,6 +52,24 @@
|
|||
"vite": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"../../nostr/ndk/nostr-dev-kit": {
|
||||
"version": "0.0.3",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"eventemitter3": "^5.0.0",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"node-fetch": "^3.3.1",
|
||||
"nostr-tools": "^1.6.0",
|
||||
"websocket-polyfill": "^0.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jest": "^29.5.0",
|
||||
"@types/node": "^14.11.2",
|
||||
"gts": "^3.1.1",
|
||||
"jest": "^29.5.0",
|
||||
"typescript": "~4.7.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.18.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
|
||||
|
|
@ -484,24 +508,24 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@sveltejs/kit": {
|
||||
"version": "1.3.7",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.3.7.tgz",
|
||||
"integrity": "sha512-H0V8qpd7sax/f/i90lSBEVjubuCkex9M1KvARdptwirLDL9qtJXRUClK25zrDi9IpqIMtbxYnZmfiaaTLcxTGQ==",
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.14.0.tgz",
|
||||
"integrity": "sha512-4e/cZT0z4IppEkqNvMrurGz6VE1gScukFU7XqwTL/yrGJGXHqS9D7RvsOcE1hASsgrMu6w/fKTIhxT5oN0K1Jw==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.0",
|
||||
"@types/cookie": "^0.5.1",
|
||||
"cookie": "^0.5.0",
|
||||
"devalue": "^4.2.3",
|
||||
"devalue": "^4.3.0",
|
||||
"esm-env": "^1.0.0",
|
||||
"kleur": "^4.1.5",
|
||||
"magic-string": "^0.27.0",
|
||||
"magic-string": "^0.30.0",
|
||||
"mime": "^3.0.0",
|
||||
"sade": "^1.8.1",
|
||||
"set-cookie-parser": "^2.5.1",
|
||||
"sirv": "^2.0.2",
|
||||
"tiny-glob": "^0.2.9",
|
||||
"undici": "5.16.0"
|
||||
"undici": "5.21.0"
|
||||
},
|
||||
"bin": {
|
||||
"svelte-kit": "svelte-kit.js"
|
||||
|
|
@ -514,6 +538,17 @@
|
|||
"vite": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@sveltejs/kit/node_modules/magic-string": {
|
||||
"version": "0.30.0",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
|
||||
"integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.4.13"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@sveltejs/package": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-1.0.2.tgz",
|
||||
|
|
@ -590,6 +625,14 @@
|
|||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/chrome": {
|
||||
"version": "0.0.74",
|
||||
"resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.74.tgz",
|
||||
"integrity": "sha512-hzosS5CkQcIKCgxcsV2AzbJ36KNxG/Db2YEN/erEu7Boprg+KpMDLBQqKFmSo+JkQMGqRcicUyqCowJpuT+C6A==",
|
||||
"dependencies": {
|
||||
"@types/filesystem": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/cookie": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
|
||||
|
|
@ -601,6 +644,19 @@
|
|||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
|
||||
"integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ=="
|
||||
},
|
||||
"node_modules/@types/filesystem": {
|
||||
"version": "0.0.32",
|
||||
"resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz",
|
||||
"integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==",
|
||||
"dependencies": {
|
||||
"@types/filewriter": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/filewriter": {
|
||||
"version": "0.0.29",
|
||||
"resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.29.tgz",
|
||||
"integrity": "sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "18.11.18",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
|
||||
|
|
@ -921,6 +977,18 @@
|
|||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
|
||||
},
|
||||
"node_modules/bufferutil": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz",
|
||||
"integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"node-gyp-build": "^4.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.14.2"
|
||||
}
|
||||
},
|
||||
"node_modules/builtin-modules": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
|
||||
|
|
@ -1235,6 +1303,15 @@
|
|||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/d": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
||||
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
|
||||
"dependencies": {
|
||||
"es5-ext": "^0.10.50",
|
||||
"type": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
|
|
@ -1300,10 +1377,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/devalue": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-4.2.3.tgz",
|
||||
"integrity": "sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ==",
|
||||
"license": "MIT"
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz",
|
||||
"integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA=="
|
||||
},
|
||||
"node_modules/didyoumean": {
|
||||
"version": "1.2.2",
|
||||
|
|
@ -1402,6 +1478,11 @@
|
|||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
|
||||
"integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "10.2.1",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
|
||||
"integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA=="
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
|
||||
|
|
@ -1410,11 +1491,44 @@
|
|||
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/es5-ext": {
|
||||
"version": "0.10.62",
|
||||
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
|
||||
"integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"es6-iterator": "^2.0.3",
|
||||
"es6-symbol": "^3.1.3",
|
||||
"next-tick": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/es6-iterator": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
|
||||
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
|
||||
"dependencies": {
|
||||
"d": "1",
|
||||
"es5-ext": "^0.10.35",
|
||||
"es6-symbol": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/es6-promise": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
|
||||
"integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="
|
||||
},
|
||||
"node_modules/es6-symbol": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
|
||||
"integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
|
||||
"dependencies": {
|
||||
"d": "^1.0.1",
|
||||
"ext": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.16.17",
|
||||
"hasInstallScript": true,
|
||||
|
|
@ -1924,6 +2038,19 @@
|
|||
"node": ">=0.8.x"
|
||||
}
|
||||
},
|
||||
"node_modules/ext": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
|
||||
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
|
||||
"dependencies": {
|
||||
"type": "^2.7.2"
|
||||
}
|
||||
},
|
||||
"node_modules/ext/node_modules/type": {
|
||||
"version": "2.7.2",
|
||||
"resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
|
||||
"integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
|
||||
},
|
||||
"node_modules/fast-glob": {
|
||||
"version": "3.2.12",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
|
||||
|
|
@ -2251,6 +2378,11 @@
|
|||
"@types/estree": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
|
||||
},
|
||||
"node_modules/isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
|
|
@ -2283,6 +2415,14 @@
|
|||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/light-bolt11-decoder": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/light-bolt11-decoder/-/light-bolt11-decoder-3.0.0.tgz",
|
||||
"integrity": "sha512-AKvOigD2pmC8ktnn2TIqdJu0K0qk6ukUmTvHwF3JNkm8uWCqt18Ijn33A/a7gaRZ4PghJ59X+8+MXrzLKdBTmQ==",
|
||||
"dependencies": {
|
||||
"@scure/base": "1.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/lilconfig": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
|
||||
|
|
@ -2567,6 +2707,11 @@
|
|||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/next-tick": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
|
||||
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
|
||||
},
|
||||
"node_modules/no-case": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
|
||||
|
|
@ -2584,6 +2729,16 @@
|
|||
"integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==",
|
||||
"deprecated": "Switch to namespaced @noble/secp256k1 for security and feature updates"
|
||||
},
|
||||
"node_modules/node-gyp-build": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
|
||||
"integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
|
||||
"bin": {
|
||||
"node-gyp-build": "bin.js",
|
||||
"node-gyp-build-optional": "optional.js",
|
||||
"node-gyp-build-test": "build-test.js"
|
||||
}
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
|
||||
|
|
@ -2627,6 +2782,10 @@
|
|||
"ws": "^8.8.1"
|
||||
}
|
||||
},
|
||||
"node_modules/nostr-dev-kit": {
|
||||
"resolved": "../../nostr/ndk/nostr-dev-kit",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/nostr-tools": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-1.7.4.tgz",
|
||||
|
|
@ -4408,6 +4567,24 @@
|
|||
"devOptional": true,
|
||||
"license": "0BSD"
|
||||
},
|
||||
"node_modules/tstl": {
|
||||
"version": "2.5.13",
|
||||
"resolved": "https://registry.npmjs.org/tstl/-/tstl-2.5.13.tgz",
|
||||
"integrity": "sha512-h9wayHHFI5+yqt8iau0vqH96cTNhezhZ/Fk/hrIdpfkiMu3lg9nzyvMfs5bIdX51IVzZO6DudLqhkL/rVXpT6g=="
|
||||
},
|
||||
"node_modules/type": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
|
||||
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
|
||||
},
|
||||
"node_modules/typedarray-to-buffer": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
|
||||
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
|
||||
"dependencies": {
|
||||
"is-typedarray": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "4.9.5",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
|
||||
|
|
@ -4421,8 +4598,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/undici": {
|
||||
"version": "5.16.0",
|
||||
"license": "MIT",
|
||||
"version": "5.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz",
|
||||
"integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==",
|
||||
"dependencies": {
|
||||
"busboy": "^1.6.0"
|
||||
},
|
||||
|
|
@ -4466,6 +4644,18 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/utf-8-validate": {
|
||||
"version": "5.0.10",
|
||||
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
|
||||
"integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"node-gyp-build": "^4.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.14.2"
|
||||
}
|
||||
},
|
||||
"node_modules/util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
|
|
@ -4556,6 +4746,52 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/webln": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/webln/-/webln-0.3.2.tgz",
|
||||
"integrity": "sha512-YYT83aOCLup2AmqvJdKtdeBTaZpjC6/JDMe8o6x1kbTYWwiwrtWHyO//PAsPixF3jwFsAkj5DmiceB6w/QSe7Q==",
|
||||
"dependencies": {
|
||||
"@types/chrome": "^0.0.74"
|
||||
}
|
||||
},
|
||||
"node_modules/websocket": {
|
||||
"version": "1.0.34",
|
||||
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz",
|
||||
"integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==",
|
||||
"dependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"debug": "^2.2.0",
|
||||
"es5-ext": "^0.10.50",
|
||||
"typedarray-to-buffer": "^3.1.5",
|
||||
"utf-8-validate": "^5.0.2",
|
||||
"yaeti": "^0.0.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/websocket-polyfill": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/websocket-polyfill/-/websocket-polyfill-0.0.3.tgz",
|
||||
"integrity": "sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg==",
|
||||
"dependencies": {
|
||||
"tstl": "^2.0.7",
|
||||
"websocket": "^1.0.28"
|
||||
}
|
||||
},
|
||||
"node_modules/websocket/node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"dependencies": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/websocket/node_modules/ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
},
|
||||
"node_modules/which": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||
|
|
@ -4600,6 +4836,14 @@
|
|||
"node": ">=0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/yaeti": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
|
||||
"integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==",
|
||||
"engines": {
|
||||
"node": ">=0.10.32"
|
||||
}
|
||||
},
|
||||
"node_modules/yaml": {
|
||||
"version": "1.10.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||
|
|
@ -4903,23 +5147,33 @@
|
|||
}
|
||||
},
|
||||
"@sveltejs/kit": {
|
||||
"version": "1.3.7",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.3.7.tgz",
|
||||
"integrity": "sha512-H0V8qpd7sax/f/i90lSBEVjubuCkex9M1KvARdptwirLDL9qtJXRUClK25zrDi9IpqIMtbxYnZmfiaaTLcxTGQ==",
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.14.0.tgz",
|
||||
"integrity": "sha512-4e/cZT0z4IppEkqNvMrurGz6VE1gScukFU7XqwTL/yrGJGXHqS9D7RvsOcE1hASsgrMu6w/fKTIhxT5oN0K1Jw==",
|
||||
"requires": {
|
||||
"@sveltejs/vite-plugin-svelte": "^2.0.0",
|
||||
"@types/cookie": "^0.5.1",
|
||||
"cookie": "^0.5.0",
|
||||
"devalue": "^4.2.3",
|
||||
"devalue": "^4.3.0",
|
||||
"esm-env": "^1.0.0",
|
||||
"kleur": "^4.1.5",
|
||||
"magic-string": "^0.27.0",
|
||||
"magic-string": "^0.30.0",
|
||||
"mime": "^3.0.0",
|
||||
"sade": "^1.8.1",
|
||||
"set-cookie-parser": "^2.5.1",
|
||||
"sirv": "^2.0.2",
|
||||
"tiny-glob": "^0.2.9",
|
||||
"undici": "5.16.0"
|
||||
"undici": "5.21.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"magic-string": {
|
||||
"version": "0.30.0",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
|
||||
"integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
|
||||
"requires": {
|
||||
"@jridgewell/sourcemap-codec": "^1.4.13"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@sveltejs/package": {
|
||||
|
|
@ -4971,6 +5225,14 @@
|
|||
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
|
||||
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
|
||||
},
|
||||
"@types/chrome": {
|
||||
"version": "0.0.74",
|
||||
"resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.74.tgz",
|
||||
"integrity": "sha512-hzosS5CkQcIKCgxcsV2AzbJ36KNxG/Db2YEN/erEu7Boprg+KpMDLBQqKFmSo+JkQMGqRcicUyqCowJpuT+C6A==",
|
||||
"requires": {
|
||||
"@types/filesystem": "*"
|
||||
}
|
||||
},
|
||||
"@types/cookie": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
|
||||
|
|
@ -4981,6 +5243,19 @@
|
|||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
|
||||
"integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ=="
|
||||
},
|
||||
"@types/filesystem": {
|
||||
"version": "0.0.32",
|
||||
"resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.32.tgz",
|
||||
"integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==",
|
||||
"requires": {
|
||||
"@types/filewriter": "*"
|
||||
}
|
||||
},
|
||||
"@types/filewriter": {
|
||||
"version": "0.0.29",
|
||||
"resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.29.tgz",
|
||||
"integrity": "sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "18.11.18",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
|
||||
|
|
@ -5225,6 +5500,14 @@
|
|||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
|
||||
},
|
||||
"bufferutil": {
|
||||
"version": "4.0.7",
|
||||
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz",
|
||||
"integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==",
|
||||
"requires": {
|
||||
"node-gyp-build": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"builtin-modules": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
|
||||
|
|
@ -5437,6 +5720,15 @@
|
|||
"css-tree": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"d": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
|
||||
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
|
||||
"requires": {
|
||||
"es5-ext": "^0.10.50",
|
||||
"type": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "4.3.4",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||
|
|
@ -5477,9 +5769,9 @@
|
|||
}
|
||||
},
|
||||
"devalue": {
|
||||
"version": "4.2.3",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-4.2.3.tgz",
|
||||
"integrity": "sha512-JG6Q248aN0pgFL57e3zqTVeFraBe+5W2ugvv1mLXsJP6YYIYJhRZhAl7QP8haJrqob6X10F9NEkuCvNILZTPeQ=="
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz",
|
||||
"integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA=="
|
||||
},
|
||||
"didyoumean": {
|
||||
"version": "1.2.2",
|
||||
|
|
@ -5550,16 +5842,50 @@
|
|||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
|
||||
"integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA=="
|
||||
},
|
||||
"emoji-regex": {
|
||||
"version": "10.2.1",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
|
||||
"integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA=="
|
||||
},
|
||||
"entities": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
|
||||
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
|
||||
},
|
||||
"es5-ext": {
|
||||
"version": "0.10.62",
|
||||
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
|
||||
"integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
|
||||
"requires": {
|
||||
"es6-iterator": "^2.0.3",
|
||||
"es6-symbol": "^3.1.3",
|
||||
"next-tick": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"es6-iterator": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
|
||||
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
|
||||
"requires": {
|
||||
"d": "1",
|
||||
"es5-ext": "^0.10.35",
|
||||
"es6-symbol": "^3.1.1"
|
||||
}
|
||||
},
|
||||
"es6-promise": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
|
||||
"integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg=="
|
||||
},
|
||||
"es6-symbol": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
|
||||
"integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
|
||||
"requires": {
|
||||
"d": "^1.0.1",
|
||||
"ext": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"esbuild": {
|
||||
"version": "0.16.17",
|
||||
"requires": {
|
||||
|
|
@ -5832,6 +6158,21 @@
|
|||
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
|
||||
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
|
||||
},
|
||||
"ext": {
|
||||
"version": "1.7.0",
|
||||
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
|
||||
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
|
||||
"requires": {
|
||||
"type": "^2.7.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"type": {
|
||||
"version": "2.7.2",
|
||||
"resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
|
||||
"integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"fast-glob": {
|
||||
"version": "3.2.12",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
|
||||
|
|
@ -6067,6 +6408,11 @@
|
|||
"@types/estree": "*"
|
||||
}
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
|
||||
},
|
||||
"isexe": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
||||
|
|
@ -6092,6 +6438,14 @@
|
|||
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
|
||||
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="
|
||||
},
|
||||
"light-bolt11-decoder": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/light-bolt11-decoder/-/light-bolt11-decoder-3.0.0.tgz",
|
||||
"integrity": "sha512-AKvOigD2pmC8ktnn2TIqdJu0K0qk6ukUmTvHwF3JNkm8uWCqt18Ijn33A/a7gaRZ4PghJ59X+8+MXrzLKdBTmQ==",
|
||||
"requires": {
|
||||
"@scure/base": "1.1.1"
|
||||
}
|
||||
},
|
||||
"lilconfig": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
|
||||
|
|
@ -6297,6 +6651,11 @@
|
|||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
|
||||
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
|
||||
},
|
||||
"next-tick": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
|
||||
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
|
||||
},
|
||||
"no-case": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
|
||||
|
|
@ -6312,6 +6671,11 @@
|
|||
"resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz",
|
||||
"integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg=="
|
||||
},
|
||||
"node-gyp-build": {
|
||||
"version": "4.6.0",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
|
||||
"integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ=="
|
||||
},
|
||||
"node-releases": {
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz",
|
||||
|
|
@ -6342,6 +6706,21 @@
|
|||
"ws": "^8.8.1"
|
||||
}
|
||||
},
|
||||
"nostr-dev-kit": {
|
||||
"version": "file:../../nostr/ndk/nostr-dev-kit",
|
||||
"requires": {
|
||||
"@types/jest": "^29.5.0",
|
||||
"@types/node": "^14.11.2",
|
||||
"eventemitter3": "^5.0.0",
|
||||
"gts": "^3.1.1",
|
||||
"jest": "^29.5.0",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"node-fetch": "^3.3.1",
|
||||
"nostr-tools": "^1.6.0",
|
||||
"typescript": "~4.7.0",
|
||||
"websocket-polyfill": "^0.0.3"
|
||||
}
|
||||
},
|
||||
"nostr-tools": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-1.7.4.tgz",
|
||||
|
|
@ -7526,13 +7905,33 @@
|
|||
"integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
|
||||
"devOptional": true
|
||||
},
|
||||
"tstl": {
|
||||
"version": "2.5.13",
|
||||
"resolved": "https://registry.npmjs.org/tstl/-/tstl-2.5.13.tgz",
|
||||
"integrity": "sha512-h9wayHHFI5+yqt8iau0vqH96cTNhezhZ/Fk/hrIdpfkiMu3lg9nzyvMfs5bIdX51IVzZO6DudLqhkL/rVXpT6g=="
|
||||
},
|
||||
"type": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
|
||||
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
|
||||
},
|
||||
"typedarray-to-buffer": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
|
||||
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
|
||||
"requires": {
|
||||
"is-typedarray": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"typescript": {
|
||||
"version": "4.9.5",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
|
||||
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="
|
||||
},
|
||||
"undici": {
|
||||
"version": "5.16.0",
|
||||
"version": "5.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz",
|
||||
"integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==",
|
||||
"requires": {
|
||||
"busboy": "^1.6.0"
|
||||
}
|
||||
|
|
@ -7554,6 +7953,14 @@
|
|||
"os-homedir": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"version": "5.0.10",
|
||||
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz",
|
||||
"integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==",
|
||||
"requires": {
|
||||
"node-gyp-build": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
|
|
@ -7592,6 +7999,51 @@
|
|||
"integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==",
|
||||
"requires": {}
|
||||
},
|
||||
"webln": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/webln/-/webln-0.3.2.tgz",
|
||||
"integrity": "sha512-YYT83aOCLup2AmqvJdKtdeBTaZpjC6/JDMe8o6x1kbTYWwiwrtWHyO//PAsPixF3jwFsAkj5DmiceB6w/QSe7Q==",
|
||||
"requires": {
|
||||
"@types/chrome": "^0.0.74"
|
||||
}
|
||||
},
|
||||
"websocket": {
|
||||
"version": "1.0.34",
|
||||
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz",
|
||||
"integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==",
|
||||
"requires": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"debug": "^2.2.0",
|
||||
"es5-ext": "^0.10.50",
|
||||
"typedarray-to-buffer": "^3.1.5",
|
||||
"utf-8-validate": "^5.0.2",
|
||||
"yaeti": "^0.0.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"websocket-polyfill": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/websocket-polyfill/-/websocket-polyfill-0.0.3.tgz",
|
||||
"integrity": "sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg==",
|
||||
"requires": {
|
||||
"tstl": "^2.0.7",
|
||||
"websocket": "^1.0.28"
|
||||
}
|
||||
},
|
||||
"which": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
|
||||
|
|
@ -7616,6 +8068,11 @@
|
|||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||
},
|
||||
"yaeti": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
|
||||
"integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug=="
|
||||
},
|
||||
"yaml": {
|
||||
"version": "1.10.2",
|
||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "nostri.chat",
|
||||
"version": "0.1.2",
|
||||
"version": "0.1.5",
|
||||
"scripts": {
|
||||
"dev": "vite dev",
|
||||
"build": "svelte-kit sync && svelte-package",
|
||||
|
|
@ -26,12 +26,16 @@
|
|||
"dependencies": {
|
||||
"@nostr-connect/connect": "^0.2.3",
|
||||
"@rollup/plugin-commonjs": "^24.0.1",
|
||||
"@rollup/plugin-json": "^6.0.0",
|
||||
"@rollup/plugin-typescript": "^11.0.0",
|
||||
"@sveltejs/adapter-node": "^1.1.7",
|
||||
"@tailwindcss/forms": "^0.5.3",
|
||||
"@tailwindcss/typography": "^0.5.9",
|
||||
"emoji-regex": "^10.2.1",
|
||||
"eventemitter3": "^5.0.0",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"nostr": "^0.2.7",
|
||||
"nostr-dev-kit": "file:../../nostr/ndk/nostr-dev-kit",
|
||||
"nostr-tools": "^1.2.1",
|
||||
"rollup-plugin-css-only": "^4.3.0",
|
||||
"rollup-plugin-esformatter": "^3.0.0",
|
||||
|
|
@ -43,6 +47,8 @@
|
|||
"svelte-qr": "^1.0.0",
|
||||
"svelte-scrollto": "^0.2.0",
|
||||
"uuid": "^9.0.0",
|
||||
"webln": "^0.3.2",
|
||||
"websocket-polyfill": "^0.0.3",
|
||||
"ws": "^8.12.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import resolve from "@rollup/plugin-node-resolve";
|
|||
import commonjs from "@rollup/plugin-commonjs";
|
||||
import css from "rollup-plugin-css-only";
|
||||
import serve from "rollup-plugin-serve";
|
||||
import json from "@rollup/plugin-json";
|
||||
import livereload from "rollup-plugin-livereload";
|
||||
import { terser } from "rollup-plugin-terser";
|
||||
import esformatter from "rollup-plugin-esformatter";
|
||||
|
|
@ -17,7 +18,7 @@ const production = true; //false;// !process.env.ROLLUP_WATCH;
|
|||
export default {
|
||||
input: "src/widget.js",
|
||||
output: {
|
||||
file: "public/bundle.js",
|
||||
file: "static/public/bundle.js",
|
||||
format: "iife",
|
||||
name: "app",
|
||||
sourcemap: production,
|
||||
|
|
@ -42,6 +43,7 @@ export default {
|
|||
dedupe: ["svelte"],
|
||||
preferBuiltins: false
|
||||
}),
|
||||
json(),
|
||||
commonjs(),
|
||||
|
||||
// export CSS in separate file for better performance
|
||||
|
|
@ -64,4 +66,4 @@ export default {
|
|||
// minify bundles in production mode
|
||||
// production && terser(),
|
||||
],
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { chatAdapter, chatData, selectedMessage } from './lib/store';
|
||||
import { chatAdapter, chatData, selectedMessage, zapsPerMessage } from './lib/store';
|
||||
import { onMount } from 'svelte';
|
||||
import NostrNote from './NostrNote.svelte';
|
||||
import * as animateScroll from "svelte-scrollto";
|
||||
|
|
@ -129,6 +129,14 @@
|
|||
})
|
||||
}
|
||||
|
||||
function zapReceived(zap) {
|
||||
const event = events.find(event => event.id === zap.zappedEvent);
|
||||
if (!event) { return; }
|
||||
|
||||
if (!$zapsPerMessage[event.id]) $zapsPerMessage[event.id] = [];
|
||||
$zapsPerMessage[event.id].push(zap);
|
||||
}
|
||||
|
||||
function reactionReceived(reaction) {
|
||||
const event = events.find(event => event.id === reaction.id);
|
||||
if (!event) { return; }
|
||||
|
|
@ -148,6 +156,7 @@
|
|||
})
|
||||
|
||||
$chatAdapter.on('reaction', reactionReceived);
|
||||
$chatAdapter.on('zap', zapReceived);
|
||||
$chatAdapter.on('deleted', (deletedEvents) => {
|
||||
deletedEvents.forEach(deletedEventId => {
|
||||
const index = events.findIndex(event => event.id === deletedEventId);
|
||||
|
|
@ -217,8 +226,8 @@
|
|||
|
||||
<div class="
|
||||
bg-purple-700 text-white
|
||||
-m-5 mb-3
|
||||
px-5 py-3
|
||||
-mx-4 -mt-5 mb-3
|
||||
px-4 py-3
|
||||
overflow-clip
|
||||
flex flex-row justify-between items-center
|
||||
">
|
||||
|
|
@ -266,7 +275,7 @@
|
|||
{/if}
|
||||
|
||||
<div id="messages-container" class="overflow-auto -mx-4 px-4" style="height: 50vh; min-height: 300px;">
|
||||
<div id="messages-container-inner">
|
||||
<div id="messages-container-inner" class="flex flex-col gap-4">
|
||||
{#if $selectedMessage}
|
||||
<NostrNote event={getEventById($selectedMessage)} {responses} {websiteOwnerPubkey} />
|
||||
{:else}
|
||||
|
|
@ -284,8 +293,8 @@
|
|||
<div class="flex flex-col">
|
||||
<div class="
|
||||
border-y border-y-slate-200
|
||||
-mx-5 my-2 bg-slate-100 text-black text-sm
|
||||
px-5 py-2
|
||||
-mx-4 my-2 bg-slate-100 text-black text-sm
|
||||
px-4 py-2
|
||||
">
|
||||
{#if chatConfiguration.chatType === 'DM'}
|
||||
<b>Encrypted chat:</b>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
<script>
|
||||
import { onMount } from 'svelte';
|
||||
import { selectedMessage } from './lib/store';
|
||||
import { afterUpdate, onMount } from 'svelte';
|
||||
import { selectedMessage, zappingMessage, zapsPerMessage } from './lib/store';
|
||||
import { chatData, chatAdapter } from './lib/store';
|
||||
import { nip19 } from 'nostr-tools';
|
||||
import ZapAmountButton from './ZapAmountButton.svelte';
|
||||
// import { prettifyContent } from '$lib/utils';
|
||||
export let event;
|
||||
export let responses;
|
||||
|
|
@ -9,6 +11,11 @@
|
|||
|
||||
let profiles = {};
|
||||
let profilePicture;
|
||||
let npub;
|
||||
let zappingIt;
|
||||
let hovering;
|
||||
|
||||
let zappedAmount = 0;
|
||||
|
||||
function selectMessage() {
|
||||
if ($selectedMessage === event.id) {
|
||||
|
|
@ -21,7 +28,7 @@
|
|||
// delay-fetch responses
|
||||
onMount(() => {
|
||||
$chatAdapter.delayedSubscribe(
|
||||
{kinds: [1], '#e': [event.id]}
|
||||
{kinds: [1, 9735], '#e': [event.id]}
|
||||
, 'responses', 500)
|
||||
})
|
||||
|
||||
|
|
@ -29,27 +36,107 @@
|
|||
|
||||
$: profiles = $chatData.profiles;
|
||||
$: displayName = profiles[event.pubkey] && profiles[event.pubkey].display_name || `[${event.pubkey.slice(0, 6)}]`;
|
||||
$: nip05 = profiles[event.pubkey] && profiles[event.pubkey].nip05;
|
||||
// $: nip05 = profiles[event.pubkey] && profiles[event.pubkey].nip05;
|
||||
$: zappingIt = $zappingMessage === event.id;
|
||||
$: {
|
||||
try {
|
||||
npub = nip19.npubEncode(event.pubkey);
|
||||
} catch (e) {
|
||||
npub = event.pubkey;
|
||||
}
|
||||
}
|
||||
|
||||
$: profilePicture = profiles[event.pubkey] && profiles[event.pubkey].picture || `https://robohash.org/${event.pubkey.slice(0, 2)}.png?set=set1`;
|
||||
$chatAdapter.on('zap', () => {
|
||||
zappedAmount = $zapsPerMessage[event.id]?.reduce((acc, zap) => acc + zap.amount, 0) || 0;
|
||||
});
|
||||
|
||||
const repliedIds = event.tags.filter(e => e[0] === 'e').map(e => e[1]);
|
||||
$: {
|
||||
zappedAmount = $zapsPerMessage[event.id]?.reduce((acc, zap) => acc + zap.amount, 0) || 0;
|
||||
}
|
||||
|
||||
afterUpdate(() => {
|
||||
zappedAmount = $zapsPerMessage[event.id]?.reduce((acc, zap) => acc + zap.amount, 0) || 0;
|
||||
});
|
||||
|
||||
$: profilePicture = profiles[event.pubkey] && profiles[event.pubkey].picture || `https://robohash.org/${event.pubkey.slice(0, 1)}.png?set=set1`;
|
||||
|
||||
// const repliedIds = event.tags.filter(e => e[0] === 'e').map(e => e[1]);
|
||||
|
||||
let timestamp = new Date(event.created_at * 1000);
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="
|
||||
block p-2-lg mb-3
|
||||
flex flex-col gap-4
|
||||
p-2-lg mb-3
|
||||
text-wrap
|
||||
relative
|
||||
"
|
||||
on:mouseenter={() => (hovering = true)}
|
||||
on:mouseleave={() => (hovering = false)}
|
||||
>
|
||||
<div class="flex flex-row gap-4">
|
||||
<div class="min-w-fit">
|
||||
<img src="{profilePicture}" class="
|
||||
block w-10 h-10 rounded-full
|
||||
{byWebsiteOwner ? 'ring-purple-700 ring-4' : 'ring-gray-300 ring-2'}
|
||||
" alt="" />
|
||||
<div class="flex flex-row gap-3">
|
||||
<div class="min-w-fit flex flex-col gap-2">
|
||||
<a href={`nostr:${npub}`}>
|
||||
<img src="{profilePicture}" class="
|
||||
block w-8 h-8 rounded-full
|
||||
{byWebsiteOwner ? 'ring-purple-700 ring-4' : ''}
|
||||
" alt="" />
|
||||
</a>
|
||||
|
||||
<button
|
||||
class="
|
||||
rounded-full
|
||||
{zappedAmount > 0 ? 'opacity-100 text-base' : 'bg-orange-500 opacity-10 text-xl'}
|
||||
w-8 h-8
|
||||
flex items-center
|
||||
justify-center
|
||||
hover:opacity-100
|
||||
"
|
||||
on:click|preventDefault={() => $zappingMessage = $zappingMessage === event.id ? null : event.id}
|
||||
>
|
||||
{#if zappedAmount > 0}
|
||||
<p class="flex flex-col items-center my-4">
|
||||
⚡️
|
||||
<span class="text-orange-500 font-semibold">
|
||||
{zappedAmount}
|
||||
</span>
|
||||
</p>
|
||||
{:else}
|
||||
⚡️
|
||||
{/if}
|
||||
</button>
|
||||
|
||||
<div class="
|
||||
{zappingIt ?
|
||||
'w-full rounded-full bg-white drop-shadow-xl justify-between border-2 border-gray-200' :
|
||||
' rounded-full w-8 h-8 justify-center'
|
||||
}
|
||||
flex items-center absolute ml-5 mt-10 z-10">
|
||||
{#if zappingIt}
|
||||
<div class="flex flex-row items-stretch justify-between w-full">
|
||||
<div class="flex flex-col hover:bg-orange-500 text-white rounded-full w-12 h-12 items-center justify-center cursor-pointer">
|
||||
<ZapAmountButton icon="👍" amount={500} {event} />
|
||||
</div>
|
||||
<div class="flex flex-col hover:bg-orange-500 text-white rounded-full w-12 h-12 items-center justify-center cursor-pointer">
|
||||
<ZapAmountButton icon="🤙" amount={2500} amountDisplay={'2.5k'} {event} />
|
||||
</div>
|
||||
<div class="flex flex-col hover:bg-orange-500 text-white rounded-full w-12 h-12 items-center justify-center cursor-pointer">
|
||||
<ZapAmountButton icon="🙌" amount={5000} amountDisplay={'5k'} {event} />
|
||||
</div>
|
||||
<div class="flex flex-col hover:bg-orange-500 text-white rounded-full w-12 h-12 items-center justify-center cursor-pointer">
|
||||
<ZapAmountButton icon="🧡" amount={10000} amountDisplay={'10k'} {event} />
|
||||
</div>
|
||||
<div class="flex flex-col hover:bg-orange-500 text-white rounded-full w-12 h-12 items-center justify-center cursor-pointer">
|
||||
<ZapAmountButton icon="🤯" amount={100000} amountDisplay={'100k'} {event} />
|
||||
</div>
|
||||
<div class="flex flex-col hover:bg-orange-500 text-white rounded-full w-12 h-12 items-center justify-center cursor-pointer">
|
||||
<ZapAmountButton icon="😎" amount={1000000} amountDisplay={'1M'} {event} />
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- <span class="text-base font-semibold text-clip">{displayName}</span>
|
||||
{#if nip05}
|
||||
<span class="text-sm text-gray-400">{nip05}</span>
|
||||
|
|
@ -64,13 +151,17 @@
|
|||
max-h-64 text-base
|
||||
cursor-pointer
|
||||
border border-slate-200
|
||||
{$selectedMessage === event.id ? 'bg-purple-700 text-white' : 'bg-slate-50 text-gray-500 hover:bg-slate-100'}
|
||||
{$selectedMessage === event.id ? 'bg-purple-700 text-white' : 'bg-white text-gray-900 hover:bg-slate-100'}
|
||||
p-4 py-2 overflow-auto rounded-2xl
|
||||
" on:click|preventDefault={()=>{selectMessage(event.id)}}>
|
||||
shadow-sm
|
||||
" on:click|preventDefault={()=>{selectMessage(event.id)}}
|
||||
on:keydown|preventDefault={()=>{selectMessage(event.id)}}
|
||||
on:keyup|preventDefault={()=>{selectMessage(event.id)}}
|
||||
>
|
||||
{event.content}
|
||||
</div>
|
||||
|
||||
<div class="flex flex-row-reverse justify-between mt-1 overflow-clip items-center">
|
||||
<div class="flex flex-row-reverse justify-between mt-1 overflow-clip items-center relative">
|
||||
<div class="text-xs text-gray-400 text-ellipsis overflow-clip whitespace-nowrap">
|
||||
<span class="py-2">
|
||||
{timestamp.toLocaleString()}
|
||||
|
|
@ -92,7 +183,7 @@
|
|||
</div>
|
||||
|
||||
{#if responses[event.id].length > 0}
|
||||
<div class="pl-5 border-l border-l-gray-400 mb-10">
|
||||
<div class="pl-5 border-l border-l-gray-400 flex flex-col gap-4">
|
||||
{#each responses[event.id] as response}
|
||||
<svelte:self {websiteOwnerPubkey} event={response} {responses} />
|
||||
{/each}
|
||||
|
|
|
|||
|
|
@ -24,11 +24,15 @@
|
|||
}
|
||||
</script>
|
||||
|
||||
<div class="fixed bottom-5 right-5 mb-5 flex flex-col item-end font-sans">
|
||||
<div class="
|
||||
fixed bottom-5 right-5 mb-5 flex flex-col item-end font-sans
|
||||
">
|
||||
{#if showChat}
|
||||
<div class="
|
||||
shadow-2xl
|
||||
bg-white mb-5 w-96 max-w-screen-sm text-black rounded-xl p-5
|
||||
bg-white/90 backdrop-brightness-150 backdrop-blur-md mb-5 w-96 max-w-screen-sm text-black rounded-3xl p-5
|
||||
overflow-auto
|
||||
flex flex-col justify-end
|
||||
{minimizeChat ? 'hidden' : ''}
|
||||
" style="max-height: 80vh;">
|
||||
{#if !dismissedIntro}
|
||||
|
|
|
|||
42
src/ZapAmountButton.svelte
Normal file
42
src/ZapAmountButton.svelte
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<script>
|
||||
export let icon, amount, amountDisplay, event;
|
||||
import { zappingMessage } from './lib/store';
|
||||
import NDK, { NDKEvent, NDKNip07Signer } from 'nostr-dev-kit';
|
||||
import { requestProvider } from 'webln';
|
||||
|
||||
let hover = false;
|
||||
|
||||
async function zap() {
|
||||
const signer = new NDKNip07Signer();
|
||||
const pubkey = await signer.configure(window);
|
||||
const ndk = new NDK({ explicitRelayUrls: ['wss://nos.lol', 'wss://relay.nostr.band', 'wss://relay.damus.io', 'wss://nostr.mom', 'wss://no.str.cr'] });
|
||||
ndk.signer = signer;
|
||||
await ndk.connect();
|
||||
const ndkEvent = new NDKEvent(ndk, event);
|
||||
const pr = await ndkEvent.zap(amount * 1000);
|
||||
|
||||
try {
|
||||
const webln = await requestProvider();
|
||||
await webln.sendPayment(pr);
|
||||
$zappingMessage = null;
|
||||
} catch (err) {
|
||||
$zappingMessage = null;
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||
<div
|
||||
on:mouseenter={() => (hover = true)}
|
||||
on:mouseleave={() => (hover = false)}
|
||||
on:click|preventDefault={zap}
|
||||
>
|
||||
{#if !hover}
|
||||
<span class="text-xl">{icon}</span>
|
||||
{:else}
|
||||
<span class="text-base text-white flex flex-col items-center">
|
||||
{amountDisplay||amount}
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
||||
|
|
@ -5,6 +5,7 @@ import { createEventDispatcher } from 'svelte';
|
|||
import EventEmitter from 'events';
|
||||
import * as uuid from 'uuid';
|
||||
import debug from 'debug';
|
||||
import { NDKEvent, zapInvoiceFromEvent } from 'nostr-dev-kit';
|
||||
|
||||
const log = new debug('nostr:adapter');
|
||||
const profilesLog = new debug('nostr:adapter:profiles');
|
||||
|
|
@ -174,10 +175,27 @@ class NstrAdapter {
|
|||
if (!this.#delayedSubscriptionTimeouts[family]) {
|
||||
this.#delayedSubscriptionTimeouts[family] = setTimeout(() => {
|
||||
delete this.#delayedSubscriptionTimeouts[family];
|
||||
filters = this.#delayedSubscriptions[family];
|
||||
|
||||
// if there are more than 10 filters then we need to split them up
|
||||
// into multiple subscriptions
|
||||
let filters = this.#delayedSubscriptions[family];
|
||||
delete this.#delayedSubscriptions[family];
|
||||
|
||||
this.subscribe(filters, (e) => { this.#emitMessage(e)});
|
||||
// split filters into groups of 10
|
||||
let groups = [];
|
||||
groups = filters.reduce((groups, filter, index) => {
|
||||
if (index % 10 === 0) {
|
||||
groups.push([]);
|
||||
}
|
||||
groups[groups.length - 1].push(filter);
|
||||
return groups;
|
||||
}, groups);
|
||||
|
||||
console.log(`turned ${filters.length} filters into ${groups.length} groups`);
|
||||
|
||||
groups.forEach((filters) => {
|
||||
this.subscribe(filters, (e) => { this.#emitMessage(e)});
|
||||
});
|
||||
}, timeout)
|
||||
}
|
||||
}
|
||||
|
|
@ -191,6 +209,9 @@ class NstrAdapter {
|
|||
const subId = uuid.v4();
|
||||
this.#handlers[subId] = messageCallback;
|
||||
if (!Array.isArray(filters)) { filters = [filters] }
|
||||
|
||||
|
||||
|
||||
this.#pool.subscribe(subId, filters);
|
||||
this.#pool.on('event', (relay, recSubId, e) => {
|
||||
this.onEvent(e, this.#handlers[recSubId])
|
||||
|
|
@ -212,23 +233,24 @@ class NstrAdapter {
|
|||
event.content = await this.decrypt(this.#websiteOwnerPubkey, event.content);
|
||||
}
|
||||
|
||||
if (event.kind === 1) {
|
||||
if (!event.tags.find(t => t[0] === 'e')) {
|
||||
// a top level message that we should subscribe to since responses won't tag the url
|
||||
this.subscribe({ kinds: [1], '#e': [event.id] })
|
||||
}
|
||||
}
|
||||
|
||||
let deletedEvents = []
|
||||
if (event.kind === 5) {
|
||||
deletedEvents = event.tags.filter(tag => tag[0] === 'e').map(tag => tag[1]);
|
||||
}
|
||||
|
||||
let zap;
|
||||
if (event.kind === 9735) {
|
||||
const ndkEvent = new NDKEvent(null, event);
|
||||
zap = zapInvoiceFromEvent(ndkEvent);
|
||||
console.log(`received a zap invoice: ${zap}`, event);
|
||||
}
|
||||
|
||||
switch (event.kind) {
|
||||
case 1: this.#eventEmitter.emit('message', event); break;
|
||||
case 4: this.#eventEmitter.emit('message', event); break;
|
||||
case 5: this.#eventEmitter.emit('deleted', deletedEvents); break;
|
||||
case 7: this.#eventEmitter.emit('reaction', event); break;
|
||||
case 9735: this.#eventEmitter.emit('zap', zap); break;
|
||||
default:
|
||||
// alert('unknown event kind ' + event.kind)
|
||||
console.log('unknown event kind', event.kind, event);
|
||||
|
|
|
|||
|
|
@ -2,4 +2,6 @@ import { writable } from 'svelte/store';
|
|||
|
||||
export const chatAdapter = writable(null);
|
||||
export const chatData = writable({ events: [], profiles: {}});
|
||||
export const selectedMessage = writable(null);
|
||||
export const selectedMessage = writable(null);
|
||||
export const zappingMessage = writable(null);
|
||||
export const zapsPerMessage = writable({});
|
||||
6
src/lib/utils.js
Normal file
6
src/lib/utils.js
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
export function prettifyContent(content) {
|
||||
const bitcoinImage = "<img src=\"https://abs.twimg.com/hashflags/Bitcoin_evergreen/Bitcoin_evergreen.png\" style=\"width: 1.2em; vertical-align: -20%; margin-right: 0.075em; height: 1.2em; margin-left: 2px; display: inline-block;\">";
|
||||
|
||||
return content
|
||||
.replace(/#bitcoin/i, `#bitcoin${bitcoinImage}`);
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
<script>
|
||||
import 'websocket-polyfill';
|
||||
import Container from '../Container.svelte';
|
||||
import Widget from '../Widget.svelte';
|
||||
import { chatAdapter } from '$lib/store';
|
||||
|
|
@ -10,10 +11,10 @@
|
|||
let chatReferenceTags = [];
|
||||
const relays = [
|
||||
'wss://relay.f7z.io',
|
||||
'wss://nos.lol',
|
||||
'wss://relay.nostr.info',
|
||||
'wss://nostr-pub.wellorder.net',
|
||||
'wss://relay.current.fyi',
|
||||
'wss://relay.nos.lol',
|
||||
'wss://nostr.walletofsatoshi.com',
|
||||
'wss://relay.nostr.band',
|
||||
];
|
||||
|
||||
|
|
@ -80,7 +81,7 @@
|
|||
">
|
||||
<div class="
|
||||
shadow-2xl
|
||||
bg-white mb-5 w-96 max-w-screen-sm text-black rounded-3xl p-5 overflow-auto
|
||||
bg-gray-100/90 backdrop-blur-md mb-5 w-96 max-w-screen-sm text-black rounded-3xl px-4 py-5 overflow-auto
|
||||
flex flex-col justify-end
|
||||
fixed
|
||||
" style="{chatStarted ? 'max-height: 80vh;' : 'padding: 4rem 2rem !important;'}">
|
||||
|
|
|
|||
Loading…
Reference in a new issue