diff --git a/package-lock.json b/package-lock.json index 361e37a..89d74eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "digifall", - "version": "0.8.0", + "version": "0.8.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "digifall", - "version": "0.8.0", + "version": "0.8.1", "dependencies": { - "@chainsafe/libp2p-gossipsub": "8.0.0", + "@chainsafe/libp2p-gossipsub": "8.0.1", "@chainsafe/libp2p-yamux": "4.0.2", "@libp2p/bootstrap": "8.0.0", "@libp2p/floodsub": "7.0.1", - "@libp2p/mplex": "8.0.3", - "@libp2p/peer-id-factory": "2.0.3", + "@libp2p/mplex": "8.0.4", + "@libp2p/peer-id-factory": "2.0.4", "@libp2p/pubsub-peer-discovery": "8.0.4", "@libp2p/websockets": "6.0.3", "@sveltejs/vite-plugin-svelte": "2.4.1", @@ -21,9 +21,9 @@ "howler": "2.2.3", "idb-keyval": "6.2.1", "it-pipe": "3.0.1", - "libp2p": "0.45.5", + "libp2p": "0.45.9", "svelte": "3.59.1", - "uint8arrays": "4.0.3", + "uint8arrays": "4.0.4", "vite": "4.3.9" } }, @@ -40,9 +40,9 @@ } }, "node_modules/@achingbrain/nat-port-mapper": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.8.tgz", - "integrity": "sha512-FKiV8cAfpjJd6GG4E+iuShnJIpj8Ro36lKlfyMlYepXlmID0q5h7pTG5ha61FHigpouT3CQc5ZTAwXiDsVCSCA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.9.tgz", + "integrity": "sha512-w1M7dh7IsO5fvX9VQpH0w8MMphzLUl52Kf+paXTScNmFH4Ua+R6XI+x5p7LI3vY36JkTllTqAxNo8g1y0CMCrA==", "dependencies": { "@achingbrain/ssdp": "^4.0.1", "@libp2p/logger": "^2.0.0", @@ -50,25 +50,14 @@ "err-code": "^3.0.1", "it-first": "^3.0.1", "p-defer": "^4.0.0", - "p-timeout": "^5.0.2", - "xml2js": "^0.5.0" + "p-timeout": "^6.1.1", + "xml2js": "^0.6.0" }, "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@achingbrain/nat-port-mapper/node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@achingbrain/ssdp": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@achingbrain/ssdp/-/ssdp-4.0.4.tgz", @@ -84,15 +73,27 @@ "npm": ">=7.0.0" } }, + "node_modules/@achingbrain/ssdp/node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/@chainsafe/is-ip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.1.tgz", "integrity": "sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ==" }, "node_modules/@chainsafe/libp2p-gossipsub": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-8.0.0.tgz", - "integrity": "sha512-0cnjE2ND0T6VeqIlzBghmR8aalssQUNF3RtGzrI31VWNF1D8RSayyg32A8PHRUiNKxpl+CMm9xwk9NkBRf3J4g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-8.0.1.tgz", + "integrity": "sha512-vzRN7F1zLd/DKfK9VLQ7rrc/lYQFvE/RGnXjr+EanD2RoX+BjSdqZkvzcrJcaDzkCMJRCvpsFzgz2iLbV7SgYg==", "dependencies": { "@libp2p/crypto": "^1.0.3", "@libp2p/interface-connection": "^5.0.1", @@ -151,6 +152,231 @@ "@chainsafe/is-ip": "^2.0.1" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", @@ -166,6 +392,96 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -241,9 +557,9 @@ } }, "node_modules/@libp2p/interface-connection": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-5.1.0.tgz", - "integrity": "sha512-KFjCnGvFVlu0hHS/O8NOsst32mIzUQEkRWq5EhOBehXjjpOJBcm8XQaqmhBlxVfHEYm7XQsztEtFumveszzm1A==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface-connection/-/interface-connection-5.1.1.tgz", + "integrity": "sha512-ytknMbuuNW72LYMmTP7wFGP5ZTaUSGBCmV9f+uQ55XPcFHtKXLtKWVU/HE8IqPmwtyU8AO7veGoJ/qStMHNRVA==", "dependencies": { "@libp2p/interface-peer-id": "^2.0.0", "@libp2p/interfaces": "^3.0.0", @@ -423,9 +739,9 @@ } }, "node_modules/@libp2p/interface-peer-store": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-store/-/interface-peer-store-2.0.3.tgz", - "integrity": "sha512-xOVjzJCs3qhpUVUmOg3n8E8PUuUrmtzL9G8+Ht1HO+PJQX4HsyDjIgeUnSAnp6XBtiRyx5E/bE0xqThGZskPuQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/interface-peer-store/-/interface-peer-store-2.0.4.tgz", + "integrity": "sha512-jNvBK3O1JPJqSiDN2vkb+PV8bTPnYdP54nxsLtut1BWukNm610lwzwleV7CetFI4bJCn6g+BgBvvq8fdADy0tA==", "dependencies": { "@libp2p/interface-peer-id": "^2.0.0", "@multiformats/multiaddr": "^12.0.0" @@ -543,14 +859,15 @@ } }, "node_modules/@libp2p/logger": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.0.7.tgz", - "integrity": "sha512-Zp9C9lMNGfVFTMVc7NvxuxMvIE6gyxDapQc/TqZH02IuIDl1JpZyCgNILr0APd8wcUxwvwRXYNf3kQ0Lmz7tuQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-2.1.1.tgz", + "integrity": "sha512-2UbzDPctg3cPupF6jrv6abQnAUTrbLybNOj0rmmrdGm1cN2HJ1o/hBu0sXuq4KF9P1h/eVRn1HIRbVIEKnEJrA==", "dependencies": { - "@libp2p/interface-peer-id": "^2.0.0", - "debug": "^4.3.3", - "interface-datastore": "^8.0.0", - "multiformats": "^11.0.0" + "@libp2p/interface-peer-id": "^2.0.2", + "@multiformats/multiaddr": "^12.1.3", + "debug": "^4.3.4", + "interface-datastore": "^8.2.0", + "multiformats": "^11.0.2" }, "engines": { "node": ">=16.0.0", @@ -558,9 +875,9 @@ } }, "node_modules/@libp2p/mplex": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-8.0.3.tgz", - "integrity": "sha512-qMaMHmjYxkInQKRgBx1bsJB9T4FPqbvkwU9oItARl134Xila0ZqGaiRdy7m4aBVY0jmd0Jfq0F1ysy6KUCXxFA==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-8.0.4.tgz", + "integrity": "sha512-or3F5sGl8cw3TbnQgmkJ8z7/c97rwuzoy6f3b9gmkEVN8EzdxG2jOq+TEsgXzLz1GekRUR8nuDhliJ3UPhUnFw==", "dependencies": { "@libp2p/interface-connection": "^5.0.0", "@libp2p/interface-stream-muxer": "^4.1.2", @@ -635,9 +952,9 @@ } }, "node_modules/@libp2p/peer-id-factory": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-2.0.3.tgz", - "integrity": "sha512-9pwVbfghiKuiC76Pue/+tI4PD7gnw1jGVcxYD+nhcRs8ABE7NLaB7nCm99cCtvmMNRnl2JqaGgZJXt8mnvAEuQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-2.0.4.tgz", + "integrity": "sha512-+0D+oklFzHpjRI3v7uw3PMMx00P36DV7YvAgL0+gpos0VzR/BI9tRiM6dpObZTrQ1hxp78F03p+qR1Zy9Qnmuw==", "dependencies": { "@libp2p/crypto": "^1.0.0", "@libp2p/interface-keys": "^1.0.2", @@ -676,20 +993,22 @@ } }, "node_modules/@libp2p/peer-store": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-8.1.2.tgz", - "integrity": "sha512-NosqQs6roWPi7m2fqTixYV0t4yOa07AV3ZdzzdVSddqrZvV3frKw6pZOgJ37e8uuoCh+bK/uyFB8NdbXKh1GJw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-8.2.0.tgz", + "integrity": "sha512-6QVT16ThxVmGHxTRmT5vKF8d2zVkG+ioxLO51Z+NrFMi/UgqTffx0qozWOcJ3CFqxPOS7MLR+wFecej2eGu2/w==", "dependencies": { - "@libp2p/crypto": "^1.0.15", "@libp2p/interface-libp2p": "^3.1.0", "@libp2p/interface-peer-id": "^2.0.0", - "@libp2p/interface-peer-store": "^2.0.1", + "@libp2p/interface-peer-store": "^2.0.4", "@libp2p/interfaces": "^3.2.0", "@libp2p/logger": "^2.0.7", + "@libp2p/peer-collections": "^3.0.1", "@libp2p/peer-id": "^2.0.0", + "@libp2p/peer-id-factory": "^2.0.0", "@libp2p/peer-record": "^5.0.3", "@multiformats/multiaddr": "^12.0.0", "interface-datastore": "^8.0.0", + "it-all": "^3.0.2", "mortice": "^3.0.1", "multiformats": "^11.0.0", "protons-runtime": "^5.0.0", @@ -701,6 +1020,15 @@ "npm": ">=7.0.0" } }, + "node_modules/@libp2p/peer-store/node_modules/it-all": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.2.tgz", + "integrity": "sha512-ujqWETXhsDbF6C+6X6fvRw5ohlowRoy/o/h9BC8D+R3JQ13oLQ153w9gSWkWupOY7omZFQbJiAL1aJo5Gwe2yw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@libp2p/pubsub": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-7.0.1.tgz", @@ -840,9 +1168,9 @@ } }, "node_modules/@multiformats/mafmt": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.3.tgz", - "integrity": "sha512-F9W98CkdH7UR7CrLZ35jh9GrizbUBZsFSUwXdWAqu+Kf99vx67EU60g2QU1OABvkYrMKr8Jr9oKYY17wdtR+hQ==", + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.5.tgz", + "integrity": "sha512-hz8CreKgs99pNIfea5/BHTPY90nrVLDHgGNrrHPCe51pkO+OM95PiF43q7ivIlytU++asOxcp+FhZymIwYy6LA==", "dependencies": { "@multiformats/multiaddr": "^12.0.0" } @@ -996,9 +1324,9 @@ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/node": { - "version": "20.2.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", - "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==" + "version": "20.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz", + "integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ==" }, "node_modules/@types/retry": { "version": "0.12.1", @@ -1006,9 +1334,9 @@ "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dependencies": { "@types/node": "*" } @@ -1081,9 +1409,9 @@ } }, "node_modules/datastore-core": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.1.1.tgz", - "integrity": "sha512-Way+QZdrlAjLOHm7hc3r5mEIfmdkZCtb/bAWv+Mhp9FGQKSyaf8yL5oOcmp3pv+WrqdFYB7qYx7xe/FX3+zcjw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.0.tgz", + "integrity": "sha512-r3HZCdRTPXbHsiakhbYCtdGix9/a0G7huwYa9Ive+pIN7BjkdcLQseQ+iCMsECcocwHu23rs2qzdHKSflbVSng==", "dependencies": { "@libp2p/logger": "^2.0.0", "err-code": "^3.0.1", @@ -1261,6 +1589,19 @@ "npm": ">=7.0.0" } }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/get-iterator": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.0.tgz", @@ -1296,9 +1637,9 @@ "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==" }, "node_modules/interface-datastore": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.0.tgz", - "integrity": "sha512-rDMAcpCGxWMubRk2YQuSEHl11bc0xcZeBZzfLvqhoZJdByUWeo7YDJUdgyRKgD6liGXVYirtDkFU9nyn9xl2hg==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.3.tgz", + "integrity": "sha512-5U6BfK7cR4oSngm4pqYZBBAX7tpLI4YCOa3Ifz/EJEaEV2mmlloH5qP8ADWCVFk6vP1MPT925JJkt3kFIi7iWQ==", "dependencies": { "interface-store": "^5.0.0", "nanoid": "^4.0.0", @@ -1310,9 +1651,9 @@ } }, "node_modules/interface-store": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.0.tgz", - "integrity": "sha512-mjUwX3XSoreoxCS3sXS3pSRsGnUjl9T06KBqt/T7AgE9Sgp4diH64ZyURJKnj2T5WmCvTbC0Dm+mwQV5hfLSBQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.2.tgz", + "integrity": "sha512-q2sLoqC+UdaWnjwGyghsH0jwqqVk226lsG207e3QwPB8sAZYmYIWUnJwJH3JjFNNRV9e6CUTmm+gDO0Xg4KRiw==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -1330,9 +1671,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "engines": { "node": ">= 10" } @@ -1644,14 +1985,14 @@ } }, "node_modules/libp2p": { - "version": "0.45.5", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.45.5.tgz", - "integrity": "sha512-NpENvsTmnCnKZ37U1IDBM4z8bEV4rOY7b5b0k3/3qymUB6UI0i5XLde1bzvZIZj/4yB9p8kkxejXGR2JzHvJkw==", + "version": "0.45.9", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.45.9.tgz", + "integrity": "sha512-cf2dCf8naZqQoDw3xxSEZ6rKgQ8BBne5iWgtIKHAYrCvL+ulshz72jNgeAG0FQ/jjRD3yzmUuwoMaLHj6gf7Bw==", "dependencies": { - "@achingbrain/nat-port-mapper": "^1.0.3", - "@libp2p/crypto": "^1.0.4", + "@achingbrain/nat-port-mapper": "^1.0.9", + "@libp2p/crypto": "^1.0.17", "@libp2p/interface-address-manager": "^3.0.0", - "@libp2p/interface-connection": "^5.0.0", + "@libp2p/interface-connection": "^5.1.1", "@libp2p/interface-connection-encrypter": "^4.0.0", "@libp2p/interface-connection-gater": "^3.0.0", "@libp2p/interface-connection-manager": "^3.0.0", @@ -1663,7 +2004,7 @@ "@libp2p/interface-peer-id": "^2.0.1", "@libp2p/interface-peer-info": "^1.0.3", "@libp2p/interface-peer-routing": "^1.1.0", - "@libp2p/interface-peer-store": "^2.0.3", + "@libp2p/interface-peer-store": "^2.0.4", "@libp2p/interface-pubsub": "^4.0.0", "@libp2p/interface-record": "^2.0.6", "@libp2p/interface-registrar": "^2.0.3", @@ -1671,13 +2012,13 @@ "@libp2p/interface-transport": "^4.0.0", "@libp2p/interfaces": "^3.2.0", "@libp2p/keychain": "^2.0.0", - "@libp2p/logger": "^2.0.1", + "@libp2p/logger": "^2.1.1", "@libp2p/multistream-select": "^3.1.8", "@libp2p/peer-collections": "^3.0.0", "@libp2p/peer-id": "^2.0.0", "@libp2p/peer-id-factory": "^2.0.0", "@libp2p/peer-record": "^5.0.0", - "@libp2p/peer-store": "^8.1.0", + "@libp2p/peer-store": "^8.2.0", "@libp2p/topology": "^4.0.1", "@libp2p/tracked-map": "^3.0.0", "@libp2p/utils": "^3.0.10", @@ -2119,9 +2460,9 @@ } }, "node_modules/rollup": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", "bin": { "rollup": "dist/bin/rollup" }, @@ -2254,15 +2595,11 @@ } }, "node_modules/uint8arrays": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.3.tgz", - "integrity": "sha512-b+aKlI2oTnxnfeSQWV1sMacqSNxqhtXySaH6bflvONGxF8V/fT3ZlYH7z2qgGfydsvpVo4JUgM/Ylyfl2YouCg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.4.tgz", + "integrity": "sha512-AOoA66e/A7zoXm1mgzQjGmkWDTvCrS3ttWXLHFtlVAwMobLcaOA7G7WRNNAcyfjjYdFDtkEK6njRDX7hZLIO9Q==", "dependencies": { "multiformats": "^11.0.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" } }, "node_modules/undici": { @@ -2393,9 +2730,9 @@ } }, "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", + "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" diff --git a/package.json b/package.json index 18246d4..26ef452 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "digifall", - "version": "0.8.0", + "version": "0.8.1", "type": "module", "scripts": { "dev": "vite", @@ -8,12 +8,12 @@ "preview": "vite preview" }, "dependencies": { - "@chainsafe/libp2p-gossipsub": "8.0.0", + "@chainsafe/libp2p-gossipsub": "8.0.1", "@chainsafe/libp2p-yamux": "4.0.2", "@libp2p/bootstrap": "8.0.0", "@libp2p/floodsub": "7.0.1", - "@libp2p/mplex": "8.0.3", - "@libp2p/peer-id-factory": "2.0.3", + "@libp2p/mplex": "8.0.4", + "@libp2p/peer-id-factory": "2.0.4", "@libp2p/pubsub-peer-discovery": "8.0.4", "@libp2p/websockets": "6.0.3", "@sveltejs/vite-plugin-svelte": "2.4.1", @@ -21,7 +21,7 @@ "howler": "2.2.3", "idb-keyval": "6.2.1", "it-pipe": "3.0.1", - "libp2p": "0.45.5", + "libp2p": "0.45.9", "svelte": "3.59.1", "uint8arrays": "4.0.4", "vite": "4.3.9" diff --git a/src/Board.svelte b/src/Board.svelte index 3ec9f28..dd55213 100644 --- a/src/Board.svelte +++ b/src/Board.svelte @@ -135,6 +135,7 @@ {card} {index} blink={$matchedIndexes.has(index)} + cluster={$options.cluster} focus={card.x === focusCard?.x && card.y === focusCard?.y} plus={$plusIndex === index} {checkStart} diff --git a/src/Card.svelte b/src/Card.svelte index 1ef3e7a..e1928b3 100644 --- a/src/Card.svelte +++ b/src/Card.svelte @@ -1,23 +1,21 @@
-
+
{card.value}
-
diff --git a/src/Options.svelte b/src/Options.svelte index 9ac1ff7..f44aad3 100644 --- a/src/Options.svelte +++ b/src/Options.svelte @@ -53,9 +53,12 @@ + + + - + ($options.sound = !$options.sound)} /> - +
diff --git a/src/constants.js b/src/constants.js index b141b14..a7d5499 100644 --- a/src/constants.js +++ b/src/constants.js @@ -5,6 +5,7 @@ export const COLORS = Object.freeze({ export const CORE = Object.freeze({ columns: 6, rows: 6, + maxValue: 9, }); export const KEYS = Object.freeze({ @@ -65,7 +66,7 @@ export const INITIAL_VALUES = Object.freeze({ [KEYS.options]: { [KEYS.playerName]: "", [KEYS.leaderboard]: true, - seedground: true, + cluster: true, speedrun: false, sound: true, }, diff --git a/src/core.js b/src/core.js index 4ddcb1e..96f90c3 100644 --- a/src/core.js +++ b/src/core.js @@ -80,6 +80,10 @@ function checkLocalScore(game, type, value) { // CARDS LOGIC ///////////////////////////////////////////////////////////////// +function getNextCardValue(value) { + return value < CORE.maxValue ? value + 1 : 0; +} + function getFieldFromCards($cards) { const field = Array.from({ length: CORE.columns }, () => Array.from({ length: 2 * CORE.rows }) @@ -107,6 +111,7 @@ function getFallenCards(game, $cards) { x, y: y - count, value, + nextValue: getNextCardValue(value), duration, }; if (count > 0 && duration > 0 && !set.has(duration)) set.add(duration); @@ -124,10 +129,10 @@ function getMatchedFromCards($cards) { const field = getFieldFromCards($cards); const escape = new Set(); const groups = []; - const assort = (group, index, currentValue) => { + const assort = (group, index, askedValue) => { if (escape.has(index)) return; const { x, y, value } = $cards[index]; - if (currentValue !== undefined && currentValue !== value) return; + if (askedValue !== undefined && askedValue !== value) return; if (!groups[group]) groups[group] = { value, indexes: new Set() }; groups[group].indexes.add(index); escape.add(index); @@ -175,6 +180,32 @@ function getMatchedCards(game, $cards, $matchedIndexes) { }); } +function getClusteredCards(game, $cards) { + if (!get(game.options).cluster) return $cards; + const field = getFieldFromCards($cards); + return $cards.map((card) => ({ + ...card, + cluster: getCluster($cards, field, card), + })); +} + +function getCluster($cards, field, { x, y, value }) { + const topIndex = y === CORE.rows - 1 ? -1 : field[x][y + 1]; + const rightIndex = x === CORE.columns - 1 ? -1 : field[x + 1][y]; + const bottomIndex = y === 0 ? -1 : field[x][y - 1]; + const leftIndex = x === 0 ? -1 : field[x - 1][y]; + const topValue = topIndex > -1 ? $cards[topIndex].value : NaN; + const rightValue = rightIndex > -1 ? $cards[rightIndex].value : NaN; + const bottomValue = bottomIndex > -1 ? $cards[bottomIndex].value : NaN; + const leftValue = leftIndex > -1 ? $cards[leftIndex].value : NaN; + return { + top: topValue === value, + right: rightValue === value, + bottom: bottomValue === value, + left: leftValue === value, + }; +} + // ENERGY LOGIC //////////////////////////////////////////////////////////////// function getDiffFromBuffer(buffer) { @@ -245,17 +276,21 @@ function doIdlePhase(game) { function doPlusPhase(game) { game.plusIndex.update(($plusIndex) => { - game.cards.update(($cards) => { - return $cards.map((card, index) => { - return index === $plusIndex - ? { - ...card, - value: card.value < 9 ? card.value + 1 : 0, - duration: 0, - } - : card; - }); - }); + game.cards.update(($cards) => + getClusteredCards( + game, + $cards.map((card, index) => { + if (index !== $plusIndex) return card; + const value = getNextCardValue(card.value); + return { + ...card, + value, + nextValue: getNextCardValue(value), + duration: 0, + }; + }) + ) + ); return undefined; }); game.phase.set(PHASES.blink); @@ -309,7 +344,7 @@ function doBlinkPhase(game) { function doMatchPhase(game) { game.matchedIndexes.update(($matchedIndexes) => { game.cards.update(($cards) => - getMatchedCards(game, $cards, $matchedIndexes) + getClusteredCards(game, getMatchedCards(game, $cards, $matchedIndexes)) ); return new Set(); }); @@ -317,7 +352,9 @@ function doMatchPhase(game) { } function doFallPhase(game) { - game.cards.update(($cards) => getFallenCards(game, $cards)); + game.cards.update(($cards) => + getClusteredCards(game, getFallenCards(game, $cards)) + ); checkSpeedrun(game, () => game.phase.set(PHASES.blink), 400); } @@ -501,12 +538,14 @@ function createGetNextCardValue($seed) { function getInitialCards(game) { return Array.from( { length: CORE.columns * CORE.rows }, - (_, index, x) => ( + (_, index, x, value) => ( (x = trunc(index / CORE.columns)), + (value = game.getNextCardValue(x)), { x, y: index % CORE.rows, - value: game.getNextCardValue(x), + value, + nextValue: getNextCardValue(value), duration: 0, } ) @@ -525,7 +564,9 @@ function getPreparedCards(game, $cards) { function doSeedLogic(game, $seed) { if (!$seed) return; game.getNextCardValue = createGetNextCardValue($seed); - game.cards.set(getPreparedCards(game, getInitialCards(game))); + game.cards.set( + getClusteredCards(game, getPreparedCards(game, getInitialCards(game))) + ); let $moves = get(game.moves); if (!$moves) return; $moves = Array.isArray($moves) ? $moves : getArrayFromBase64($moves); diff --git a/src/styles.css b/src/styles.css index 60331b2..8016733 100644 --- a/src/styles.css +++ b/src/styles.css @@ -424,7 +424,7 @@ p { left: calc(var(--card-x) * 21rem); width: 21rem; height: 21rem; - box-shadow: var(--gloss), var(--shadow-2); + box-shadow: var(--shadow-2); cursor: pointer; transition-duration: calc(var(--card-duration) * 1ms); transition-property: bottom; @@ -432,12 +432,13 @@ p { will-change: bottom; } -.card.matt { - box-shadow: var(--shadow-2); -} - .card .current, .card .next { + --top-left: -10% 17%, 17% -10%; + --top-right: 83% -10%, 110% 17%; + --bottom-right: 110% 83%, 83% 110%; + --bottom-left: 17% 110%, -10% 83%; + position: absolute; z-index: 1; width: 21rem; @@ -453,6 +454,32 @@ p { text-align: center; } +.card.cluster .current, +.card.cluster .next { + clip-path: polygon(var(--top-left), var(--top-right), var(--bottom-right), var(--bottom-left)); + transition: clip-path 200ms ease; +} + +.card.cluster:not(.plus) .current.cluster-top { + --top-left: -10% -10%, -10% -10%; + --top-right: 110% -10%, 110% -10%; +} + +.card.cluster:not(.plus) .current.cluster-right { + --top-right: 110% -10%, 110% -10%; + --bottom-right: 110% 110%, 110% 110%; +} + +.card.cluster:not(.plus) .current.cluster-bottom { + --bottom-right: 110% 110%, 110% 110%; + --bottom-left: -10% 110%, -10% 110%; +} + +.card.cluster:not(.plus) .current.cluster-left { + --top-left: -10% -10%, -10% -10%; + --bottom-left: -10% 110%, -10% 110%; +} + .card .next { box-shadow: var(--gloss), var(--shadow-1); transform: rotateY(-180deg); @@ -471,11 +498,12 @@ p { } .card.blink { + animation: fade-out 400ms ease 400ms forwards; box-shadow: none; } .card.blink .current { - animation: blink 200ms steps(2, end) 2, fade-out 400ms ease 400ms forwards; + animation: blink 200ms steps(2, end) 2; box-shadow: none; }