Update welshman

This commit is contained in:
Jon Staab
2025-06-16 10:12:24 -07:00
parent dac9ef8e4e
commit cb0119b9b8
10 changed files with 148 additions and 141 deletions
+11 -11
View File
@@ -52,17 +52,17 @@
"@types/qrcode": "^1.5.5", "@types/qrcode": "^1.5.5",
"@vite-pwa/assets-generator": "^0.2.6", "@vite-pwa/assets-generator": "^0.2.6",
"@vite-pwa/sveltekit": "^0.6.6", "@vite-pwa/sveltekit": "^0.6.6",
"@welshman/app": "^0.3.5", "@welshman/app": "^0.3.7",
"@welshman/content": "^0.3.5", "@welshman/content": "^0.3.7",
"@welshman/editor": "^0.3.5", "@welshman/editor": "^0.3.7",
"@welshman/feeds": "^0.3.5", "@welshman/feeds": "^0.3.7",
"@welshman/lib": "^0.3.5", "@welshman/lib": "^0.3.7",
"@welshman/net": "^0.3.5", "@welshman/net": "^0.3.7",
"@welshman/relay": "^0.3.5", "@welshman/relay": "^0.3.7",
"@welshman/router": "^0.3.5", "@welshman/router": "^0.3.7",
"@welshman/signer": "^0.3.5", "@welshman/signer": "^0.3.7",
"@welshman/store": "^0.3.5", "@welshman/store": "^0.3.7",
"@welshman/util": "^0.3.5", "@welshman/util": "^0.3.7",
"compressorjs": "^1.2.1", "compressorjs": "^1.2.1",
"daisyui": "^4.12.10", "daisyui": "^4.12.10",
"date-picker-svelte": "^2.13.0", "date-picker-svelte": "^2.13.0",
+94 -91
View File
@@ -51,38 +51,38 @@ importers:
specifier: ^0.6.6 specifier: ^0.6.6
version: 0.6.8(@sveltejs/kit@2.20.5(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.25.10)(vite@5.4.17(@types/node@22.14.0)(terser@5.39.0)))(svelte@5.25.10)(vite@5.4.17(@types/node@22.14.0)(terser@5.39.0)))(@vite-pwa/assets-generator@0.2.6)(vite-plugin-pwa@0.21.2(@vite-pwa/assets-generator@0.2.6)(vite@5.4.17(@types/node@22.14.0)(terser@5.39.0))(workbox-build@7.3.0)(workbox-window@7.3.0)) version: 0.6.8(@sveltejs/kit@2.20.5(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.25.10)(vite@5.4.17(@types/node@22.14.0)(terser@5.39.0)))(svelte@5.25.10)(vite@5.4.17(@types/node@22.14.0)(terser@5.39.0)))(@vite-pwa/assets-generator@0.2.6)(vite-plugin-pwa@0.21.2(@vite-pwa/assets-generator@0.2.6)(vite@5.4.17(@types/node@22.14.0)(terser@5.39.0))(workbox-build@7.3.0)(workbox-window@7.3.0))
'@welshman/app': '@welshman/app':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2) version: 0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)
'@welshman/content': '@welshman/content':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(typescript@5.8.3) version: 0.3.7(typescript@5.8.3)
'@welshman/editor': '@welshman/editor':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(linkifyjs@4.3.1)(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(typescript@5.8.3) version: 0.3.7(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(linkifyjs@4.3.1)(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.39.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(typescript@5.8.3)
'@welshman/feeds': '@welshman/feeds':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2) version: 0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)
'@welshman/lib': '@welshman/lib':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5 version: 0.3.7
'@welshman/net': '@welshman/net':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(typescript@5.8.3)(ws@8.18.2) version: 0.3.7(typescript@5.8.3)(ws@8.18.2)
'@welshman/relay': '@welshman/relay':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(typescript@5.8.3) version: 0.3.7(typescript@5.8.3)
'@welshman/router': '@welshman/router':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(typescript@5.8.3) version: 0.3.7(typescript@5.8.3)
'@welshman/signer': '@welshman/signer':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2) version: 0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)
'@welshman/store': '@welshman/store':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(typescript@5.8.3) version: 0.3.7(typescript@5.8.3)
'@welshman/util': '@welshman/util':
specifier: ^0.3.5 specifier: ^0.3.7
version: 0.3.5(typescript@5.8.3) version: 0.3.7(typescript@5.8.3)
compressorjs: compressorjs:
specifier: ^1.2.1 specifier: ^1.2.1
version: 1.2.1 version: 1.2.1
@@ -1593,41 +1593,41 @@ packages:
'@vite-pwa/assets-generator': '@vite-pwa/assets-generator':
optional: true optional: true
'@welshman/app@0.3.5': '@welshman/app@0.3.7':
resolution: {integrity: sha512-lTVjIhg6LfYvx9CCyCL8K6E8rSSJ3hYqHcYEyrfEFmtYYN9FWfGNZ0rKic0efOXXGo0n/6yMcS5Rga9c63JeZg==} resolution: {integrity: sha512-YaI1J/N5H1jmmvbNNfGijclr6kaOpECcPMFG/ts2e2j04/4n78oMbJCOIaRuN8N9tpyVs130A9SP9GdMiQfH/A==}
'@welshman/content@0.3.5': '@welshman/content@0.3.7':
resolution: {integrity: sha512-iupIcP4DMlT1CRU687Pl7Nxop3Fd9P+5bgP0bF81xW50MIwuQLhOas6Qr4zfLhj8aL8KryYMkmyjEjeUH0zZ+g==} resolution: {integrity: sha512-wC6rN8KoVJ7iAFmGZ6LtPe32SjKOnBjRIwuSL3GiFS34D1wiBmLWeSXijksf0SZevGj+cgVm/N3+frhNuku4Gg==}
'@welshman/editor@0.3.5': '@welshman/editor@0.3.7':
resolution: {integrity: sha512-PUky4PyKjEf8gSHb+hrhbFGq2YPxQQTg8IWXJczd6bhbVPCoSe9SPEisbI7TnLzEQORNOuPkjGD3cAZfIT8D5A==} resolution: {integrity: sha512-HZsSLthhzXTUFkg+mwuev9hwIFPV+OzZDGyavKE8Y4Oof6hVLWSbTMmV9Kko6qSpyhJ+p5jWS1pYdkIlijBXAA==}
'@welshman/feeds@0.3.5': '@welshman/feeds@0.3.7':
resolution: {integrity: sha512-XNsmxgC6+C4EkYhtJ6sQ4Lm6Y0xGvLeC41wnqZiXE8NC/xPEp3pM9mD4Oq+gEcGaYb1nUtGTE+rjnX2PwDfuLA==} resolution: {integrity: sha512-R4MDnfOLLHvRmHS5CNcCsORPLtk0DtdPGXQG5cwrkHs801JDEJUfiV3jCH5F7SBc0cBDV5VGaoUBUeVzBkuSpA==}
'@welshman/lib@0.3.5': '@welshman/lib@0.3.7':
resolution: {integrity: sha512-yzMSMaSD00Oc2g/qEypwmH7NIjON70WPHFB7CkU5hlfTdPm3vKk3WLoTj3z7xLFdsSRhaXpyG8HgktHDx1eNFw==} resolution: {integrity: sha512-Zx0xVNwqUNS2+oAjgpUKF2TYcwCnbCku83B2w2immlzy84Lb8pGbeD5WgJpilSbSPjMrzg9uQ7QjyYRj8xc7DA==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
'@welshman/net@0.3.5': '@welshman/net@0.3.7':
resolution: {integrity: sha512-XDADpkPlUxmzyk49xR6PlKVm+hhmc03auDrYcfeAlp6K32TKqZj9DJV3uNvUzkhAsw0j08ObWYbKWr8UHW2Q1A==} resolution: {integrity: sha512-vDjKhT4mpDPoNNwtAnIgsn/5yKhfzHtsseF/xq8JtvdvJ5KULmTkntMk9Lug1MkaUYa7QOBmuDsl87WlSJYGew==}
'@welshman/relay@0.3.5': '@welshman/relay@0.3.7':
resolution: {integrity: sha512-0Qp/ZuVr/ReyS+Apv7w1kjiumlB+fbMKjHtXkCvxwXO/Yo0DOOvvwt1sUdKhJ5jdyCCJ/ZFIuFPK8lkma650nQ==} resolution: {integrity: sha512-aF0jeeUWn93iRF5HucrlFw1Sqfi1K4q+ofQ8+XBYULTkiOYWybDb+P139fOq/NzIESoTIxSMAzjTrSzNFUqmag==}
'@welshman/router@0.3.5': '@welshman/router@0.3.7':
resolution: {integrity: sha512-YH2HgM19y9+mFQ3k7KQS8Xh/RnmlL77QGB38n+FJqXOHP/Hw+OB7tYpYBmVCaOSzQfvxJMMWwHZxaDpg6G4l8w==} resolution: {integrity: sha512-A/n4SiMTzpRt8HjhLwtiZ9kiCynt/fDuKSjnPsfNw9b6t/ayLEjRICF6x0X9tlzAMUp4SXsfe0dqA9kGb1Ic/A==}
'@welshman/signer@0.3.5': '@welshman/signer@0.3.7':
resolution: {integrity: sha512-ihEExyBjNARADUXq0fCLC58/s5igBSwiOOYB4uVwAaadjk/242NnaW1pP7UM/XYGfqF4txb891J3crm2Im+YDg==} resolution: {integrity: sha512-OSnP5vmZkhquh1aapW7r15seunbojcfYD90HvX3IWWiIq6Oldsu0/djQUhEv4wg9fi9h6+zClU+QZkB6lfMTfw==}
peerDependencies: peerDependencies:
nostr-signer-capacitor-plugin: ~0.0.4 nostr-signer-capacitor-plugin: ~0.0.4
'@welshman/store@0.3.5': '@welshman/store@0.3.7':
resolution: {integrity: sha512-8oI9goSX05fGvMWXNjHeKGVp0MJHOMxK2dBrjmB67Er6kr6x6ov5oNq6upoPu8s39r+RYhvLn1cUEl3+gNsQVA==} resolution: {integrity: sha512-fE9PAMQvvgAzZ9soRm5QERpMAMD4D4GflOX1VAIo6gSm6WO8EUxy4mGjUD/k6kmFOt39txZsOdjvV0CfMru2Lg==}
'@welshman/util@0.3.5': '@welshman/util@0.3.7':
resolution: {integrity: sha512-Qyl5DSjkKdu9jLS7HvRfkcaMDwjZCyqhWHu5f0KX6YDoNcPrmnUERuzecW/+FcQGUVpLdhE3o1c0BBOIKJ7k2A==} resolution: {integrity: sha512-loKAc2V182PCln9typ94wF7NeHmz2UYwiudB/DCFUGogKDtziZn6eIolL7A5Bvo3aVUs+BbaRUA18kL35Uq9jg==}
'@xml-tools/parser@1.0.11': '@xml-tools/parser@1.0.11':
resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==} resolution: {integrity: sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==}
@@ -3375,8 +3375,8 @@ packages:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
nostr-editor-coracle-workaround@0.0.4-pre.18: nostr-editor@1.0.0:
resolution: {integrity: sha512-QAoySZ9uOsR7C4nnVbcEpVgT0vLxwZxlYhE2NsJzmeoK7nTgkcHFaZkn/QMlUem3qjT8AolW8X5TrRdnZ5eIZQ==} resolution: {integrity: sha512-+TL3G0m7WsXeEAitxzQhun7hyARxqRANjGIS2z9CBbniCGvT/Wz6YLgUnUysnBg3tmSgMZg5FWhaDPwfvdvbSw==}
engines: {node: '>=18.16.1'} engines: {node: '>=18.16.1'}
peerDependencies: peerDependencies:
'@tiptap/core': ^2.6.6 '@tiptap/core': ^2.6.6
@@ -3384,10 +3384,11 @@ packages:
'@tiptap/extension-link': ^2.6.6 '@tiptap/extension-link': ^2.6.6
'@tiptap/pm': ^2.6.6 '@tiptap/pm': ^2.6.6
linkifyjs: ^4.1.3 linkifyjs: ^4.1.3
nostr-tools: ^2.14.2 nostr-tools: ~2.14.2
prosemirror-markdown: ^1.13.0 prosemirror-markdown: ^1.13.0
prosemirror-model: ^1.22.3 prosemirror-model: ^1.22.3
prosemirror-state: ^1.4.3 prosemirror-state: ^1.4.3
prosemirror-view: ^1.39.3
tiptap-markdown: ^0.8.10 tiptap-markdown: ^0.8.10
nostr-signer-capacitor-plugin@0.0.4: nostr-signer-capacitor-plugin@0.0.4:
@@ -6429,17 +6430,17 @@ snapshots:
optionalDependencies: optionalDependencies:
'@vite-pwa/assets-generator': 0.2.6 '@vite-pwa/assets-generator': 0.2.6
'@welshman/app@0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)': '@welshman/app@0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)':
dependencies: dependencies:
'@types/throttle-debounce': 5.0.2 '@types/throttle-debounce': 5.0.2
'@welshman/feeds': 0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2) '@welshman/feeds': 0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/net': 0.3.5(typescript@5.8.3)(ws@8.18.2) '@welshman/net': 0.3.7(typescript@5.8.3)(ws@8.18.2)
'@welshman/relay': 0.3.5(typescript@5.8.3) '@welshman/relay': 0.3.7(typescript@5.8.3)
'@welshman/router': 0.3.5(typescript@5.8.3) '@welshman/router': 0.3.7(typescript@5.8.3)
'@welshman/signer': 0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2) '@welshman/signer': 0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)
'@welshman/store': 0.3.5(typescript@5.8.3) '@welshman/store': 0.3.7(typescript@5.8.3)
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
fuse.js: 7.1.0 fuse.js: 7.1.0
idb: 8.0.2 idb: 8.0.2
svelte: 4.2.20 svelte: 4.2.20
@@ -6449,14 +6450,14 @@ snapshots:
- typescript - typescript
- ws - ws
'@welshman/content@0.3.5(typescript@5.8.3)': '@welshman/content@0.3.7(typescript@5.8.3)':
dependencies: dependencies:
'@braintree/sanitize-url': 7.1.1 '@braintree/sanitize-url': 7.1.1
nostr-tools: 2.14.2(typescript@5.8.3) nostr-tools: 2.14.2(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
'@welshman/editor@0.3.5(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(linkifyjs@4.3.1)(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(typescript@5.8.3)': '@welshman/editor@0.3.7(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(linkifyjs@4.3.1)(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.39.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(typescript@5.8.3)':
dependencies: dependencies:
'@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0)
'@tiptap/extension-code': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) '@tiptap/extension-code': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))
@@ -6471,9 +6472,9 @@ snapshots:
'@tiptap/extension-text': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) '@tiptap/extension-text': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))
'@tiptap/pm': 2.12.0 '@tiptap/pm': 2.12.0
'@tiptap/suggestion': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0) '@tiptap/suggestion': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
nostr-editor-coracle-workaround: 0.0.4-pre.18(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(linkifyjs@4.3.1)(nostr-tools@2.14.2(typescript@5.8.3))(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))) nostr-editor: 1.0.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(linkifyjs@4.3.1)(nostr-tools@2.14.2(typescript@5.8.3))(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.39.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))
nostr-tools: 2.14.2(typescript@5.8.3) nostr-tools: 2.14.2(typescript@5.8.3)
tippy.js: 6.3.7 tippy.js: 6.3.7
transitivePeerDependencies: transitivePeerDependencies:
@@ -6483,81 +6484,82 @@ snapshots:
- prosemirror-markdown - prosemirror-markdown
- prosemirror-model - prosemirror-model
- prosemirror-state - prosemirror-state
- prosemirror-view
- tiptap-markdown - tiptap-markdown
- typescript - typescript
'@welshman/feeds@0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)': '@welshman/feeds@0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)':
dependencies: dependencies:
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/net': 0.3.5(typescript@5.8.3)(ws@8.18.2) '@welshman/net': 0.3.7(typescript@5.8.3)(ws@8.18.2)
'@welshman/relay': 0.3.5(typescript@5.8.3) '@welshman/relay': 0.3.7(typescript@5.8.3)
'@welshman/router': 0.3.5(typescript@5.8.3) '@welshman/router': 0.3.7(typescript@5.8.3)
'@welshman/signer': 0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2) '@welshman/signer': 0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
trava: 1.2.1 trava: 1.2.1
transitivePeerDependencies: transitivePeerDependencies:
- nostr-signer-capacitor-plugin - nostr-signer-capacitor-plugin
- typescript - typescript
- ws - ws
'@welshman/lib@0.3.5': '@welshman/lib@0.3.7':
dependencies: dependencies:
'@scure/base': 1.2.6 '@scure/base': 1.2.6
'@types/events': 3.0.3 '@types/events': 3.0.3
events: 3.3.0 events: 3.3.0
'@welshman/net@0.3.5(typescript@5.8.3)(ws@8.18.2)': '@welshman/net@0.3.7(typescript@5.8.3)(ws@8.18.2)':
dependencies: dependencies:
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/relay': 0.3.5(typescript@5.8.3) '@welshman/relay': 0.3.7(typescript@5.8.3)
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
events: 3.3.0 events: 3.3.0
isomorphic-ws: 5.0.0(ws@8.18.2) isomorphic-ws: 5.0.0(ws@8.18.2)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
- ws - ws
'@welshman/relay@0.3.5(typescript@5.8.3)': '@welshman/relay@0.3.7(typescript@5.8.3)':
dependencies: dependencies:
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
'@welshman/router@0.3.5(typescript@5.8.3)': '@welshman/router@0.3.7(typescript@5.8.3)':
dependencies: dependencies:
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/relay': 0.3.5(typescript@5.8.3) '@welshman/relay': 0.3.7(typescript@5.8.3)
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
'@welshman/signer@0.3.5(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)': '@welshman/signer@0.3.7(nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0))(typescript@5.8.3)(ws@8.18.2)':
dependencies: dependencies:
'@noble/curves': 1.9.2 '@noble/curves': 1.9.2
'@noble/hashes': 1.8.0 '@noble/hashes': 1.8.0
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/net': 0.3.5(typescript@5.8.3)(ws@8.18.2) '@welshman/net': 0.3.7(typescript@5.8.3)(ws@8.18.2)
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
nostr-signer-capacitor-plugin: 0.0.4(@capacitor/core@7.2.0) nostr-signer-capacitor-plugin: 0.0.4(@capacitor/core@7.2.0)
nostr-tools: 2.14.2(typescript@5.8.3) nostr-tools: 2.14.2(typescript@5.8.3)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
- ws - ws
'@welshman/store@0.3.5(typescript@5.8.3)': '@welshman/store@0.3.7(typescript@5.8.3)':
dependencies: dependencies:
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
'@welshman/relay': 0.3.5(typescript@5.8.3) '@welshman/relay': 0.3.7(typescript@5.8.3)
'@welshman/util': 0.3.5(typescript@5.8.3) '@welshman/util': 0.3.7(typescript@5.8.3)
svelte: 4.2.20 svelte: 4.2.20
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
'@welshman/util@0.3.5(typescript@5.8.3)': '@welshman/util@0.3.7(typescript@5.8.3)':
dependencies: dependencies:
'@types/ws': 8.18.1 '@types/ws': 8.18.1
'@welshman/lib': 0.3.5 '@welshman/lib': 0.3.7
js-base64: 3.7.7 js-base64: 3.7.7
nostr-tools: 2.14.2(typescript@5.8.3) nostr-tools: 2.14.2(typescript@5.8.3)
nostr-wasm: 0.1.0 nostr-wasm: 0.1.0
@@ -8389,7 +8391,7 @@ snapshots:
normalize-range@0.1.2: {} normalize-range@0.1.2: {}
nostr-editor-coracle-workaround@0.0.4-pre.18(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(linkifyjs@4.3.1)(nostr-tools@2.14.2(typescript@5.8.3))(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))): nostr-editor@1.0.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/extension-image@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))(@tiptap/extension-link@2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(linkifyjs@4.3.1)(nostr-tools@2.14.2(typescript@5.8.3))(prosemirror-markdown@1.13.2)(prosemirror-model@1.25.1)(prosemirror-state@1.4.3)(prosemirror-view@1.39.3)(tiptap-markdown@0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))):
dependencies: dependencies:
'@tiptap/core': 2.12.0(@tiptap/pm@2.12.0) '@tiptap/core': 2.12.0(@tiptap/pm@2.12.0)
'@tiptap/extension-image': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) '@tiptap/extension-image': 2.14.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))
@@ -8402,6 +8404,7 @@ snapshots:
prosemirror-markdown: 1.13.2 prosemirror-markdown: 1.13.2
prosemirror-model: 1.25.1 prosemirror-model: 1.25.1
prosemirror-state: 1.4.3 prosemirror-state: 1.4.3
prosemirror-view: 1.39.3
tiptap-markdown: 0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)) tiptap-markdown: 0.8.10(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))
nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0): nostr-signer-capacitor-plugin@0.0.4(@capacitor/core@7.2.0):
+5 -5
View File
@@ -12,7 +12,7 @@ import {
FOLLOWS, FOLLOWS,
REACTION, REACTION,
AUTH_JOIN, AUTH_JOIN,
GROUPS, ROOMS,
COMMENT, COMMENT,
isSignedEvent, isSignedEvent,
makeEvent, makeEvent,
@@ -124,7 +124,7 @@ export const broadcastUserData = async (relays: string[]) => {
// List updates // List updates
export const addSpaceMembership = async (url: string) => { export const addSpaceMembership = async (url: string) => {
const list = get(userMembership) || makeList({kind: GROUPS}) const list = get(userMembership) || makeList({kind: ROOMS})
const event = await addToListPublicly(list, ["r", url]).reconcile(nip44EncryptToSelf) const event = await addToListPublicly(list, ["r", url]).reconcile(nip44EncryptToSelf)
const relays = uniq([...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)]) const relays = uniq([...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)])
@@ -132,7 +132,7 @@ export const addSpaceMembership = async (url: string) => {
} }
export const removeSpaceMembership = async (url: string) => { export const removeSpaceMembership = async (url: string) => {
const list = get(userMembership) || makeList({kind: GROUPS}) const list = get(userMembership) || makeList({kind: ROOMS})
const pred = (t: string[]) => t[t[0] === "r" ? 1 : 2] === url const pred = (t: string[]) => t[t[0] === "r" ? 1 : 2] === url
const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf) const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf)
const relays = uniq([url, ...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)]) const relays = uniq([url, ...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)])
@@ -141,7 +141,7 @@ export const removeSpaceMembership = async (url: string) => {
} }
export const addRoomMembership = async (url: string, room: string) => { export const addRoomMembership = async (url: string, room: string) => {
const list = get(userMembership) || makeList({kind: GROUPS}) const list = get(userMembership) || makeList({kind: ROOMS})
const newTags = [ const newTags = [
["r", url], ["r", url],
["group", room, url], ["group", room, url],
@@ -153,7 +153,7 @@ export const addRoomMembership = async (url: string, room: string) => {
} }
export const removeRoomMembership = async (url: string, room: string) => { export const removeRoomMembership = async (url: string, room: string) => {
const list = get(userMembership) || makeList({kind: GROUPS}) const list = get(userMembership) || makeList({kind: ROOMS})
const pred = (t: string[]) => equals(["group", room, url], t.slice(0, 3)) const pred = (t: string[]) => equals(["group", room, url], t.slice(0, 3))
const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf) const event = await removeFromListByPredicate(list, pred).reconcile(nip44EncryptToSelf)
const relays = uniq([url, ...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)]) const relays = uniq([url, ...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)])
+2 -2
View File
@@ -5,7 +5,7 @@
import type {Filter} from "@welshman/util" import type {Filter} from "@welshman/util"
import {deriveEvents} from "@welshman/store" import {deriveEvents} from "@welshman/store"
import {formatTimestampRelative} from "@welshman/lib" import {formatTimestampRelative} from "@welshman/lib"
import {NOTE, GROUPS, MESSAGE, THREAD, COMMENT, getRelayTags, getListTags} from "@welshman/util" import {NOTE, ROOMS, MESSAGE, THREAD, COMMENT, getRelayTags, getListTags} from "@welshman/util"
import {repository, loadRelaySelections} from "@welshman/app" import {repository, loadRelaySelections} from "@welshman/app"
import Button from "@lib/components/Button.svelte" import Button from "@lib/components/Button.svelte"
import ProfileSpaces from "@app/components/ProfileSpaces.svelte" import ProfileSpaces from "@app/components/ProfileSpaces.svelte"
@@ -35,7 +35,7 @@
// Load groups and at least one note, regardless of time frame // Load groups and at least one note, regardless of time frame
load({ load({
filters: [ filters: [
{authors: [pubkey], kinds: [GROUPS]}, {authors: [pubkey], kinds: [ROOMS]},
{authors: [pubkey], limit: 1, kinds: [NOTE, MESSAGE, THREAD, COMMENT]}, {authors: [pubkey], limit: 1, kinds: [NOTE, MESSAGE, THREAD, COMMENT]},
], ],
relays: Router.get().FromPubkeys([pubkey]).getUrls(), relays: Router.get().FromPubkeys([pubkey]).getUrls(),
+4 -3
View File
@@ -1,4 +1,5 @@
<script lang="ts"> <script lang="ts">
import {nthEq} from "@welshman/lib"
import type {Profile} from "@welshman/util" import type {Profile} from "@welshman/util"
import { import {
getTag, getTag,
@@ -29,10 +30,10 @@
if (shouldBroadcast) { if (shouldBroadcast) {
const router = Router.get() const router = Router.get()
const scenario = router.merge([router.FromUser(), router.Index()])
relays.push( relays.push(...scenario.policy(addMaximalFallbacks).getUrls())
...router.merge([router.FromUser(), router.Index()]).policy(addMaximalFallbacks).getUrls(), template.tags = template.tags.filter(nthEq(0, "-"))
)
} else { } else {
template.tags = uniqTags([...template.tags, PROTECTED]) template.tags = uniqTags([...template.tags, PROTECTED])
} }
+8 -6
View File
@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import {goto} from "$app/navigation" import {goto} from "$app/navigation"
import {randomId} from "@welshman/lib" import {uniqBy, nth} from "@welshman/lib"
import {displayRelayUrl} from "@welshman/util" import {displayRelayUrl, makeRoomMeta} from "@welshman/util"
import {deriveRelay, getThunkError, createRoom, editRoom, joinRoom} from "@welshman/app" import {deriveRelay, getThunkError, createRoom, editRoom, joinRoom} from "@welshman/app"
import {preventDefault} from "@lib/html" import {preventDefault} from "@lib/html"
import Field from "@lib/components/Field.svelte" import Field from "@lib/components/Field.svelte"
@@ -16,19 +16,21 @@
const {url} = $props() const {url} = $props()
const room = randomId() const room = makeRoomMeta()
const relay = deriveRelay(url) const relay = deriveRelay(url)
const back = () => history.back() const back = () => history.back()
const tryCreate = async () => { const tryCreate = async () => {
room.tags = uniqBy(nth(0), [...room.tags, ["name", name]])
const createMessage = await getThunkError(createRoom(url, room)) const createMessage = await getThunkError(createRoom(url, room))
if (createMessage && !createMessage.match(/^duplicate:|already a member/)) { if (createMessage && !createMessage.match(/^duplicate:|already a member/)) {
return pushToast({theme: "error", message: createMessage}) return pushToast({theme: "error", message: createMessage})
} }
const editMessage = await getThunkError(editRoom(url, room, {name})) const editMessage = await getThunkError(editRoom(url, room))
if (editMessage) { if (editMessage) {
return pushToast({theme: "error", message: editMessage}) return pushToast({theme: "error", message: editMessage})
@@ -40,9 +42,9 @@
return pushToast({theme: "error", message: joinMessage}) return pushToast({theme: "error", message: joinMessage})
} }
await loadChannel(url, room) await loadChannel(url, room.id)
goto(makeSpacePath(url, room)) goto(makeSpacePath(url, room.id))
} }
const create = async () => { const create = async () => {
+14 -14
View File
@@ -33,14 +33,14 @@ import {
ZAP_RESPONSE, ZAP_RESPONSE,
DIRECT_MESSAGE, DIRECT_MESSAGE,
DIRECT_MESSAGE_FILE, DIRECT_MESSAGE_FILE,
GROUP_META, ROOM_META,
MESSAGE, MESSAGE,
GROUPS, ROOMS,
THREAD, THREAD,
COMMENT, COMMENT,
GROUP_JOIN, ROOM_JOIN,
GROUP_ADD_USER, ROOM_ADD_USER,
GROUP_REMOVE_USER, ROOM_REMOVE_USER,
getGroupTags, getGroupTags,
getRelayTagValues, getRelayTagValues,
getPubkeyTagValues, getPubkeyTagValues,
@@ -124,7 +124,7 @@ export const REACTION_KINDS = [REACTION, ZAP_RESPONSE]
export const NIP46_PERMS = export const NIP46_PERMS =
"nip44_encrypt,nip44_decrypt," + "nip44_encrypt,nip44_decrypt," +
[CLIENT_AUTH, AUTH_JOIN, MESSAGE, THREAD, COMMENT, GROUPS, WRAP, REACTION] [CLIENT_AUTH, AUTH_JOIN, MESSAGE, THREAD, COMMENT, ROOMS, WRAP, REACTION]
.map(k => `sign_event:${k}`) .map(k => `sign_event:${k}`)
.join(",") .join(",")
@@ -397,7 +397,7 @@ export const getMembershipRoomsByUrl = (url: string, list?: List) =>
sort(getGroupTags(getListTags(list)).filter(nthEq(2, url)).map(nth(1))) sort(getGroupTags(getListTags(list)).filter(nthEq(2, url)).map(nth(1)))
export const memberships = deriveEventsMapped<PublishedList>(repository, { export const memberships = deriveEventsMapped<PublishedList>(repository, {
filters: [{kinds: [GROUPS]}], filters: [{kinds: [ROOMS]}],
itemToEvent: item => item.event, itemToEvent: item => item.event,
eventToItem: (event: TrustedEvent) => readList(asDecryptedEvent(event)), eventToItem: (event: TrustedEvent) => readList(asDecryptedEvent(event)),
}) })
@@ -410,7 +410,7 @@ export const {
name: "memberships", name: "memberships",
store: memberships, store: memberships,
getKey: list => list.event.pubkey, getKey: list => list.event.pubkey,
load: makeOutboxLoader(GROUPS), load: makeOutboxLoader(ROOMS),
}) })
// Chats // Chats
@@ -508,7 +508,7 @@ export const splitChannelId = (id: string) => id.split("'")
export const hasNip29 = (relay?: Relay) => export const hasNip29 = (relay?: Relay) =>
relay?.profile?.supported_nips?.map?.(String)?.includes?.("29") relay?.profile?.supported_nips?.map?.(String)?.includes?.("29")
export const channelEvents = deriveEvents(repository, {filters: [{kinds: [GROUP_META]}]}) export const channelEvents = deriveEvents(repository, {filters: [{kinds: [ROOM_META]}]})
export const channels = derived( export const channels = derived(
[channelEvents, getUrlsForEvent], [channelEvents, getUrlsForEvent],
@@ -557,7 +557,7 @@ export const {
await load({ await load({
relays: [url], relays: [url],
filters: [{kinds: [GROUP_META], "#d": [room]}], filters: [{kinds: [ROOM_META], "#d": [room]}],
}) })
}, },
}) })
@@ -643,22 +643,22 @@ export const deriveUserMembershipStatus = (url: string, room: string) =>
[ [
pubkey, pubkey,
deriveEventsForUrl(url, [ deriveEventsForUrl(url, [
{kinds: [GROUP_JOIN, GROUP_ADD_USER, GROUP_REMOVE_USER], "#h": [room]}, {kinds: [ROOM_JOIN, ROOM_ADD_USER, ROOM_REMOVE_USER], "#h": [room]},
]), ]),
], ],
([$pubkey, $events]) => { ([$pubkey, $events]) => {
let status = MembershipStatus.Initial let status = MembershipStatus.Initial
for (const event of $events) { for (const event of $events) {
if (event.kind === GROUP_JOIN && event.pubkey === $pubkey) { if (event.kind === ROOM_JOIN && event.pubkey === $pubkey) {
status = MembershipStatus.Pending status = MembershipStatus.Pending
} }
if (event.kind === GROUP_REMOVE_USER && getTagValues("p", event.tags).includes($pubkey!)) { if (event.kind === ROOM_REMOVE_USER && getTagValues("p", event.tags).includes($pubkey!)) {
break break
} }
if (event.kind === GROUP_ADD_USER && getTagValues("p", event.tags).includes($pubkey!)) { if (event.kind === ROOM_ADD_USER && getTagValues("p", event.tags).includes($pubkey!)) {
return MembershipStatus.Granted return MembershipStatus.Granted
} }
} }
+2 -2
View File
@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import {onMount} from "svelte" import {onMount} from "svelte"
import {addToMapKey, dec, gt} from "@welshman/lib" import {addToMapKey, dec, gt} from "@welshman/lib"
import {GROUPS} from "@welshman/util" import {ROOMS} from "@welshman/util"
import {Router} from "@welshman/router" import {Router} from "@welshman/router"
import {load} from "@welshman/net" import {load} from "@welshman/net"
import type {Relay} from "@welshman/app" import type {Relay} from "@welshman/app"
@@ -29,7 +29,7 @@
const discoverRelays = () => const discoverRelays = () =>
Promise.all([ Promise.all([
load({ load({
filters: [{kinds: [GROUPS]}], filters: [{kinds: [ROOMS]}],
relays: Router.get().Index().getUrls(), relays: Router.get().Index().getUrls(),
}), }),
...getDefaultPubkeys().map(async pubkey => { ...getDefaultPubkeys().map(async pubkey => {
+2 -2
View File
@@ -3,7 +3,7 @@
import {onMount} from "svelte" import {onMount} from "svelte"
import {page} from "$app/stores" import {page} from "$app/stores"
import {ago, MONTH} from "@welshman/lib" import {ago, MONTH} from "@welshman/lib"
import {GROUP_META, EVENT_TIME, THREAD, COMMENT, MESSAGE} from "@welshman/util" import {ROOM_META, EVENT_TIME, THREAD, COMMENT, MESSAGE} from "@welshman/util"
import Page from "@lib/components/Page.svelte" import Page from "@lib/components/Page.svelte"
import SecondaryNav from "@lib/components/SecondaryNav.svelte" import SecondaryNav from "@lib/components/SecondaryNav.svelte"
import MenuSpace from "@app/components/MenuSpace.svelte" import MenuSpace from "@app/components/MenuSpace.svelte"
@@ -61,7 +61,7 @@
pullConservatively({ pullConservatively({
relays, relays,
filters: [ filters: [
{kinds: [GROUP_META]}, {kinds: [ROOM_META]},
{kinds: [THREAD, EVENT_TIME], since}, {kinds: [THREAD, EVENT_TIME], since},
{kinds: [COMMENT], "#K": [String(THREAD), String(EVENT_TIME)], since}, {kinds: [COMMENT], "#K": [String(THREAD), String(EVENT_TIME)], since},
...rooms.map(room => ({kinds: [MESSAGE], "#h": [room], since})), ...rooms.map(room => ({kinds: [MESSAGE], "#h": [room], since})),
@@ -9,11 +9,12 @@
import type {TrustedEvent, EventContent} from "@welshman/util" import type {TrustedEvent, EventContent} from "@welshman/util"
import { import {
makeEvent, makeEvent,
makeRoomMeta,
MESSAGE, MESSAGE,
DELETE, DELETE,
REACTION, REACTION,
GROUP_ADD_USER, ROOM_ADD_USER,
GROUP_REMOVE_USER, ROOM_REMOVE_USER,
} from "@welshman/util" } from "@welshman/util"
import {pubkey, publishThunk, getThunkError, joinRoom, leaveRoom} from "@welshman/app" import {pubkey, publishThunk, getThunkError, joinRoom, leaveRoom} from "@welshman/app"
import {slide, fade, fly} from "@lib/transition" import {slide, fade, fly} from "@lib/transition"
@@ -61,7 +62,7 @@
joining = true joining = true
try { try {
const message = await getThunkError(joinRoom(url, room)) const message = await getThunkError(joinRoom(url, makeRoomMeta({id: room})))
if (message && !message.startsWith("duplicate:")) { if (message && !message.startsWith("duplicate:")) {
return pushToast({theme: "error", message}) return pushToast({theme: "error", message})
@@ -77,7 +78,7 @@
const leave = async () => { const leave = async () => {
leaving = true leaving = true
try { try {
const message = await getThunkError(leaveRoom(url, room)) const message = await getThunkError(leaveRoom(url, makeRoomMeta({id: room})))
if (message && !message.startsWith("duplicate:")) { if (message && !message.startsWith("duplicate:")) {
pushToast({theme: "error", message}) pushToast({theme: "error", message})
@@ -244,7 +245,7 @@
relays: [url], relays: [url],
filters: [ filters: [
{ {
kinds: [GROUP_ADD_USER, GROUP_REMOVE_USER], kinds: [ROOM_ADD_USER, ROOM_REMOVE_USER],
"#p": [$pubkey!], "#p": [$pubkey!],
"#h": [room], "#h": [room],
limit: 10, limit: 10,