diff --git a/package.json b/package.json index 2a0996a61..609e58c44 100644 --- a/package.json +++ b/package.json @@ -62,8 +62,8 @@ "typescript": "^5.5.2", "typescript-eslint": "^7.13.1", "vite": "^5.3.1", - "vitest": "^1.6.0", - "vite-tsconfig-paths": "^4.3.2" + "vite-tsconfig-paths": "^4.3.2", + "vitest": "^1.6.0" }, "repository": { "type": "git", @@ -79,11 +79,7 @@ "@ipld/dag-cbor": "^9.2.0", "@ipld/dag-json": "^10.2.1", "@ipld/unixfs": "^3.0.0", - "@netlify/blobs": "^7.3.0", - "@ucanto/interface": "^10.0.1", - "@web3-storage/clock": "^0.4.1", "@web3-storage/pail": "^0.6.0", - "@web3-storage/w3up-client": "^15.0.0", "better-sqlite3": "^11.0.0", "charwise": "^3.0.1", "cross-fetch": "^4.0.0", @@ -92,8 +88,6 @@ "js-base64": "^3.7.7", "multiformats": "^13.1.1", "p-limit": "^5.0.0", - "partykit": "^0.0.107", - "partysocket": "^1.0.1", "prolly-trees": "^1.0.4", "randombytes": "^2.1.0", "react": "^18.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0db527f4..cf2b5afd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,21 +23,9 @@ importers: '@ipld/unixfs': specifier: ^3.0.0 version: 3.0.0 - '@netlify/blobs': - specifier: ^7.3.0 - version: 7.3.0 - '@ucanto/interface': - specifier: ^10.0.1 - version: 10.0.1 - '@web3-storage/clock': - specifier: ^0.4.1 - version: 0.4.1 '@web3-storage/pail': specifier: ^0.6.0 version: 0.6.0 - '@web3-storage/w3up-client': - specifier: ^15.0.0 - version: 15.0.0(encoding@0.1.13) better-sqlite3: specifier: ^11.0.0 version: 11.0.0 @@ -62,12 +50,6 @@ importers: p-limit: specifier: ^5.0.0 version: 5.0.0 - partykit: - specifier: ^0.0.107 - version: 0.0.107 - partysocket: - specifier: ^1.0.1 - version: 1.0.1 prolly-trees: specifier: ^1.0.4 version: 1.0.4 @@ -174,43 +156,6 @@ packages: resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} - '@cloudflare/workerd-darwin-64@1.20240610.1': - resolution: {integrity: sha512-YanZ1iXgMGaUWlleB5cswSE6qbzyjQ8O7ENWZcPAcZZ6BfuL7q3CWi0t9iM1cv2qx92rRztsRTyjcfq099++XQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - - '@cloudflare/workerd-darwin-arm64@1.20240610.1': - resolution: {integrity: sha512-bRe/y/LKjIgp3L2EHjc+CvoCzfHhf4aFTtOBkv2zW+VToNJ4KlXridndf7LvR9urfsFRRo9r4TXCssuKaU+ypQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - - '@cloudflare/workerd-linux-64@1.20240610.1': - resolution: {integrity: sha512-2zDcadR7+Gs9SjcMXmwsMji2Xs+yASGNA2cEHDuFc4NMUup+eL1mkzxc/QzvFjyBck98e92rBjMZt2dVscpGKg==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - - '@cloudflare/workerd-linux-arm64@1.20240610.1': - resolution: {integrity: sha512-7y41rPi5xmIYJN8CY+t3RHnjLL0xx/WYmaTd/j552k1qSr02eTE2o/TGyWZmGUC+lWnwdPQJla0mXbvdqgRdQg==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - - '@cloudflare/workerd-windows-64@1.20240610.1': - resolution: {integrity: sha512-B0LyT3DB6rXHWNptnntYHPaoJIy0rXnGfeDBM3nEVV8JIsQrx8MEFn2F2jYioH1FkUVavsaqKO/zUosY3tZXVA==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - - '@cloudflare/workers-types@4.20240614.0': - resolution: {integrity: sha512-fnV3uXD1Hpq5EWnY7XYb+smPcjzIoUFiZpTSV/Tk8qKL3H+w6IqcngZwXQBZ/2U/DwYkDilXHW3FfPhnyD7FZA==} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -519,10 +464,6 @@ packages: resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@2.1.0': - resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} - engines: {node: '>=14'} - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -547,12 +488,6 @@ packages: resolution: {integrity: sha512-693AqMY2jvhe+w4jSwjnDrbhxIu39gm1H4f6/KD5gG+6VFMM6EXV7vq85BvEf8CRsnA0+auWfA29/S8gbWI0Ew==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - '@ipld/dag-ucan@3.4.0': - resolution: {integrity: sha512-sW4R43w3DbEdoGWWJZCwsblwXa600HCanG9p2w1MJPVBNTNjhvqc3XI0uEqKhT2oqKWrND7uInVtcPmZme7hhA==} - - '@ipld/unixfs@2.2.0': - resolution: {integrity: sha512-lDQ2eRhJlbFaBoO3bhOmDVCLmpOnhwtwbilqUgAAhbhoPSmLrnv7gsBuToZjXOdPaEGSL7apkmm6nFrcU6zh4Q==} - '@ipld/unixfs@3.0.0': resolution: {integrity: sha512-Tj3/BPOlnemcZQ2ETIZAO8hqAs9KNzWyX5J9+JCL9jDwvYwjxeYjqJ3v+9DusNvTBmJhZnGVP6ijUHrsuOLp+g==} @@ -582,31 +517,10 @@ packages: '@jridgewell/trace-mapping@0.3.20': resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@multiformats/murmur3@2.1.8': resolution: {integrity: sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - '@netlify/blobs@7.3.0': - resolution: {integrity: sha512-wN/kNTZo4xjlUM/C0WILOkJbe8p4AFquSGkZEIoIcgnsx5ikp2GyqGiq1WMLee7QdbnqeIV2g2hn/PjT324E5w==} - engines: {node: ^14.16.0 || >=16.0.0} - - '@noble/curves@1.3.0': - resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} - - '@noble/ed25519@1.7.3': - resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} - - '@noble/hashes@1.3.3': - resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} - engines: {node: '>= 16'} - - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -822,12 +736,6 @@ packages: cpu: [x64] os: [win32] - '@scure/base@1.1.6': - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} - - '@scure/bip39@1.3.0': - resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} - '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -885,9 +793,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/minimatch@3.0.5': - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - '@types/node@20.14.8': resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==} @@ -900,12 +805,6 @@ packages: '@types/react@18.3.3': resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} - '@types/retry@0.12.1': - resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} - - '@types/retry@0.12.2': - resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/which@2.0.2': resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} @@ -990,27 +889,6 @@ packages: resolution: {integrity: sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==} engines: {node: ^18.18.0 || >=20.0.0} - '@ucanto/client@9.0.1': - resolution: {integrity: sha512-cV8w3AnaZaYCdUmyFFICj8YhFckDoy2DvWgAzGDMkPz0WbUW4lw9Tjm4hEE8x5kiP47wYej/pHKWCcoELiU0qw==} - - '@ucanto/core@10.0.1': - resolution: {integrity: sha512-1BfUaJu0/c9Rl/WdZSDbScJJLsPsPe1g4ynl5kubUj3xDD/lyp/Q12PQVQ2X7hDiWwkpwmxCkRMkOxwc70iNKQ==} - - '@ucanto/interface@10.0.1': - resolution: {integrity: sha512-+Vr/N4mLsdynV9/bqtdFiq7WsUf3265/Qx2aHJmPtXo9/QvWKthJtpe0g8U4NWkWpVfqIFvyAO2db6D9zWQfQw==} - - '@ucanto/principal@9.0.1': - resolution: {integrity: sha512-8eAvaZHW1vyET4X90rkJv6pmW1IOdEYlZYwO3wDgTkC5m9VytBEywCvpzP57cavdYIbbPse5QS9nMEGvk87zhw==} - - '@ucanto/server@10.0.0': - resolution: {integrity: sha512-JMDMT3tFRE0S1cdtx/Hhh7v9FizV6IS0fPrh6pcli7AzKvXVy8Xu6EQ/66Fax4AQM2tkGxNNxjj2wHM7P4CqAg==} - - '@ucanto/transport@9.1.1': - resolution: {integrity: sha512-3CR17nEemOVaTuMZa6waWgVL4sLxSPcxYvpaNeJ6NZo1rfsqdyRXOtbVV/RcI2BtUL0Cao6JM6P9+gdghfc5ng==} - - '@ucanto/validator@9.0.2': - resolution: {integrity: sha512-LxhRbDMIoLt9LYHq/Rz1WCEH8AtmdsBTS/it28Ij/A3W0zyoSwUpAUxBtXaKRh/gpbxdWmjxX+nVfFJYL//b4g==} - '@vitest/browser@1.6.0': resolution: {integrity: sha512-3Wpp9h1hf++rRVPvoXevkdHybLhJVn7MwIMKMIh08tVaoDMmT6fnNhbP222Z48V9PptpYeA5zvH9Ct/ZcaAzmQ==} peerDependencies: @@ -1064,50 +942,10 @@ packages: resolution: {integrity: sha512-jY+n6jlGeK+9Tx8T659PKLwMQTGpLW5H78CSEWgZLbjbVSr2LfGR8Lx0CRktNXxAtqEVZPj16Pi74OtAhvhE6Q==} engines: {node: ^16.13 || >=18} - '@web3-storage/access@20.0.0': - resolution: {integrity: sha512-kl2b3ZuN3NvAxDM6K8GlPgu1o67JtA3EGId8Bg+tFRqZiQlERQmMMOfLl8zKVOUvlq4bDFtWHl6EViLO4BwSJw==} - - '@web3-storage/blob-index@1.0.3': - resolution: {integrity: sha512-VjGLhf6Gf4ZmzjJXS6wU4aRvnM+HLcuRCJHegjQ36ka52sR2WWOcqDNNVvabtlpnYjGtVFQCPUzaCcs18wpqHQ==} - engines: {node: '>=16.15'} - - '@web3-storage/capabilities@16.0.0': - resolution: {integrity: sha512-wCjLpYc6t8tFRZrF2k2vBteJDWzHkmQjoJG0Yy/fjA04IjNN48iVZaCMQIANHXZxDGlYRGxhwzDwl4dovAdSTQ==} - - '@web3-storage/capabilities@17.2.0': - resolution: {integrity: sha512-hnJGIQcCAMBbR8sfgkEwnjBVcpNpNRBnzSEB2E/wKkKIjHKimw3ClsVznu6jjFExCXFaKHd6r1eAU4NcTYsueg==} - - '@web3-storage/clock@0.4.1': - resolution: {integrity: sha512-VHAyvbl7ZrNls6yltS5Djuwjz9Rw0rcA8tpv7qQp1WoheY00YBdqa8gjR1V4egVkqV1ZugGA06XH+ug0OhGXDg==} - - '@web3-storage/data-segment@3.2.0': - resolution: {integrity: sha512-SM6eNumXzrXiQE2/J59+eEgCRZNYPxKhRoHX2QvV3/scD4qgcf4g+paWBc3UriLEY1rCboygGoPsnqYJNyZyfA==} - - '@web3-storage/data-segment@5.1.0': - resolution: {integrity: sha512-FYdmtKvNiVz+maZ++k4PdD43rfJW5DeagLpstq2y84CyOKNRBWbHLCZ/Ec5zT9iGI+0WgsCGbpC/WlG0jlrnhA==} - - '@web3-storage/did-mailto@2.1.0': - resolution: {integrity: sha512-TRmfSXj1IhtX3ESurSNOylZSBKi0z/VJNoMLpof+AVRdovgZjjocpiePQTs2pfHKqHTHfJXc9AboWyK4IKTWMw==} - engines: {node: '>=16.15'} - - '@web3-storage/filecoin-client@3.3.3': - resolution: {integrity: sha512-xFL8odr5PpTjQvpfw/4jphcm7ZvcBRMSKHn3ReEaVcFjxQL45Rojjleuq/QEdMwrNfsLCqqAxC54jk55o5/ERQ==} - - '@web3-storage/pail@0.5.0': - resolution: {integrity: sha512-BUuunK6ZQQfNvECB2st0G7/rd0Vfsn6jFg01tfMLEsitFJWI9J503ixKJ8jWpoNW/3juJ32HQpo8ar3pmgG5uA==} - hasBin: true - '@web3-storage/pail@0.6.0': resolution: {integrity: sha512-/lIBu8pR92AEcCqYqjcxc3kUSLLRGQLomUes7PAyoK4lNe4ttm8Wr7WFcrbJmWTBJZmYE6npbYcVio8U+OexpA==} hasBin: true - '@web3-storage/upload-client@16.1.1': - resolution: {integrity: sha512-aVGpcqnLxRk4u3uZAum1jwC5BbEbjuqAZZBrGNZ3UZVFnnJJXPm3DE+r1WC8FV2mbgC/yKKqDMu1FP1uB9wJkA==} - - '@web3-storage/w3up-client@15.0.0': - resolution: {integrity: sha512-XEzfHgn4NVS212xXH+BRlFzMFoB+TaAeQHLrrW9zoWlPnKJJphdKE2hVJZBPovIU5HWSPNsNM4mdkowYEQ73OQ==} - engines: {node: '>=18'} - '@zip.js/zip.js@2.7.45': resolution: {integrity: sha512-Mm2EXF33DJQ/3GWWEWeP1UCqzpQ5+fiMvT3QWspsXY05DyqqxWu7a9awSzU4/spHMHVFrTjani1PR0vprgZpow==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} @@ -1125,11 +963,6 @@ packages: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} @@ -1142,20 +975,9 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1183,9 +1005,6 @@ packages: any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - any-signal@3.0.1: - resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1198,9 +1017,6 @@ packages: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} - archy@1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1211,9 +1027,6 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -1224,9 +1037,6 @@ packages: async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - atomically@2.0.2: - resolution: {integrity: sha512-Xfmb4q5QV7uqTlVdMSTtO5eF4DCHfNOdaPyKlbFShkzeNP+3lj3yjjcbdjSmEY4+pDBKJ9g26aP+ImTe88UHoQ==} - b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -1262,10 +1072,6 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} - bigint-mod-arith@3.3.1: - resolution: {integrity: sha512-pX/cYW3dCa87Jrzv6DAr8ivbbJRzEX5yGhdt8IutnX/PCIXfpx+mabWNK/M8qqh+zQ0J3thftUBHW0ByuUlG0w==} - engines: {node: '>=10.4.0'} - binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -1286,9 +1092,6 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - browser-readablestream-to-it@1.0.3: - resolution: {integrity: sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==} - buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -1324,12 +1127,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - capnp-ts@0.7.0: - resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} - - carstream@2.2.0: - resolution: {integrity: sha512-/gHkK0lQjmGM45fhdx8JD+x7a1XS1qUk3T9xWWSt3oZiWPLq4u/lnDstp+N55K7hqTKKlb0CCr43EHTrlbmJSQ==} - cborg@4.1.3: resolution: {integrity: sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==} hasBin: true @@ -1368,14 +1165,6 @@ packages: peerDependencies: devtools-protocol: '*' - cli-color@2.0.4: - resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} - engines: {node: '>=0.10'} - - clipboardy@4.0.0: - resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} - engines: {node: '>=18'} - cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1408,17 +1197,9 @@ packages: concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - conf@11.0.2: - resolution: {integrity: sha512-jjyhlQ0ew/iwmtwsS2RaB6s8DBifcE2GYBEaw2SJDUY/slJJbNfY4GlDVzOs/ff8cM/Wua5CikqXgbFl5eu85A==} - engines: {node: '>=14.16'} - confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -1447,13 +1228,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -1462,10 +1236,6 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - debounce-fn@5.1.2: - resolution: {integrity: sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==} - engines: {node: '>=12'} - debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1531,10 +1301,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dot-prop@7.2.0: - resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1546,10 +1312,6 @@ packages: resolution: {integrity: sha512-IeJXEczG+DNYBIa9gFgVYTqrawlxmc9SUqUsWU2E98jOsO/amA7wzabKOS8Bwgr/3xWoyXCJ6yGFrbFKrilyyQ==} hasBin: true - electron-fetch@1.9.1: - resolution: {integrity: sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==} - engines: {node: '>=6'} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1566,27 +1328,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - err-code@3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - - es6-weak-map@2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - esbuild-plugin-resolve@2.0.0: resolution: {integrity: sha512-eJy9B8yDW5X/J48eWtR1uVmv+DKfHvYYnrrcqQoe/nUkVHVOTZlJnSevkYyGOz6hI90t036Y5QIPDrGzmppxfg==} @@ -1634,10 +1378,6 @@ packages: engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - espree@10.1.0: resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1666,17 +1406,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - event-target-shim@6.0.2: - resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==} - engines: {node: '>=10.13.0'} - eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -1692,17 +1425,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -1795,16 +1521,10 @@ packages: get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - get-iterator@1.0.2: - resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} - get-port@7.1.0: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -1835,9 +1555,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.2: resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} engines: {node: '>=16 || 14 >=14.18'} @@ -1883,9 +1600,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hashlru@2.3.0: - resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==} - http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} @@ -1964,22 +1678,10 @@ packages: resolution: {integrity: sha512-HVjrACOhU8RgMskcrfydk+FDAE9pFKr8tneKLaVYQ2f81HUKXoiSdgsAJY/jt7Ieyj4tE12TZGduIeWtNpScOw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - ipfs-utils@9.0.14: - resolution: {integrity: sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==} - engines: {node: '>=16.0.0', npm: '>=7.0.0'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - - is-electron@2.2.2: - resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} - is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1992,15 +1694,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} - engines: {node: '>=16'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2009,17 +1702,10 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2028,14 +1714,6 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - is64bit@2.0.0: - resolution: {integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==} - engines: {node: '>=18'} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -2046,19 +1724,9 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - iso-url@1.2.1: - resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} - engines: {node: '>=12'} - - it-all@1.0.6: - resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} - it-filter@3.0.4: resolution: {integrity: sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g==} - it-glob@1.0.2: - resolution: {integrity: sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q==} - it-last@3.0.4: resolution: {integrity: sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q==} @@ -2085,9 +1753,6 @@ packages: resolution: {integrity: sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - it-to-stream@1.0.0: - resolution: {integrity: sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==} - jackspeak@3.4.0: resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} @@ -2118,12 +1783,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json-schema-typed@8.0.1: - resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2221,9 +1880,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lru-queue@0.1.0: - resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -2231,13 +1887,6 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - memoizee@0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} - - merge-options@3.0.4: - resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} - engines: {node: '>=10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -2265,11 +1914,6 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - miniflare@3.20240610.0: - resolution: {integrity: sha512-J6aXmkII5gcq+kC4TurxKiR4rC++apPST/K8P/YjqoQQgrJ+NRPacBhf6iVh8R3ujnXYXaq+Ae+gm+LM0XHK/w==} - engines: {node: '>=16.13'} - hasBin: true - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2297,10 +1941,6 @@ packages: mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} @@ -2308,10 +1948,6 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - multiformats@11.0.2: - resolution: {integrity: sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==} - engines: {node: '>=16.0.0', npm: '>=7.0.0'} - multiformats@12.1.3: resolution: {integrity: sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} @@ -2323,10 +1959,6 @@ packages: resolution: {integrity: sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==} engines: {node: '>=8.0.0'} - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -2338,11 +1970,6 @@ packages: napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - native-fetch@3.0.0: - resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} - peerDependencies: - node-fetch: '*' - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2350,9 +1977,6 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - node-abi@3.65.0: resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==} engines: {node: '>=10'} @@ -2401,13 +2025,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - one-webcrypto@1.0.3: - resolution: {integrity: sha512-fu9ywBVBPx0gS9K0etIROTiCkvI5S1TDjFsYFb3rC1ewFxeOqsbzq7aIMBHsYfrTHBcGXJaONXXjTl8B01cW1Q==} - - one-webcrypto@https://codeload.github.com/web3-storage/one-webcrypto/tar.gz/5148cd14d5489a8ac4cd38223870e02db15a2382: - resolution: {tarball: https://codeload.github.com/web3-storage/one-webcrypto/tar.gz/5148cd14d5489a8ac4cd38223870e02db15a2382} - version: 1.0.3 - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -2424,17 +2041,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} - p-defer@3.0.0: - resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} - engines: {node: '>=8'} - p-defer@4.0.0: resolution: {integrity: sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==} engines: {node: '>=12'} - p-fifo@1.0.0: - resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2451,14 +2061,6 @@ packages: resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==} engines: {node: '>=18'} - p-retry@5.1.2: - resolution: {integrity: sha512-couX95waDu98NfNZV+i/iLt+fdVxmI7CbrrdC2uDWfPdUAApyxT4wmDlyOtR5KtTDmkDO0zDScDjDou9YHhd9g==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-retry@6.2.0: - resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==} - engines: {node: '>=16.17'} - p-timeout@6.1.2: resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} engines: {node: '>=14.16'} @@ -2481,13 +2083,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - partykit@0.0.107: - resolution: {integrity: sha512-MRSXRRuJXFC3RlBqVHpR7vYj3cDHNjJzrwjOKG3eidg4sADTmlaTNsz/8iKAPVY1WOhADtx/XMYNi4JbK/bahA==} - hasBin: true - - partysocket@1.0.1: - resolution: {integrity: sha512-sSnLf9X0Oaxw0wXp0liKho0QQqStDJB5I4ViaqmtI4nHm6cpb2kUealErPrcQpYUF6zgTHzLQhIO++2tcJc59A==} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2569,9 +2164,6 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -2658,9 +2250,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-native-fetch-api@3.0.0: - resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} - react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -2690,10 +2279,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -2715,10 +2300,6 @@ packages: resq@1.11.0: resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2739,10 +2320,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - safaridriver@0.1.2: resolution: {integrity: sha512-4R309+gWflJktzPXBQCobbWEHlzC4aK3a+Ov3tz2Ib2aBxiwd11phkdIBH1l0EO22x24CJMUQkpKFumRriCSRg==} @@ -2847,19 +2424,9 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - - stream-to-it@0.2.4: - resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} - streamx@2.18.0: resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==} @@ -2904,9 +2471,6 @@ packages: strip-literal@2.1.0: resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} - stubborn-fs@1.2.5: - resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} - sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -2920,13 +2484,6 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - sync-multihash-sha2@1.0.0: - resolution: {integrity: sha512-A5gVpmtKF0ov+/XID0M0QRJqF2QxAsj3x/LlDC8yivzgoYCoWkV+XaZPfVu7Vj1T/hYzYS1tfjwboSbXjqocug==} - - system-architecture@0.1.0: - resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} - engines: {node: '>=18'} - tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} @@ -2959,9 +2516,6 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} - tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} @@ -3056,13 +2610,6 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.16.0: - resolution: {integrity: sha512-z7Rf5PXxIhbI6eJBTwdqe5bO02nUUmctq4WqviFSstBAWV0YNtEQRhEnZw73WJ8sZOqgFG6Jdl8gYZu7NBJZnA==} - engines: {node: '>=16'} - - type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - typescript-eslint@7.13.1: resolution: {integrity: sha512-pvLEuRs8iS9s3Cnp/Wt//hpK8nKc8hVa3cLljHqzaJJQYP8oys8GUyIFqtlev+2lT/fqMPcyQko+HJ6iYK3nFA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -3096,10 +2643,6 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici@5.28.2: - resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==} - engines: {node: '>=14.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -3229,9 +2772,6 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - when-exit@2.1.2: - resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -3247,11 +2787,6 @@ packages: engines: {node: '>=8'} hasBin: true - workerd@1.20240610.1: - resolution: {integrity: sha512-Rtut5GrsODQMh6YU43b9WZ980Wd05Ov1/ds88pT/SoetmXFBvkBzdRfiHiATv+azmGX8KveE0i/Eqzk/yI01ug==} - engines: {node: '>=16'} - hasBin: true - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -3321,19 +2856,10 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} - yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - - youch@3.3.3: - resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} - zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} @@ -3358,27 +2884,6 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@cloudflare/workerd-darwin-64@1.20240610.1': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20240610.1': - optional: true - - '@cloudflare/workerd-linux-64@1.20240610.1': - optional: true - - '@cloudflare/workerd-linux-arm64@1.20240610.1': - optional: true - - '@cloudflare/workerd-windows-64@1.20240610.1': - optional: true - - '@cloudflare/workers-types@4.20240614.0': {} - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - '@esbuild/aix-ppc64@0.21.5': optional: true @@ -3553,8 +3058,6 @@ snapshots: '@eslint/object-schema@2.1.4': {} - '@fastify/busboy@2.1.0': {} - '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.0': {} @@ -3580,22 +3083,6 @@ snapshots: dependencies: multiformats: 13.1.1 - '@ipld/dag-ucan@3.4.0': - dependencies: - '@ipld/dag-cbor': 9.2.0 - '@ipld/dag-json': 10.2.1 - multiformats: 11.0.2 - - '@ipld/unixfs@2.2.0': - dependencies: - '@ipld/dag-pb': 4.0.8 - '@multiformats/murmur3': 2.1.8 - '@perma/map': 1.0.3 - actor: 2.3.1 - multiformats: 11.0.2 - protobufjs: 7.2.5 - rabin-rs: 2.1.0 - '@ipld/unixfs@3.0.0': dependencies: '@ipld/dag-pb': 4.0.8 @@ -3636,28 +3123,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@multiformats/murmur3@2.1.8': dependencies: multiformats: 13.1.1 murmurhash3js-revisited: 3.0.0 - '@netlify/blobs@7.3.0': {} - - '@noble/curves@1.3.0': - dependencies: - '@noble/hashes': 1.3.3 - - '@noble/ed25519@1.7.3': {} - - '@noble/hashes@1.3.3': {} - - '@noble/hashes@1.4.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3823,13 +3293,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.9.4': optional: true - '@scure/base@1.1.6': {} - - '@scure/bip39@1.3.0': - dependencies: - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 - '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@5.6.0': @@ -3887,8 +3350,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/minimatch@3.0.5': {} - '@types/node@20.14.8': dependencies: undici-types: 5.26.5 @@ -3904,10 +3365,6 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 - '@types/retry@0.12.1': {} - - '@types/retry@0.12.2': {} - '@types/which@2.0.2': optional: true @@ -4024,54 +3481,6 @@ snapshots: '@typescript-eslint/types': 7.15.0 eslint-visitor-keys: 3.4.3 - '@ucanto/client@9.0.1': - dependencies: - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - - '@ucanto/core@10.0.1': - dependencies: - '@ipld/car': 5.3.1 - '@ipld/dag-cbor': 9.2.0 - '@ipld/dag-ucan': 3.4.0 - '@ucanto/interface': 10.0.1 - multiformats: 11.0.2 - - '@ucanto/interface@10.0.1': - dependencies: - '@ipld/dag-ucan': 3.4.0 - multiformats: 11.0.2 - - '@ucanto/principal@9.0.1': - dependencies: - '@ipld/dag-ucan': 3.4.0 - '@noble/curves': 1.3.0 - '@noble/ed25519': 1.7.3 - '@noble/hashes': 1.4.0 - '@ucanto/interface': 10.0.1 - multiformats: 11.0.2 - one-webcrypto: 1.0.3 - - '@ucanto/server@10.0.0': - dependencies: - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/principal': 9.0.1 - '@ucanto/validator': 9.0.2 - - '@ucanto/transport@9.1.1': - dependencies: - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - - '@ucanto/validator@9.0.2': - dependencies: - '@ipld/car': 5.3.1 - '@ipld/dag-cbor': 9.2.0 - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - multiformats: 11.0.2 - '@vitest/browser@1.6.0(vitest@1.6.0)(webdriverio@8.39.0(encoding@0.1.13)(typescript@5.5.2))': dependencies: '@vitest/utils': 1.6.0 @@ -4163,148 +3572,11 @@ snapshots: - supports-color optional: true - '@web3-storage/access@20.0.0': - dependencies: - '@ipld/car': 5.3.1 - '@ipld/dag-ucan': 3.4.0 - '@scure/bip39': 1.3.0 - '@ucanto/client': 9.0.1 - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/principal': 9.0.1 - '@ucanto/transport': 9.1.1 - '@ucanto/validator': 9.0.2 - '@web3-storage/capabilities': 17.2.0 - '@web3-storage/did-mailto': 2.1.0 - bigint-mod-arith: 3.3.1 - conf: 11.0.2 - multiformats: 12.1.3 - one-webcrypto: https://codeload.github.com/web3-storage/one-webcrypto/tar.gz/5148cd14d5489a8ac4cd38223870e02db15a2382 - p-defer: 4.0.0 - type-fest: 4.16.0 - uint8arrays: 4.0.10 - - '@web3-storage/blob-index@1.0.3': - dependencies: - '@ipld/dag-cbor': 9.2.0 - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@web3-storage/capabilities': 17.2.0 - carstream: 2.2.0 - multiformats: 13.1.1 - uint8arrays: 5.0.3 - - '@web3-storage/capabilities@16.0.0': - dependencies: - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/principal': 9.0.1 - '@ucanto/transport': 9.1.1 - '@ucanto/validator': 9.0.2 - '@web3-storage/data-segment': 3.2.0 - uint8arrays: 5.0.3 - - '@web3-storage/capabilities@17.2.0': - dependencies: - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/principal': 9.0.1 - '@ucanto/transport': 9.1.1 - '@ucanto/validator': 9.0.2 - '@web3-storage/data-segment': 3.2.0 - uint8arrays: 5.0.3 - - '@web3-storage/clock@0.4.1': - dependencies: - '@ipld/dag-cbor': 9.2.0 - '@ipld/dag-ucan': 3.4.0 - '@ucanto/client': 9.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/principal': 9.0.1 - '@ucanto/server': 10.0.0 - '@ucanto/transport': 9.1.1 - '@ucanto/validator': 9.0.2 - '@web3-storage/pail': 0.5.0 - hashlru: 2.3.0 - multiformats: 13.1.1 - p-retry: 6.2.0 - - '@web3-storage/data-segment@3.2.0': - dependencies: - '@ipld/dag-cbor': 9.2.0 - multiformats: 11.0.2 - sync-multihash-sha2: 1.0.0 - - '@web3-storage/data-segment@5.1.0': - dependencies: - '@ipld/dag-cbor': 9.2.0 - multiformats: 11.0.2 - sync-multihash-sha2: 1.0.0 - - '@web3-storage/did-mailto@2.1.0': {} - - '@web3-storage/filecoin-client@3.3.3': - dependencies: - '@ipld/dag-ucan': 3.4.0 - '@ucanto/client': 9.0.1 - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/transport': 9.1.1 - '@web3-storage/capabilities': 16.0.0 - - '@web3-storage/pail@0.5.0': - dependencies: - '@ipld/car': 5.3.1 - '@ipld/dag-cbor': 9.2.0 - archy: 1.0.0 - cborg: 4.1.3 - cli-color: 2.0.4 - multiformats: 12.1.3 - sade: 1.8.1 - '@web3-storage/pail@0.6.0': dependencies: '@ipld/dag-cbor': 9.2.0 multiformats: 13.1.1 - '@web3-storage/upload-client@16.1.1(encoding@0.1.13)': - dependencies: - '@ipld/car': 5.3.1 - '@ipld/dag-cbor': 9.2.0 - '@ipld/dag-ucan': 3.4.0 - '@ipld/unixfs': 2.2.0 - '@ucanto/client': 9.0.1 - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/transport': 9.1.1 - '@web3-storage/blob-index': 1.0.3 - '@web3-storage/capabilities': 17.2.0 - '@web3-storage/data-segment': 5.1.0 - '@web3-storage/filecoin-client': 3.3.3 - ipfs-utils: 9.0.14(encoding@0.1.13) - multiformats: 12.1.3 - p-retry: 5.1.2 - varint: 6.0.0 - transitivePeerDependencies: - - encoding - - '@web3-storage/w3up-client@15.0.0(encoding@0.1.13)': - dependencies: - '@ipld/dag-ucan': 3.4.0 - '@ucanto/client': 9.0.1 - '@ucanto/core': 10.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/principal': 9.0.1 - '@ucanto/transport': 9.1.1 - '@web3-storage/access': 20.0.0 - '@web3-storage/blob-index': 1.0.3 - '@web3-storage/capabilities': 17.2.0 - '@web3-storage/did-mailto': 2.1.0 - '@web3-storage/filecoin-client': 3.3.3 - '@web3-storage/upload-client': 16.1.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - '@zip.js/zip.js@2.7.45': optional: true @@ -4319,8 +3591,6 @@ snapshots: acorn-walk@8.3.2: {} - acorn@8.11.3: {} - acorn@8.12.0: {} actor@2.3.1: {} @@ -4332,10 +3602,6 @@ snapshots: - supports-color optional: true - ajv-formats@2.1.1(ajv@8.12.0): - optionalDependencies: - ajv: 8.12.0 - ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -4343,13 +3609,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -4368,8 +3627,6 @@ snapshots: any-promise@1.3.0: {} - any-signal@3.0.1: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -4397,8 +3654,6 @@ snapshots: zip-stream: 6.0.1 optional: true - archy@1.0.0: {} - argparse@2.0.1: {} aria-query@5.3.0: @@ -4407,10 +3662,6 @@ snapshots: array-union@2.1.0: {} - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - assertion-error@1.1.0: {} ast-types@0.13.4: @@ -4421,11 +3672,6 @@ snapshots: async@3.2.5: optional: true - atomically@2.0.2: - dependencies: - stubborn-fs: 1.2.5 - when-exit: 2.1.2 - b4a@1.6.6: optional: true @@ -4466,8 +3712,6 @@ snapshots: big-integer@1.6.52: {} - bigint-mod-arith@3.3.1: {} - binary-extensions@2.2.0: {} bindings@1.5.0: @@ -4493,8 +3737,6 @@ snapshots: dependencies: fill-range: 7.0.1 - browser-readablestream-to-it@1.0.3: {} - buffer-crc32@0.2.13: optional: true @@ -4510,6 +3752,7 @@ snapshots: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + optional: true bundle-require@4.0.2(esbuild@0.21.5): dependencies: @@ -4534,19 +3777,6 @@ snapshots: callsites@3.1.0: {} - capnp-ts@0.7.0: - dependencies: - debug: 4.3.4 - tslib: 2.6.2 - transitivePeerDependencies: - - supports-color - - carstream@2.2.0: - dependencies: - '@ipld/dag-cbor': 9.2.0 - multiformats: 13.1.1 - uint8arraylist: 2.4.8 - cborg@4.1.3: {} chai@4.4.1: @@ -4599,20 +3829,6 @@ snapshots: mitt: 3.0.0 optional: true - cli-color@2.0.4: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 - - clipboardy@4.0.0: - dependencies: - execa: 8.0.1 - is-wsl: 3.1.0 - is64bit: 2.0.0 - cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -4648,21 +3864,8 @@ snapshots: concat-map@0.0.1: {} - conf@11.0.2: - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - atomically: 2.0.2 - debounce-fn: 5.1.2 - dot-prop: 7.2.0 - env-paths: 3.0.0 - json-schema-typed: 8.0.1 - semver: 7.6.2 - confbox@0.1.7: {} - cookie@0.5.0: {} - core-util-is@1.0.3: optional: true @@ -4695,23 +3898,12 @@ snapshots: csstype@3.1.3: {} - d@1.0.2: - dependencies: - es5-ext: 0.10.64 - type: 2.7.2 - - data-uri-to-buffer@2.0.2: {} - data-uri-to-buffer@4.0.1: optional: true data-uri-to-buffer@6.0.2: optional: true - debounce-fn@5.1.2: - dependencies: - mimic-fn: 4.0.0 - debug@4.3.4: dependencies: ms: 2.1.2 @@ -4762,10 +3954,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dot-prop@7.2.0: - dependencies: - type-fest: 2.19.0 - eastasianwidth@0.2.0: {} edge-paths@3.0.5: @@ -4784,10 +3972,6 @@ snapshots: which: 4.0.0 optional: true - electron-fetch@1.9.1: - dependencies: - encoding: 0.1.13 - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -4795,6 +3979,7 @@ snapshots: encoding@0.1.13: dependencies: iconv-lite: 0.6.3 + optional: true end-of-stream@1.4.4: dependencies: @@ -4803,35 +3988,8 @@ snapshots: entities@4.5.0: optional: true - env-paths@3.0.0: {} - err-code@3.0.1: {} - es5-ext@0.10.64: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - - es6-symbol@3.1.4: - dependencies: - d: 1.0.2 - ext: 1.7.0 - - es6-weak-map@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esbuild-plugin-resolve@2.0.0: {} esbuild@0.21.5: @@ -4951,13 +4109,6 @@ snapshots: transitivePeerDependencies: - supports-color - esniff@2.0.1: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.2 - espree@10.1.0: dependencies: acorn: 8.12.0 @@ -4983,16 +4134,9 @@ snapshots: esutils@2.0.3: {} - event-emitter@0.3.5: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-target-shim@5.0.1: optional: true - event-target-shim@6.0.2: {} - eventemitter3@5.0.1: {} events@3.3.0: @@ -5022,14 +4166,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - exit-hook@2.2.1: {} - expand-template@2.0.3: {} - ext@1.7.0: - dependencies: - type: 2.7.2 - extract-zip@2.0.1: dependencies: debug: 4.3.4 @@ -5046,7 +4184,8 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-fifo@1.3.2: {} + fast-fifo@1.3.2: + optional: true fast-glob@3.3.2: dependencies: @@ -5141,16 +4280,9 @@ snapshots: get-func-name@2.0.2: {} - get-iterator@1.0.2: {} - get-port@7.1.0: optional: true - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - get-stream@5.2.0: dependencies: pump: 3.0.0 @@ -5184,8 +4316,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} - glob@10.4.2: dependencies: foreground-child: 3.1.1 @@ -5247,8 +4377,6 @@ snapshots: has-flag@4.0.0: {} - hashlru@2.3.0: {} - http-cache-semantics@4.1.1: optional: true @@ -5281,6 +4409,7 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true idb@8.0.0: {} @@ -5346,35 +4475,10 @@ snapshots: protons-runtime: 5.2.2 uint8arraylist: 2.4.8 - ipfs-utils@9.0.14(encoding@0.1.13): - dependencies: - any-signal: 3.0.1 - browser-readablestream-to-it: 1.0.3 - buffer: 6.0.3 - electron-fetch: 1.9.1 - err-code: 3.0.1 - is-electron: 2.2.2 - iso-url: 1.2.1 - it-all: 1.0.6 - it-glob: 1.0.2 - it-to-stream: 1.0.0 - merge-options: 3.0.4 - nanoid: 3.3.7 - native-fetch: 3.0.0(node-fetch@2.7.0(encoding@0.1.13)) - node-fetch: 2.7.0(encoding@0.1.13) - react-native-fetch-api: 3.0.0 - stream-to-it: 0.2.4 - transitivePeerDependencies: - - encoding - is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - is-docker@3.0.0: {} - - is-electron@2.2.2: {} - is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -5383,35 +4487,17 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-network-error@1.1.0: {} - is-number@7.0.0: {} is-path-inside@3.0.3: {} - is-plain-obj@2.1.0: {} - is-plain-obj@4.1.0: optional: true - is-promise@2.2.2: {} - is-stream@2.0.1: {} is-stream@3.0.0: {} - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - is64bit@2.0.0: - dependencies: - system-architecture: 0.1.0 - isarray@1.0.0: optional: true @@ -5420,19 +4506,10 @@ snapshots: isexe@3.1.1: optional: true - iso-url@1.2.1: {} - - it-all@1.0.6: {} - it-filter@3.0.4: dependencies: it-peekable: 3.0.3 - it-glob@1.0.2: - dependencies: - '@types/minimatch': 3.0.5 - minimatch: 3.1.2 - it-last@3.0.4: {} it-map@3.0.5: @@ -5461,15 +4538,6 @@ snapshots: it-stream-types@2.0.1: {} - it-to-stream@1.0.0: - dependencies: - buffer: 6.0.3 - fast-fifo: 1.3.2 - get-iterator: 1.0.2 - p-defer: 3.0.0 - p-fifo: 1.0.0 - readable-stream: 3.6.2 - jackspeak@3.4.0: dependencies: '@isaacs/cliui': 8.0.2 @@ -5495,10 +4563,6 @@ snapshots: json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - - json-schema-typed@8.0.1: {} - json-stable-stringify-without-jsonify@1.0.1: {} jsonfile@6.1.0: @@ -5601,31 +4665,12 @@ snapshots: lru-cache@7.18.3: optional: true - lru-queue@0.1.0: - dependencies: - es5-ext: 0.10.64 - lz-string@1.5.0: {} magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - memoizee@0.4.15: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.7 - - merge-options@3.0.4: - dependencies: - is-plain-obj: 2.1.0 - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -5644,25 +4689,6 @@ snapshots: mimic-response@4.0.0: optional: true - miniflare@3.20240610.0: - dependencies: - '@cspotcode/source-map-support': 0.8.1 - acorn: 8.11.3 - acorn-walk: 8.3.2 - capnp-ts: 0.7.0 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.28.2 - workerd: 1.20240610.1 - ws: 8.16.0 - youch: 3.3.3 - zod: 3.22.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5692,22 +4718,16 @@ snapshots: pkg-types: 1.1.1 ufo: 1.5.3 - mri@1.2.0: {} - mrmime@2.0.0: {} ms@2.1.2: {} - multiformats@11.0.2: {} - multiformats@12.1.3: {} multiformats@13.1.1: {} murmurhash3js-revisited@3.0.0: {} - mustache@4.2.0: {} - mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -5718,17 +4738,11 @@ snapshots: napi-build-utils@1.0.2: {} - native-fetch@3.0.0(node-fetch@2.7.0(encoding@0.1.13)): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - natural-compare@1.4.0: {} netmask@2.0.2: optional: true - next-tick@1.1.0: {} - node-abi@3.65.0: dependencies: semver: 7.5.4 @@ -5772,10 +4786,6 @@ snapshots: dependencies: wrappy: 1.0.2 - one-webcrypto@1.0.3: {} - - one-webcrypto@https://codeload.github.com/web3-storage/one-webcrypto/tar.gz/5148cd14d5489a8ac4cd38223870e02db15a2382: {} - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -5796,15 +4806,8 @@ snapshots: p-cancelable@3.0.0: optional: true - p-defer@3.0.0: {} - p-defer@4.0.0: {} - p-fifo@1.0.0: - dependencies: - fast-fifo: 1.3.2 - p-defer: 3.0.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -5822,17 +4825,6 @@ snapshots: eventemitter3: 5.0.1 p-timeout: 6.1.2 - p-retry@5.1.2: - dependencies: - '@types/retry': 0.12.1 - retry: 0.13.1 - - p-retry@6.2.0: - dependencies: - '@types/retry': 0.12.2 - is-network-error: 1.1.0 - retry: 0.13.1 - p-timeout@6.1.2: {} pac-proxy-agent@7.0.1: @@ -5864,24 +4856,6 @@ snapshots: dependencies: callsites: 3.1.0 - partykit@0.0.107: - dependencies: - '@cloudflare/workers-types': 4.20240614.0 - clipboardy: 4.0.0 - esbuild: 0.21.5 - miniflare: 3.20240610.0 - yoga-wasm-web: 0.3.3 - optionalDependencies: - fsevents: 2.3.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - partysocket@1.0.1: - dependencies: - event-target-shim: 6.0.2 - path-exists@4.0.0: {} path-key@3.1.1: {} @@ -5958,8 +4932,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - printable-characters@1.0.42: {} - process-nextick-args@2.0.1: optional: true @@ -6085,10 +5057,6 @@ snapshots: react-is@18.3.1: {} - react-native-fetch-api@3.0.0: - dependencies: - p-defer: 3.0.0 - react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -6133,8 +5101,6 @@ snapshots: require-directory@2.1.1: optional: true - require-from-string@2.0.2: {} - resolve-alpn@1.2.1: optional: true @@ -6154,8 +5120,6 @@ snapshots: fast-deep-equal: 2.0.1 optional: true - retry@0.13.1: {} - reusify@1.0.4: {} rgb2hex@0.2.5: @@ -6206,10 +5170,6 @@ snapshots: dependencies: queue-microtask: 1.2.3 - sade@1.8.1: - dependencies: - mri: 1.2.0 - safaridriver@0.1.2: optional: true @@ -6218,7 +5178,8 @@ snapshots: safe-buffer@5.2.1: {} - safer-buffer@2.1.2: {} + safer-buffer@2.1.2: + optional: true scheduler@0.23.2: dependencies: @@ -6286,7 +5247,8 @@ snapshots: source-map-js@1.2.0: {} - source-map@0.6.1: {} + source-map@0.6.1: + optional: true source-map@0.8.0-beta.0: dependencies: @@ -6305,19 +5267,8 @@ snapshots: stackback@0.0.2: {} - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - std-env@3.7.0: {} - stoppable@1.1.0: {} - - stream-to-it@0.2.4: - dependencies: - get-iterator: 1.0.2 - streamx@2.18.0: dependencies: fast-fifo: 1.3.2 @@ -6368,8 +5319,6 @@ snapshots: dependencies: js-tokens: 9.0.0 - stubborn-fs@1.2.5: {} - sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.3 @@ -6388,12 +5337,6 @@ snapshots: dependencies: has-flag: 4.0.0 - sync-multihash-sha2@1.0.0: - dependencies: - '@noble/hashes': 1.4.0 - - system-architecture@0.1.0: {} - tar-fs@2.1.1: dependencies: chownr: 1.1.4 @@ -6450,11 +5393,6 @@ snapshots: through@2.3.8: optional: true - timers-ext@0.1.7: - dependencies: - es5-ext: 0.10.64 - next-tick: 1.1.0 - tinybench@2.8.0: {} tinypool@0.8.4: {} @@ -6485,7 +5423,8 @@ snapshots: optionalDependencies: typescript: 5.5.2 - tslib@2.6.2: {} + tslib@2.6.2: + optional: true tsup@8.1.0(postcss@8.4.38)(typescript@5.5.2): dependencies: @@ -6530,11 +5469,8 @@ snapshots: type-fest@2.13.0: optional: true - type-fest@2.19.0: {} - - type-fest@4.16.0: {} - - type@2.7.2: {} + type-fest@2.19.0: + optional: true typescript-eslint@7.13.1(eslint@9.6.0)(typescript@5.5.2): dependencies: @@ -6571,10 +5507,6 @@ snapshots: undici-types@5.26.5: {} - undici@5.28.2: - dependencies: - '@fastify/busboy': 2.1.0 - universalify@2.0.1: optional: true @@ -6750,8 +5682,6 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 - when-exit@2.1.2: {} - which@2.0.2: dependencies: isexe: 2.0.0 @@ -6766,14 +5696,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - workerd@1.20240610.1: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20240610.1 - '@cloudflare/workerd-darwin-arm64': 1.20240610.1 - '@cloudflare/workerd-linux-64': 1.20240610.1 - '@cloudflare/workerd-linux-arm64': 1.20240610.1 - '@cloudflare/workerd-windows-64': 1.20240610.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -6791,7 +5713,8 @@ snapshots: ws@8.13.0: optional: true - ws@8.16.0: {} + ws@8.16.0: + optional: true y18n@5.0.8: optional: true @@ -6835,19 +5758,9 @@ snapshots: yocto-queue@1.0.0: {} - yoga-wasm-web@0.3.3: {} - - youch@3.3.3: - dependencies: - cookie: 0.5.0 - mustache: 4.2.0 - stacktracey: 2.1.8 - zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2 compress-commons: 6.0.2 readable-stream: 4.5.2 optional: true - - zod@3.22.4: {} diff --git a/src/connectors/connect-aws/README.md b/src/connectors/connect-aws/README.md deleted file mode 100644 index 9a9d381e7..000000000 --- a/src/connectors/connect-aws/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# `@fireproof/aws` - -[Fireproof](https://use-fireproof.com) is an embedded JavaScript document database that runs in the browser (or anywhere with JavaScript) and **[connects to any cloud](https://www.npmjs.com/package/@fireproof/connect)**. - -This module, `@fireproof/aws`, allows you to connect your Fireproof database to AWS S3 and DynamoDB via pre defined Lambda functions, enabling you to sync your data across multiple users in real-time. - -## Get started - -We assume you already have an app that uses Fireproof in the browser, and you want to setup collaboration among multiple users via the cloud. To write your first Fireproof app, see the [Fireproof quickstart](https://use-fireproof.com/docs/react-tutorial), otherwise read on. - -### 1. Install - -In your existing Fireproof app install the connector: - -```sh -npm install @fireproof/aws -``` - -### 2. Connect - -You're all done on the server, and ready to develop locally and then deploy with no further changes. Now you just need to connect to the AWS in your client code. Fireproof has an already deployed SAM template and to use the provisioned resources without the websocket based live syncing (backwards compatibility with older fireproof versions) as well as with websocket connections you can simply use the s3Free and awsFree functions respectively. However, if one wants to deploy their own resources they can do so by deploying our sam template and adding the neccassary urls to connect's aws function: - -```js -// you already have this in your app -import { useFireproof } from "use-fireproof"; -// add this line -import { connect } from "@fireproof/aws"; -``` - -Now later in your app connect to the party (be sure to do this a component that runs on every render, like your root component or layout): - -```js -const { database } = useFireproof("my-app-database-name"); -const connection = connect.awsFree(database); -``` - -OR - -```js -const { database } = useFireproof("my-app-database-name"); -const connection = connect.s3Free(database); -``` - -OR - -```js -const { database } = useFireproof("my-app-database-name"); -const connection = connect.aws(database, { - uploadUrl, - downloadUrl, - websocketUrl, -}); -``` - -All the functions are idempotent and designed to be safe to call on every render. - -### 3. Collaborate - -Now you can use Fireproof as you normally would, and it will sync in realtime with other users. Any existing apps you have that use the [live query](https://use-fireproof.com/docs/react-hooks/use-live-query) or [subscription](https://use-fireproof.com/docs/database-api/database#subscribe) APIs will automatically render multi-user updates. diff --git a/src/connectors/connect-aws/connect-s3.ts b/src/connectors/connect-aws/connect-s3.ts deleted file mode 100644 index 14b5a966e..000000000 --- a/src/connectors/connect-aws/connect-s3.ts +++ /dev/null @@ -1,135 +0,0 @@ -import fetch from "cross-fetch"; -import { Base64 } from "js-base64"; -import { DownloadDataFnParams, DownloadMetaFnParams, UploadDataFnParams, UploadMetaFnParams } from "../../block-store/types.js"; -import { throwFalsy } from "../../types.js"; -import { CID } from "multiformats"; -import { ConnectionBase } from "../../block-store/connection-base.js"; - -interface MetaResultItem { - readonly cid: string; - readonly data: string; -} -export class ConnectS3 extends ConnectionBase { - readonly uploadUrl: URL; - readonly downloadUrl: URL; - readonly ws?: WebSocket; - messagePromise: Promise; - messageResolve?: (value: Uint8Array[] | PromiseLike) => void; - - constructor(upload: string, download: string, websocket?: string) { - super(); - this.uploadUrl = new URL(upload); - this.downloadUrl = new URL(download); - if (websocket && websocket.length != 0) { - this.ws = new WebSocket(websocket); - } else { - this.ws = undefined; - } - this.messagePromise = new Promise((resolve) => { - this.messageResolve = resolve; - }); - } - - async dataUpload(bytes: Uint8Array, params: UploadDataFnParams) { - // console.log('s3 dataUpload', params.car.toString()) - const fetchUploadUrl = new URL( - `?${new URLSearchParams({ cache: Math.random().toString(), ...params }).toString()}`, - this.uploadUrl, - ); - const response = await fetch(fetchUploadUrl); - if (!response.ok) { - // console.log('failed to get upload url for data', params, response) - throw new Error("failed to get upload url for data " + new Date().toISOString() + " " + response.statusText); - } - const { uploadURL } = (await response.json()) as { uploadURL: string }; - const done = await fetch(uploadURL, { method: "PUT", body: bytes }); - // console.log('s3 dataUpload done', params.car.toString(), done) - if (!done.ok) throw new Error("failed to upload data " + done.statusText); - } - - async metaUpload(bytes: Uint8Array, params: UploadMetaFnParams) { - const event = await this.createEventBlock(bytes); - const base64String = Base64.fromUint8Array(bytes); - const crdtEntry = { - cid: event.cid.toString(), - data: base64String, - parents: this.parents.map((p) => p.toString()), - }; - const fetchUploadUrl = new URL(`?${new URLSearchParams({ type: "meta", ...params }).toString()}`, this.uploadUrl); - const done = await fetch(fetchUploadUrl, { - method: "PUT", - body: JSON.stringify(crdtEntry), - }); - const result = await done.json(); - if (result.status != 201) { - throw new Error("failed to upload data " + JSON.parse(result.body).message); - } - this.parents = [event.cid]; - return undefined; - } - - async dataDownload(params: DownloadDataFnParams) { - const { type, name, car } = params; - const fetchFromUrl = new URL(`${type}/${name}/${car}.car`, this.downloadUrl); - const response = await fetch(fetchFromUrl); - if (!response.ok) { - return undefined; // throw new Error('failed to download data ' + response.statusText) - } - const bytes = new Uint8Array(await response.arrayBuffer()); - return bytes; - } - - async onConnect() { - if (!this.loader || !this.taskManager) { - throw new Error("loader and taskManager must be set"); - } - - if (this.ws == undefined) { - return; - } - this.ws.addEventListener("message", async (event: { data: string }) => { - const data = JSON.parse(event.data); - const bytes = Base64.toUint8Array(data.items[0].data); - const afn = async () => { - const uint8ArrayBuffer = bytes as Uint8Array; - const eventBlock = await this.createEventBlock(uint8ArrayBuffer); - await throwFalsy(this.taskManager).handleEvent(eventBlock); - this.messageResolve?.([eventBlock.value.data.dbMeta as Uint8Array]); - // add the cid to our parents so we delete it when we send the update - this.parents.push(eventBlock.cid); - setTimeout(() => { - this.messagePromise = new Promise((resolve) => { - this.messageResolve = resolve; - }); - }, 0); - }; - - void afn(); - }); - } - - /** - * - * @param params - The parameters for the download, including the name and branch. - * @returns - Returns the metadata bytes as a Uint8Array or null if the fetch is unsuccessful. - */ - - async metaDownload(params: DownloadMetaFnParams) { - const fetchUploadUrl = new URL(`?${new URLSearchParams({ type: "meta", ...params }).toString()}`, this.uploadUrl); - const data = await fetch(fetchUploadUrl); - const response = await data.json(); - if (response.status != 200) throw new Error("Failed to download data"); - const items: MetaResultItem[] = JSON.parse(response.body).items; - const events = await Promise.all( - items.map(async (element: { cid: string; data: string }) => { - const base64String = element.data; - const bytes = Base64.toUint8Array(base64String); - return { cid: element.cid, bytes }; - }), - ); - const cids = events.map((e) => e.cid); - const uniqueParentsMap = new Map([...this.parents, ...cids.map((i) => CID.parse(i))].map((p) => [p.toString(), p])); - this.parents = Array.from(uniqueParentsMap.values()); - return events.map((e) => e.bytes); - } -} diff --git a/src/connectors/connect-aws/index.ts b/src/connectors/connect-aws/index.ts deleted file mode 100644 index 85c5b49f3..000000000 --- a/src/connectors/connect-aws/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { ConnectS3 } from "./connect-s3.js"; -import { Connectable } from "../../block-store/index.js"; -import type { AnyLink, UploadDataFnParams } from "../../block-store/index.js"; -import { DownloadDataFnParams, DownloadMetaFnParams, UploadMetaFnParams } from "../../block-store/types.js"; -export type { AnyLink }; - -export const connect = { - s3free: ({ blockstore }: Connectable) => { - const upload = "https://udvtu5wy39.execute-api.us-east-2.amazonaws.com/uploads"; - const download = "https://crdt-s3uploadbucket-dcjyurxwxmba.s3.us-east-2.amazonaws.com"; - const websocket = ""; - const connection = new ConnectS3(upload, download, websocket); - connection.connect(blockstore); - return connection; - }, - awsFree: ({ blockstore, name }: Connectable) => { - const upload = "https://udvtu5wy39.execute-api.us-east-2.amazonaws.com/uploads"; - const download = "https://crdt-s3uploadbucket-dcjyurxwxmba.s3.us-east-2.amazonaws.com"; - const websocket = `wss://v7eax67rm6.execute-api.us-east-2.amazonaws.com/Prod?database=${name}`; - const connection = new ConnectS3(upload, download, websocket); - connection.connect(blockstore); - return connection; - }, - aws: ( - { blockstore, name }: Connectable, - { upload, download, websocket }: { upload: string; download: string; websocket: string }, - ) => { - const updatedwebsocket = `${websocket}?database=${name}`; - const connection = new ConnectS3(upload, download, updatedwebsocket); - connection.connect(blockstore); - return connection; - }, -}; - -export function validateDataParams(params: DownloadDataFnParams | UploadDataFnParams) { - const { type, name, car } = params; - if (!name) throw new Error("name is required"); - if (!car) { - throw new Error("car is required"); - } - if (type !== "file" && type !== "data") { - throw new Error("type must be file or data"); - } -} - -export function validateMetaParams(params: DownloadMetaFnParams | UploadMetaFnParams) { - const { name, branch } = params; - if (!name) throw new Error("name is required"); - if (!branch) { - throw new Error("branch is required"); - } -} - -export { ConnectS3 }; diff --git a/src/connectors/connect-ipfs/index.ts b/src/connectors/connect-ipfs/index.ts deleted file mode 100644 index 7b6c2a0d0..000000000 --- a/src/connectors/connect-ipfs/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Connectable } from "../../block-store/index.js"; -import { ConnectUCAN, ConnectUCANParams } from "../connect-ucan/index.js"; - -const ipfsCxs = new Map(); - -export const connect = { - ucan: ({ name, blockstore }: Connectable, schemaName?: string) => { - if (!name) throw new Error("database name is required"); - if (ipfsCxs.has(name)) { - return ipfsCxs.get(name); - } - if (!schemaName && location) { - schemaName = location.origin; - } - const connection = new ConnectUCAN({ name, schema: schemaName } as ConnectUCANParams); - connection.connect(blockstore); - ipfsCxs.set(name, connection); - return connection; - }, -}; diff --git a/src/connectors/connect-netlify/README.md b/src/connectors/connect-netlify/README.md deleted file mode 100644 index 912af92d7..000000000 --- a/src/connectors/connect-netlify/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# `@fireproof/netlify` - -[Fireproof](https://use-fireproof.com) is an embedded JavaScript document database that runs in the browser (or anywhere with JavaScript) and **[connects to any cloud](https://www.npmjs.com/package/@fireproof/connect)**. - -This module, `@fireproof/netlify`, allows you to connect your Fireproof database to Netlify, enabling you to sync your data across multiple users in real-time. - -## Get started - -We assume you already have an app that uses Fireproof in the browser, and you want to setup collaboration among multiple users via the cloud. To write your first Fireproof app, see the [Fireproof quickstart](https://use-fireproof.com/docs/react-tutorial), otherwise read on. - -### 1. Install - -In your existing Fireproof app install the connector: - -```sh -npm install @fireproof/netlify -``` - -### 2. Connect - -You're all done on the server, and ready to develop locally and then deploy with no further changes. Now you just need to connect to the Netlify in your client code: - -```js -// you already have this in your app -import { useFireproof } from "use-fireproof"; -// add this line -import { connect } from "@fireproof/netlify"; -``` - -Now later in your app connect to the party (be sure to do this a component that runs on every render, like your root component or layout): - -```js -const { database } = useFireproof('my-app-database-name') -const connection = connect.netlify(database, process.env.NEXT_PUBLIC_NETLIFY_HOST!) -``` - -The `connect.netlify` function is idempotent and designed to be safe to call on every render. - -### 3. Collaborate - -Now you can use Fireproof as you normally would, and it will sync in realtime with other users. Any existing apps you have that use the [live query](https://use-fireproof.com/docs/react-hooks/use-live-query) or [subscription](https://use-fireproof.com/docs/database-api/database#subscribe) APIs will automatically render multi-user updates. diff --git a/src/connectors/connect-netlify/connect-netlify.ts b/src/connectors/connect-netlify/connect-netlify.ts deleted file mode 100644 index f064d4591..000000000 --- a/src/connectors/connect-netlify/connect-netlify.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Base64 } from "js-base64"; -import { DownloadDataFnParams, DownloadMetaFnParams, UploadDataFnParams, UploadMetaFnParams } from "../../block-store/types.js"; -import { Falsy } from "../../types.js"; -import { ConnectionBase } from "../../block-store/connection-base.js"; - -export class ConnectNetlify extends ConnectionBase { - readonly name: string; - - constructor(name: string) { - super(); - this.name = name; - } - - async dataUpload(bytes: Uint8Array, { car }: UploadDataFnParams) { - const fetchUploadUrl = new URL(`/fireproof?car=${car}`, document.location.origin); - const base64String = Base64.fromUint8Array(bytes); - const done = await fetch(fetchUploadUrl, { method: "PUT", body: base64String }); - if (!done.ok) { - throw new Error("failed to upload data " + done.statusText); - } - } - - async dataDownload({ car }: DownloadDataFnParams) { - const fetchDownloadUrl = new URL(`/fireproof?car=${car}`, document.location.origin); - const response = await fetch(fetchDownloadUrl); - if (!response.ok) throw new Error("failed to download data " + response.statusText); - const base64String = await response.text(); - const data = Base64.toUint8Array(base64String); - return data; - } - - async metaUpload(bytes: Uint8Array, { name }: UploadMetaFnParams): Promise { - const event = await this.createEventBlock(bytes); - const base64String = Base64.fromUint8Array(bytes); - const crdtEntry = { - cid: event.cid.toString(), - data: base64String, - parents: this.parents.map((p) => p.toString()), - }; - const fetchUploadUrl = new URL(`/fireproof?meta=${name}`, document.location.origin); - const done = await fetch(fetchUploadUrl, { method: "PUT", body: JSON.stringify(crdtEntry) }); - if (!done.ok) throw new Error("failed to upload meta " + done.statusText); - this.parents = [event.cid]; - return undefined; - } - - async metaDownload({ name }: DownloadMetaFnParams) { - const fetchDownloadUrl = new URL(`/fireproof?meta=${name}`, document.location.origin); - const response = await fetch(fetchDownloadUrl); - if (!response.ok) throw new Error("failed to download meta " + response.statusText); - const crdtEntries = await response.json(); - const events = await Promise.all( - crdtEntries.map(async (entry: { cid: string; data: string }) => { - const base64String = entry.data; - const bytes = Base64.toUint8Array(base64String); - // const event = await this.createEventBlock(bytes) - return { cid: entry.cid, bytes }; - }), - ); - const cids = events.map((e) => e.cid); - const uniqueParentsMap = new Map([...this.parents, ...cids].map((p) => [p.toString(), p])); - this.parents = Array.from(uniqueParentsMap.values()); - return events.map((e) => e.bytes); - } -} diff --git a/src/connectors/connect-netlify/index.ts b/src/connectors/connect-netlify/index.ts deleted file mode 100644 index 85749ffed..000000000 --- a/src/connectors/connect-netlify/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ConnectNetlify } from "./connect-netlify.js"; -import type { Connectable } from "../../block-store/index.js"; - -const netlifyCxs = new Map(); - -export { ConnectNetlify }; - -export const connect = { - netlify: ({ name, blockstore }: Connectable, refresh = false) => { - if (!name) throw new Error("database name is required"); - if (!refresh && netlifyCxs.has(name)) { - return netlifyCxs.get(name); - } - const connection = new ConnectNetlify(name); - connection.connect(blockstore); - netlifyCxs.set(name, connection); - return connection; - }, -}; diff --git a/src/connectors/connect-netlify/server.ts b/src/connectors/connect-netlify/server.ts deleted file mode 100644 index 8e7d52127..000000000 --- a/src/connectors/connect-netlify/server.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { getStore } from "@netlify/blobs"; - -interface CRDTEntry { - readonly data: string; - readonly cid: string; - readonly parents: string[]; -} - -export default async (req: Request) => { - const url = new URL(req.url); - const carId = url.searchParams.get("car"); - const metaDb = url.searchParams.get("meta"); - if (carId) { - const carFiles = getStore("cars"); - if (req.method === "PUT") { - const carArrayBuffer = new Uint8Array(await req.arrayBuffer()); - await carFiles.set(carId, carArrayBuffer); - return new Response(JSON.stringify({ ok: true }), { status: 201 }); - } else if (req.method === "GET") { - const carArrayBuffer = await carFiles.get(carId); - return new Response(carArrayBuffer, { status: 200 }); - } - } else if (metaDb) { - // Problem: Deletion operations are faster than write operations, leading to an empty list most of the time if deletes happen at PUT time. - // Solution: Delay deletes until GET operation. Utilize the parents list during read operation to mask and delete outdated entries. - const meta = getStore("meta"); - if (req.method === "PUT") { - const { data, cid, parents } = (await req.json()) as CRDTEntry; - await meta.setJSON(`${metaDb}/${cid}`, { data, parents }); - return new Response(JSON.stringify({ ok: true }), { status: 201 }); - } else if (req.method === "GET") { - const { blobs } = await meta.list({ prefix: `${metaDb}/` }); - const allParents = [] as string[]; - const entries = ( - await Promise.all( - blobs.map(async (blob) => { - const { data, parents } = await meta.get(blob.key, { type: "json" }); - for (const p of parents) { - allParents.push(p.toString()); - void meta.delete(`${metaDb}/${p}`); - } - return { cid: blob.key.split("/")[1], data }; - }), - ) - ).filter((entry) => entry.data !== null && !allParents.includes(entry.cid)); - return new Response(JSON.stringify(entries), { status: 200 }); - } - } else { - return new Response(JSON.stringify({ error: "Invalid path" }), { status: 400 }); - } -}; - -export const config = { path: "/fireproof" }; diff --git a/src/connectors/connect-ucan/README.md b/src/connectors/connect-ucan/README.md deleted file mode 100644 index 2a0a06942..000000000 --- a/src/connectors/connect-ucan/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Connect Fireproof to IPFS - -This uses web3.storage to upload CAR files (the same ones in Fireproof local storage) and then uses the IPFS gateway to retrieve them. - -It also includes support for access control via UCAN delegation. - -This connector is a work in progress so you should use it but also expect to contribute improvements. Thanks! diff --git a/src/connectors/connect-ucan/connect-ucan.ts b/src/connectors/connect-ucan/connect-ucan.ts deleted file mode 100644 index c612789ec..000000000 --- a/src/connectors/connect-ucan/connect-ucan.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { - CarClockHead, - DbMetaEventBlock, - DownloadDataFnParams, - DownloadMetaFnParams, - UploadDataFnParams, - UploadMetaFnParams, -} from "../../block-store/index.js"; -import { Client } from "@web3-storage/w3up-client"; -import * as w3clock from "@web3-storage/clock/client"; -import { decodeEventBlock } from "@web3-storage/pail/clock"; -import { DID, Link, Proof } from "@ucanto/interface"; -import { create as createClient } from "@web3-storage/w3up-client"; -import * as Account from "@web3-storage/w3up-client/account"; -import * as Result from "@web3-storage/w3up-client/result"; -import { Falsy, throwFalsy } from "../../types.js"; -import { ConnectionBase } from "../../block-store/connection-base.js"; - -export interface ConnectUCANParams { - name: string; - schema: string; -} - -const DEFAULT_CLOCK_SPACE_NAME = "_fireproof_account"; - -function findClockSpace(client: Client, name: string = DEFAULT_CLOCK_SPACE_NAME): DID | Falsy { - const spaces = client.spaces(); - const space = spaces - // sort alphanumerically by space DID - .sort((s, t) => (s.did() === t.did() ? 0 : s.did() < t.did() ? -1 : 1)) - // find the first one matching name - .find((s) => s.name === name); - return space?.did(); -} - -async function createSpace(client: Client, account: Account.Account, name: string = DEFAULT_CLOCK_SPACE_NAME): Promise { - const space = await client.createSpace(name); - Result.try(await account.provision(space.did())); - await client.addSpace( - await space.createAuthorization(client.agent, { - access: { "*": {} }, - expiration: Infinity, - }), - ); - const recovery = await space.createRecovery(account.did()); - Result.try( - await client.capability.access.delegate({ - space: space.did(), - delegations: [recovery], - }), - ); - Result.try(await account.save()); - return space.did(); -} - -function parseEmail(email: string): Account.EmailAddress { - if (email.split("@").length !== 2) { - throw new Error(`${email} doesn't look anything like an email address, try again?`); - } - return email as Account.EmailAddress; -} - -export class ConnectUCAN extends ConnectionBase { - client?: Client; - clockSpaceDID?: DID; - readonly params: ConnectUCANParams; - readonly pubsub: () => void; - - constructor(params: ConnectUCANParams) { - super(); - this.params = params; - this.pubsub = function () { - return; - }; - } - - async authorize(rawEmail: string) { - const email = parseEmail(rawEmail); - const client = await createClient(); - this.client = client; - const account = Result.try(await Account.login(client, email)); - Result.try(await account.save()); - const existingClockSpace = findClockSpace(client, this.params.name); - if (existingClockSpace) { - console.log(`Found ${existingClockSpace}, joining.`); - this.clockSpaceDID = existingClockSpace; - } else { - this.clockSpaceDID = await createSpace(client, account, this.params.name); - console.log("Could not find existing space, creating new one."); - } - await client.setCurrentSpace(throwFalsy(this.clockSpaceDID)); - console.log("starting background sync"); - void this.startBackgroundSync(); - } - - async startBackgroundSync() { - while (true) { - await new Promise((resolve) => - // todo implement websocket on w3clock - setTimeout(resolve, 1500), - ); - try { - console.log("refreshing"); - await this.refresh(); - console.log("refreshed"); - } catch (e: unknown) { - console.log("refresh error", e); - await new Promise((resolve) => setTimeout(resolve, 5000)); - } - } - } - - async dataDownload(params: DownloadDataFnParams): Promise { - const url = `https://${params.car}.ipfs.w3s.link/`; - const response = await fetch(url); - if (response.ok) { - return new Uint8Array(await response.arrayBuffer()); - } else { - throw new Error(`Failed to download ${url}`); - } - } - - async dataUpload(bytes: Uint8Array, params: UploadDataFnParams, opts?: { public?: boolean }): Promise { - const client = this.client; - if (!client) { - throw new Error("client not initialized, cannot dataUpload, please authorize first"); - } - - // uploadCar is processed so roots are reachable via CDN - // uploadFile makes the car itself available via CDN - // todo if params.type === 'file' and database is public also uploadCAR - if (params.type === "file" && opts?.public) { - await client.uploadCAR(new Blob([bytes])); - } - return await client.uploadFile(new Blob([bytes])).then(() => { - return; - }); - } - - async metaDownload(params: DownloadMetaFnParams): Promise { - const client = this.client; - if (!client) { - throw new Error("client not initialized, cannot metaDownload, please authorize first"); - } - const clockSpaceDID = this.clockSpaceDID; - if (!clockSpaceDID) { - throw new Error("clockSpaceDID not initialized, cannot metaDownload, please authorize first"); - } - if (params.branch !== "main") { - throw new Error("todo, implement space per branch"); - } - const clockProofs = await this.clockProofsForDb(); - const head = await w3clock.head({ - issuer: client.agent.issuer, - with: clockSpaceDID, - proofs: clockProofs, - }); - if (head.out.ok) { - return this.fetchAndUpdateHead(head.out.ok.head as unknown as Link[]); - } else { - console.log("w3clock error", head.out.error); - throw new Error(`Failed to download ${params.name}`); - } - } - - async metaUpload(bytes: Uint8Array, params: UploadMetaFnParams): Promise { - const client = this.client; - if (!client) { - throw new Error("client not initialized, cannot metaUpload, please authorize first"); - } - const clockSpaceDID = this.clockSpaceDID; - if (!clockSpaceDID) { - throw new Error("clockSpaceDID not initialized, cannot metaUpload, please authorize first"); - } - if (params.branch !== "main") { - throw new Error("todo, implement space per branch"); - } - - const clockProofs = await this.clockProofsForDb(); - - const event = await this.createEventBlock(bytes); - - // TODO: turn event into a CAR rather than a blob and use uploadCAR below - const blob = new Blob([event.bytes]); - - await client.uploadFile(blob); - - const blocks = []; - for (const { bytes: eventBytes } of this.eventBlocks.entries()) { - blocks.push(await decodeEventBlock(eventBytes)); - } - - const advanced = await w3clock.advance( - { - issuer: client.agent.issuer, - with: clockSpaceDID, - - proofs: clockProofs, - }, - event.cid, - { blocks }, - ); - - const { ok, error } = throwFalsy(advanced.root.data).ocm.out; - if (error) { - throw new Error(JSON.stringify(error)); - } - this.parents = [event.cid]; - - const head = ok.head as CarClockHead; - return this.fetchAndUpdateHead(head); - } - - async fetchAndUpdateHead(remoteHead: CarClockHead) { - const outBytess = []; - const cache = this.eventBlocks; - for (const cid of remoteHead) { - const local = await cache.get(cid); - if (local) { - const event = await decodeEventBlock<{ dbMeta: Uint8Array }>(local.bytes); - outBytess.push(event.value.data.dbMeta); - } else { - const url = `https://${cid.toString()}.ipfs.w3s.link/`; - const response = await fetch(url, { redirect: "follow" }); - if (response.ok) { - const metaBlock = new Uint8Array(await response.arrayBuffer()); - await cache.put(cid, metaBlock); - const event = await decodeEventBlock<{ dbMeta: Uint8Array }>(metaBlock); - outBytess.push(event.value.data.dbMeta); - } else { - throw new Error(`Failed to download ${url}`); - } - } - } - this.parents = remoteHead; - return outBytess; - } - - async clockProofsForDb(): Promise { - const client = this.client; - if (!client) { - throw new Error("client not initialized, cannot get clock proofs, please authorize first"); - } - const clockSpaceDID = this.clockSpaceDID; - if (!clockSpaceDID) { - throw new Error("clockSpaceDID not initialized, cannot get clock proofs, please authorize first"); - } - const clockProofs = client.proofs([{ can: "clock/*", with: clockSpaceDID }]); - if (!clockProofs.length) { - throw new Error("missing clock/* capability on account space"); - } - return clockProofs; - } -} diff --git a/src/connectors/connect-ucan/index.ts b/src/connectors/connect-ucan/index.ts deleted file mode 100644 index ee218b5ac..000000000 --- a/src/connectors/connect-ucan/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Connectable } from "../../block-store/index.js"; -import { ConnectUCAN, ConnectUCANParams } from "./connect-ucan.js"; - -export { ConnectUCAN, ConnectUCANParams }; - -const ipfsCxs = new Map(); - -export const connect = { - ucan: ({ name, blockstore }: Connectable, schemaName?: string) => { - if (!name) throw new Error("database name is required"); - if (ipfsCxs.has(name)) { - return ipfsCxs.get(name); - } - if (!schemaName && location) { - schemaName = location.origin; - } - const connection = new ConnectUCAN({ name, schema: schemaName } as ConnectUCANParams); - connection.connect(blockstore); - ipfsCxs.set(name, connection); - return connection; - }, -}; diff --git a/tests/connectors/connect-partykit/app/README.md b/tests/connectors/connect-partykit/app/README.md deleted file mode 100644 index 9000c6379..000000000 --- a/tests/connectors/connect-partykit/app/README.md +++ /dev/null @@ -1,11 +0,0 @@ -## 🎈 app - -Welcome to the party, pal! - -This is a [Partykit](https://partykit.io) project, which lets you create real-time collaborative applications with minimal coding effort. - -[`server.ts`](./src/server.ts) is the server-side code, which is responsible for handling WebSocket events and HTTP requests. [`client.ts`](./src/client.ts) is the client-side code, which connects to the server and listens for events. - -You can start developing by running `npm run dev` and opening [http://localhost:1999](http://localhost:1999) in your browser. When you're ready, you can deploy your application on to the PartyKit cloud with `npm run deploy`. - -Refer to our docs for more information: https://github.com/partykit/partykit/blob/main/README.md. For more help, reach out to us on [Discord](https://discord.gg/g5uqHQJc3z), [GitHub](https://github.com/partykit/partykit), or [Twitter](https://twitter.com/partykit_io). diff --git a/tests/connectors/connect-partykit/app/partykit.json b/tests/connectors/connect-partykit/app/partykit.json deleted file mode 100644 index b39dc9de4..000000000 --- a/tests/connectors/connect-partykit/app/partykit.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://www.partykit.io/schema.json", - "name": "app", - "main": "src/server.ts", - "parties": { - "fireproof": "../../src/server.ts" - }, - "compatibilityDate": "2024-01-18", - "serve": { - "path": "public", - "build": "src/client.ts" - } -} diff --git a/tests/connectors/connect-partykit/app/public/favicon.ico b/tests/connectors/connect-partykit/app/public/favicon.ico deleted file mode 100644 index 18f305e9f..000000000 Binary files a/tests/connectors/connect-partykit/app/public/favicon.ico and /dev/null differ diff --git a/tests/connectors/connect-partykit/app/public/index.html b/tests/connectors/connect-partykit/app/public/index.html deleted file mode 100644 index 79e85e170..000000000 --- a/tests/connectors/connect-partykit/app/public/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - PartyKit: Everything's better with friends! - - - - - - - - - - - - - -
-

🎈 Welcome to PartyKit!

-
- - - diff --git a/tests/connectors/connect-partykit/app/public/normalize.css b/tests/connectors/connect-partykit/app/public/normalize.css deleted file mode 100644 index bb6e2a7d6..000000000 --- a/tests/connectors/connect-partykit/app/public/normalize.css +++ /dev/null @@ -1,351 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers. - */ - -body { - margin: 0; -} - -/** - * Render the `main` element consistently in IE. - */ - -main { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Remove the gray background on active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove the border on images inside links in IE 10. - */ - -img { - border-style: none; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { - /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { - /* 1 */ - text-transform: none; -} - -/** - * Correct the inability to style clickable types in iOS and Safari. - */ - -button, -[type="button"], -[type="reset"], -[type="submit"] { - -webkit-appearance: button; -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Correct the padding in Firefox. - */ - -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - vertical-align: baseline; -} - -/** - * Remove the default vertical scrollbar in IE 10+. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding in Chrome and Safari on macOS. - */ - -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Misc - ========================================================================== */ - -/** - * Add the correct display in IE 10+. - */ - -template { - display: none; -} - -/** - * Add the correct display in IE 10. - */ - -[hidden] { - display: none; -} diff --git a/tests/connectors/connect-partykit/app/src/client.ts b/tests/connectors/connect-partykit/app/src/client.ts deleted file mode 100644 index 8a3330129..000000000 --- a/tests/connectors/connect-partykit/app/src/client.ts +++ /dev/null @@ -1,40 +0,0 @@ -import "./styles.css"; - -import * as ps from "partysocket"; - -declare const PARTYKIT_HOST: string; - -let pingInterval: ReturnType; - -// Let's append all the messages we get into this DOM element -const output = document.getElementById("app") as HTMLDivElement; - -// Helper function to add a new line to the DOM -function add(text: string) { - output.appendChild(document.createTextNode(text)); - output.appendChild(document.createElement("br")); -} - -// A PartySocket is like a WebSocket, except it's a bit more magical. -// It handles reconnection logic, buffering messages while it's offline, and more. -const conn = new ps.PartySocket({ - host: PARTYKIT_HOST, - room: "my-new-room", -}); - -// You can even start sending messages before the connection is open! -conn.addEventListener("message", (event) => { - add(`Received -> ${event.data}`); -}); - -// Let's listen for when the connection opens -// And send a ping every 2 seconds right after -conn.addEventListener("open", () => { - add("Connected!"); - add("Sending a ping every 2 seconds..."); - // TODO: make this more interesting / nice - clearInterval(pingInterval); - pingInterval = setInterval(() => { - conn.send("ping"); - }, 1000); -}); diff --git a/tests/connectors/connect-partykit/app/src/server.ts b/tests/connectors/connect-partykit/app/src/server.ts deleted file mode 100644 index 90b713c18..000000000 --- a/tests/connectors/connect-partykit/app/src/server.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type * as Party from "partykit/server"; - -export default class Server implements Party.Server { - constructor(readonly room: Party.Room) {} - - onConnect(conn: Party.Connection, ctx: Party.ConnectionContext) { - // A websocket just connected! - console.log( - `Connected: - id: ${conn.id} - room: ${this.room.id} - url: ${new URL(ctx.request.url).pathname}`, - ); - - // let's send a message to the connection - conn.send("hello from server"); - } - - onMessage(message: string, sender: Party.Connection) { - // let's log the message - console.log(`connection ${sender.id} sent message: ${message}`); - // as well as broadcast it to all the other connections in the room... - this.room.broadcast( - `${sender.id}: ${message}`, - // ...except for the connection it came from - [sender.id], - ); - } -} - -Server satisfies Party.Worker; diff --git a/tests/connectors/connect-partykit/app/src/styles.css b/tests/connectors/connect-partykit/app/src/styles.css deleted file mode 100644 index b58aeb355..000000000 --- a/tests/connectors/connect-partykit/app/src/styles.css +++ /dev/null @@ -1,31 +0,0 @@ -/* - We've already included normalize.css. - - But we'd like a modern looking boilerplate. - Clean type, sans-serif, and a nice color palette. - -*/ - -body { - font-family: sans-serif; - font-size: 16px; - line-height: 1.5; - color: #333; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: sans-serif; - font-weight: 600; - line-height: 1.25; - margin-top: 0; - margin-bottom: 0.5rem; -} - -#app { - padding: 1rem; -} diff --git a/tests/connectors/connect-sql/my.ts-off b/tests/connectors/connect-sql/my.ts-off deleted file mode 100644 index 153fac00d..000000000 --- a/tests/connectors/connect-sql/my.ts-off +++ /dev/null @@ -1,30 +0,0 @@ -import { fireproof } from "../../../src/index.js"; -import { SimpleSQLite } from "./dist/node/sqlite-adapter-node.cjs"; - -import { LoggerImpl, Level } from "@adviser/cement"; - -async function main() { - const logger = new LoggerImpl(); // .EnableLevel(Level.DEBUG); - logger.Debug().Msg("test"); - - const db = fireproof("my-database", { - store: SimpleSQLite("sqlite.db", { - logger, - }), - }); - - // const connection = new ConnectSQL(SimpleSQLite("sqlite.db")); - // await connection.connect(db.blockstore); - const ok = await db.put({ hello: "world:" + new Date().toISOString() }); - logger.Info().Any("RES->", ok).Msg("put"); - - const rows = await db.allDocs(); - logger.Info().Any("RES->", rows).Msg("All docs"); - - // const doc = await db.get(ok.id); - // console.log(doc); - - // console.log(await db.allDocs()); -} - -main().catch(console.error); diff --git a/tests/connectors/connect-ucan/connect-ipfs.test.ts-off b/tests/connectors/connect-ucan/connect-ipfs.test.ts-off deleted file mode 100644 index 31b0c72be..000000000 --- a/tests/connectors/connect-ucan/connect-ipfs.test.ts-off +++ /dev/null @@ -1,59 +0,0 @@ -import { assert, equals, notEquals, matches, resetDirectory, equalsJSON } from "../../helpers.js"; -import { Database } from "../../../src/index.js"; -import { connect } from "../../../src/connectors/connect-ipfs/index.js"; -// import { Doc } from '../dist/test/types.d.esm.js' -import { MetaStore } from "../../fireproof/dist/test/store-fs.esm.js"; -import { join } from "path"; -import { promises as fs } from "fs"; -import { type } from "os"; -import { ConnectUCAN } from "../../../src/connectors/connect-ucan/connect-ucan.js"; -import { Connection } from "../../../src/storage-engine/index.js"; -const { readFile, writeFile } = fs; - -const mockStore = new Map(); - -class MockConnect extends Connection { - async metaUpload(bytes, { name, branch }) { - const key = new URLSearchParams({ name, branch }).toString(); - mockStore.set(key, bytes); - } - - async dataUpload(bytes, { type, name, car }) { - const key = new URLSearchParams({ type, name, car }).toString(); - mockStore.set(key, bytes); - } - - async metaDownload({ name, branch }) { - const key = new URLSearchParams({ name, branch }).toString(); - if (!mockStore.has(key)) return null; - return [mockStore.get(key)]; - } - async dataDownload({ type, name, car }) { - const key = new URLSearchParams({ type, name, car }).toString(); - return mockStore.get(key); - } -}; - -const mockConnect = new MockConnect(); - -describe("connect ipfs", function () { - let cx: ConnectUCAN; - let db: Database; - let dbName: string; - beforeEach(async function () { - dbName = "test-raw-connect"; - await resetDirectory(MetaStore.dataDir, dbName); - mockStore.clear(); - db = new Database(dbName); - cx = connect.ucan(db, "my-schema"); - }); - it("should have an awaitable ready", function () { - assert(cx); - assert(cx.ready); - assert.equal(typeof cx.ready.then, "function"); - }); - it("should have an awaitable authorizing", function () { - assert(cx); - assert(cx.authorizing); - }); -}); diff --git a/tests/connectors/connect-ucan/connect.test.ts-off b/tests/connectors/connect-ucan/connect.test.ts-off deleted file mode 100644 index 3c15b01f1..000000000 --- a/tests/connectors/connect-ucan/connect.test.ts-off +++ /dev/null @@ -1,493 +0,0 @@ -import { assert, equals, notEquals, matches, resetDirectory, equalsJSON } from "../../helpers.js"; -import { Database } from "../../../src/index.js"; -// import { connect } from "../../../src/index.js"; -// import { Doc } from '../dist/test/types.d.esm.js' -// import { MetaStore } from "../../../src/store-fs.js"; -import { join } from "node:path"; -import { promises as fs } from "node:fs"; -import { connect } from '../../../src/connectors/connect-aws/index.js' -import { Connection } from "../../../src/storage-engine/connection.js"; -import { DownloadDataFnParams, DownloadMetaFnParams, MetaStore, UploadDataFnParams, UploadMetaFnParams } from "../../../src/storage-engine/index.js"; - -const { readFile, writeFile } = fs; - -const serviceConfig = { - s3: { - upload: "https://04rvvth2b4.execute-api.us-east-2.amazonaws.com/uploads", - download: "https://sam-app-s3uploadbucket-e6rv1dj2kydh.s3.us-east-2.amazonaws.com", - }, -}; - -const mockStore = new Map(); -class MockConnect extends Connection { - // readonly blockstore: EncryptedBlockstore - // readonly name?: string; - - // abstract metaUpload(bytes: Uint8Array, params: UploadMetaFnParams): Promise; - // abstract dataUpload(bytes: Uint8Array, params: UploadDataFnParams, opts?: { public?: boolean }): Promise; - // abstract metaDownload(params: DownloadMetaFnParams): Promise; - // abstract dataDownload(params: DownloadDataFnParams): Promise; - - async metaUpload(bytes: Uint8Array, { name, branch }: UploadMetaFnParams) { - const key = new URLSearchParams({ name, branch }).toString(); - mockStore.set(key, bytes); - return undefined - } - - async dataUpload(bytes: Uint8Array, { type, name, car }: UploadDataFnParams) { - const key = new URLSearchParams({ type, name, car }).toString(); - mockStore.set(key, bytes); - } - - async metaDownload({ name, branch }: DownloadMetaFnParams): Promise { - const key = new URLSearchParams({ name, branch }).toString(); - if (!mockStore.has(key)) { - return undefined; - } - return [mockStore.get(key)]; - } - async dataDownload({ type, name, car }: DownloadDataFnParams) { - const key = new URLSearchParams({ type, name, car }).toString(); - return mockStore.get(key); - } -}; - -// const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)) - -describe.skip("basic Connection with s3 remote", function () { - let db: Database - let dbName: string - beforeEach(async function () { - dbName = "test-s3-" + Math.ceil(Math.random() * 100000); - db = new Database(dbName); - const remote = connect.s3(db, serviceConfig.s3); - await remote.ready; - /** @type {Doc} */ - const doc = { _id: "hello", value: "world" }; - const ok = await db.put(doc); - equals(ok.id, "hello"); - const { - _crdt: { - blocks: { loader }, - }, - } = db; - await loader.remoteMetaLoading; - // await sleep(1000) - }); // .timeout(10000) - it("should save a remote header", async function () { - const { - _crdt: { - blocks: { loader }, - }, - } = db; - const gotMain = await loader.remoteMetaStore.load("main"); - assert(gotMain); - equals(gotMain[0].key, loader.key); - }, 10000); - it("should get", async function () { - const doc = await db.get("hello"); - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - }, 10000); - it("should get remote", async function () { - await resetDirectory(MetaStore.dataDir, dbName); - const db2 = new Database(dbName); - const remote = connect.s3(db2, serviceConfig.s3); - await remote.ready; - const { - _crdt: { - blocks: { loader: loader2 }, - }, - } = db2; - await loader2.ready; - const gotMain = await loader2.remoteMetaStore.load("main"); - equals(gotMain[0].key, loader2.key); // fails when remote not ingested - - const doc = await db2.get<{ value: string }>("hello"); - - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - }, 10000); -}); - -describe("basic Connection with raw remote", function () { - let db: Database - let dbName: string; - beforeEach(async function () { - dbName = "test-raw-connect"; - await resetDirectory(MetaStore.dataDir, dbName); - mockStore.clear(); - db = new Database(dbName); - const remote = connect.raw(db, mockConnect); - await remote.ready; - /** @type {Doc} */ - const doc = { _id: "hello", value: "world" }; - const ok = await db.put(doc); - equals(ok.id, "hello"); - await remote.loader.remoteMetaLoading; - }); // .timeout(10000) - it("should save a remote header", async function () { - const { - _crdt: { - blocks: { loader }, - }, - } = db; - const gotMain = (await loader.remoteMetaStore.load("main"))[0]; - assert(gotMain); - equals(gotMain.key, loader.key); - }, 10000); - it("should have a carLog", async function () { - const { - _crdt: { - blocks: { loader }, - }, - } = db; - assert(loader.carLog); - equals(loader.carLog.length, 1); - }, 10000); - it("should get", async function () { - const doc = await db.get<{ value: string }>("hello"); - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - }, 10000); - it("should get remote", async function () { - await resetDirectory(MetaStore.dataDir, dbName); - const db2 = new Database(dbName); - const remote = connect.raw(db2, mockConnect); - await remote.ready; - const { - _crdt: { - blocks: { loader: loader2 }, - }, - } = db2; - await loader2.ready; - const gotMain = (await loader2.remoteMetaStore.load("main"))[0]; - equals(gotMain.key, loader2.key); // fails when remote not ingested - - const doc = await db2.get("hello"); - - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - }, 10000); - it("should be ok with a remote that has headers but not car files", async function () { - // create a database that is up to date with meta1 but not meta2 - // add meta2 and poll it - - const dataDownload = async function () { }; - const badMockConnect = { ...mockConnect, dataDownload }; - - const db2 = new Database(dbName); - const connection = connect.raw(db2, badMockConnect); - await connection.ready; - - const changes = await db2.changes(); - equals(changes.rows.length, 1); - - const doc2 = { _id: "hi", value: "team" }; - const ok2 = await db.put(doc2); - equals(ok2.id, "hi"); - await resetDirectory(MetaStore.dataDir, dbName); - - const did = await connection.refresh().catch((e) => e); - assert(did); - matches(did.message, /missing remote/); - - const changes2 = await db2.changes(); - equals(changes2.rows.length, 1); - - const { - _crdt: { - blocks: { loader }, - }, - } = db2; - - assert(loader); - equals(loader.carLog.length, 1); - assert(loader.ready.then); - - // heal with good connection - const connection2 = connect.raw(db2, mockConnect); - await connection2.ready; - assert(!!connection2.refresh); - - await connection2.refresh(); - - const changes3 = await db2.changes(); - equals(changes3.rows.length, 2); - }); -}); - -describe("forked Connection with raw remote", function () { - let db: Database - let dbName: string - beforeEach(async function () { - dbName = "test-raw-forked"; - await resetDirectory(MetaStore.dataDir, dbName); - mockStore.clear(); - db = new Database(dbName); - const remote = connect.raw(db, mockConnect); - await remote.ready; - /** @type {Doc} */ - const doc = { _id: "hello", value: "world" }; - const ok = await db.put(doc); - equals(ok.id, "hello"); - await remote.loader.remoteMetaLoading; - }); // .timeout(10000) - it("should save a remote header", async function () { - const { - _crdt: { - blocks: { loader }, - }, - } = db; - const gotMain = (await loader.remoteMetaStore.load("main"))[0]; - assert(gotMain); - equals(gotMain.key, loader.key); - }, 10000); - it("should get", async function () { - const doc = await db.get<{ value: string }>("hello"); - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - }, 10000); - it("should get remote fork", async function () { - // await resetDirectory(MetaStore.dataDir, dbName) - - const db2 = new Database(dbName); - - const doc = await db2.get<{ value: string }>("hello"); - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - - // db is still connected to mockConnect - await db.put({ _id: "greetings", value: "universe" }); - - const remote = connect.raw(db2, mockConnect); - await remote.ready; - const { - _crdt: { - blocks: { loader: loader2 }, - }, - } = db2; - const gotMain = (await loader2.remoteMetaStore.load("main"))[0]; - equals(gotMain.key, loader2.key); // fails when remote not ingested - - const doc2 = await db2.get("greetings"); - equals(doc2.value, "universe"); - // equals(db2._crdt.clock.head.length, 2) - - const ok3 = await db2.put({ _id: "hey", value: "partyverse" }); - equals(ok3.id, "hey"); - equals(db2._crdt.clock.head.length, 1); - - // open a the db again from files - const db3 = new Database(dbName); - const doc3 = await db3.get<{ value: string }>("hey"); - equals(doc3.value, "partyverse"); - const doc4 = await db3.get<{ value: string }>("greetings"); - equals(doc4.value, "universe"); - - // reset files and open again - await resetDirectory(MetaStore.dataDir, dbName); - const db4 = new Database(dbName); - const remote4 = connect.raw(db4, mockConnect); - await remote4.loaded; - const changes = await db4.changes(); - equals(changes.rows.length, 3); - }, 10000); -}); - -describe("two Connection with raw remote", function () { - let db: Database - let dbName: string - - // this test won't test the forking anymore once we - // move away from default behavior of: - // on connect, pull remote once - // on connected put, push to remote. - // basically as soon as we have continuous pull, we need to rethink this test. - // the goal is to test that when you merge a remote head that has a fork - // you get the correct outcome (both forks are merged) - - // the test should be: - // make database A - // connect A to the remote R - // create doc 1 - // snap meta 1 - // create doc 2 - // snap meta 2 - // rollback to meta 1 - // make database A2 (same name) - // connect A2 to the remote R - // create doc 3 - // snap meta 3 - // rollback to meta 2 - // make database A3 (same name) - - let metaPath; - beforeEach(async function () { - dbName = "test-connection-raw"; - metaPath = join(MetaStore.dataDir, dbName, "meta", "main.json"); - await resetDirectory(MetaStore.dataDir, dbName); - mockStore.clear(); - db = new Database(dbName); - const remote = connect.raw(db, mockConnect); - await remote.ready; - /** @type {Doc} */ - const doc = { _id: "hello", value: "world" }; - const ok = await db.put(doc); - equals(ok.id, "hello"); - assert(MetaStore.dataDir); - - const meta1 = await readFile(metaPath); - equalsJSON(Object.keys(JSON.parse(meta1.toString())), ["car", "key"]); - - // await writeFile(metaPath, meta1) - - const db2 = new Database(dbName); - - const remote2 = connect.raw(db2, mockConnect); - - await remote2.ready; - // await db2._crdt.ready - - const doc2 = { _id: "hi", value: "folks" }; - const ok2 = await db.put(doc2); - equals(ok2.id, "hi"); - const hi = await db.get<{ value: string }>(ok2.id); - equals(hi.value, "folks"); - - const changes1 = await db.changes(); - equals(changes1.rows.length, 2); - - const meta2 = await readFile(metaPath); - equalsJSON(Object.keys(JSON.parse(meta2.toString())), ["car", "key"]); - notEquals(meta1.toString(), meta2.toString()); - - await db2._crdt.blockstore.loader.ready; - - const docHello = await db2.get<{ value: string }>("hello"); - equals(docHello.value, "world"); - - const docHi = await db2.get("hi").catch((e) => e); - matches(docHi.message, /Missing/); - - const doc3 = { _id: "hey", value: "partyverse" }; - - assert(db2._crdt.blockstore.loader); - assert(db2._crdt.blockstore.loader.carLog); - equals(db2._crdt.blockstore.loader.carLog.length, 1); - - // this is intermittent, why? - const ok3 = await db2.put(doc3); - equals(ok3.id, "hey"); - equals(db2._crdt.clock.head.length, 1); - equalsJSON(db2._crdt.clock.head, ok3.clock); - - const hey = await db2.get<{ value: string }>("hey"); - equals(hey.value, "partyverse"); - - const changes2 = await db2.changes(); - - equals(changes2.rows.length, 2); - - const meta3 = await readFile(metaPath); - equalsJSON(Object.keys(JSON.parse(meta3.toString())), ["car", "key"]); - notEquals(meta2.toString(), meta3.toString()); - notEquals(meta1.toString(), meta3.toString()); - - await writeFile(metaPath, meta2); - const db3 = new Database(dbName); - await db3._crdt.ready; - assert(db3._crdt.blockstore.loader); - assert(db3._crdt.blockstore.loader.carLog); - // equals(db3._crdt.blockstore.loader.carLog.length, 2) - - const changes25 = await db3.changes(); - equals(changes25.rows.length, 2); - - equalsJSON(db3._crdt.clock.head, changes25.clock); - - const remote3 = connect.raw(db3, mockConnect); - await remote3.loaded; - - // await db3._crdt.blockstore.loader.remoteMetaLoading - // await db3._crdt.ready - - // equalsJSON(db3._crdt.clock.head, ok3.clock) - equals(db3._crdt.clock.head.length, 2); - - const hey3 = await db3.get<{ value: string }>("hey"); - equals(hey3.value, "partyverse"); - - const docHello3 = await db3.get<{ value: string }>("hello"); - equals(docHello3.value, "world"); - - // const docHi3 = await db3.get('hi') - // equals(docHi3.value, 'world') - - const changes3 = await db3.changes(); - - equals(changes3.rows.length, 3); - }); // .timeout(10000) - it("should save a remote header", async function () { - const { - _crdt: { - blocks: { loader }, - }, - } = db; - const gotMain = (await loader.remoteMetaStore.load("main"))[0]; - assert(gotMain); - equals(gotMain.key, loader.key); - }, 10000); - it("continues to execute queries", async function () { - // await resetDirectory(MetaStore.dataDir, dbName) - - const db2 = new Database(dbName); - - const doc = await db2.get<{ value: string }>("hello"); - assert(doc); - equals(doc._id, "hello"); - equals(doc.value, "world"); - - // db is still connected to mockConnect - await db.put({ _id: "greetings", value: "universe" }); - - const remote = connect.raw(db2, mockConnect); - await remote.ready; - const { - _crdt: { - blocks: { loader: loader2 }, - }, - } = db2; - const gotMain = (await loader2.remoteMetaStore.load("main"))[0]; - equals(gotMain.key, loader2.key); // fails when remote not ingested - - const doc2 = await db2.get<{ value: string }>("greetings"); - equals(doc2.value, "universe"); - // equals(db2._crdt.clock.head.length, 2) - - const ok3 = await db2.put({ _id: "hey", value: "partyverse" }); - equals(ok3.id, "hey"); - equals(db2._crdt.clock.head.length, 1); - - // open a the db again from files - const db3 = new Database(dbName); - const doc3 = await db3.get<{ value: string }>("hey"); - equals(doc3.value, "partyverse"); - const doc4 = await db3.get<{ value: string }>("greetings"); - equals(doc4.value, "universe"); - - // reset files and open again - await resetDirectory(MetaStore.dataDir, dbName); - const db4 = new Database(dbName); - const remote4 = connect.raw(db4, mockConnect); - await remote4.loaded; - const changes = await db4.changes(); - equals(changes.rows.length, 4); - }, 10000); -});