diff --git a/.gitignore b/.gitignore index b45d778d6..2834b8e0f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ /datasets_* TODO.md + +.stfolder diff --git a/app/package.json b/app/package.json index 0e8f2800a..ab5da7a0e 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "satonomics", "description": "A better, FOSS, Bitcoin-only, self-hostable Glassnode", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "type": "module", "scripts": { @@ -19,14 +19,14 @@ "@leeoniya/ufuzzy": "^1.0.14", "@solid-primitives/event-listener": "^2.3.3", "@solid-primitives/intersection-observer": "^2.1.6", - "@solid-primitives/resize-observer": "^2.0.25", + "@solid-primitives/resize-observer": "^2.0.26", "lean-qr": "^2.3.4", "lightweight-charts": "^4.1.6", "solid-js": "^1.8.18" }, "devDependencies": { "@ianvs/prettier-plugin-sort-imports": "^4.3.0", - "@iconify-json/tabler": "^1.1.116", + "@iconify-json/tabler": "^1.1.117", "@tailwindcss/container-queries": "^0.1.1", "autoprefixer": "^10.4.19", "postcss": "^8.4.39", @@ -42,6 +42,6 @@ "vite-plugin-pwa": "^0.20.0", "vite-plugin-solid": "^2.10.2", "workbox-window": "^7.1.0", - "wrangler": "^3.63.1" + "wrangler": "^3.63.2" } } diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index 887623660..7427138a6 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -15,8 +15,8 @@ dependencies: specifier: ^2.1.6 version: 2.1.6(solid-js@1.8.18) '@solid-primitives/resize-observer': - specifier: ^2.0.25 - version: 2.0.25(solid-js@1.8.18) + specifier: ^2.0.26 + version: 2.0.26(solid-js@1.8.18) lean-qr: specifier: ^2.3.4 version: 2.3.4 @@ -32,8 +32,8 @@ devDependencies: specifier: ^4.3.0 version: 4.3.0(prettier@3.3.2) '@iconify-json/tabler': - specifier: ^1.1.116 - version: 1.1.116 + specifier: ^1.1.117 + version: 1.1.117 '@tailwindcss/container-queries': specifier: ^0.1.1 version: 0.1.1(tailwindcss@3.4.4) @@ -80,8 +80,8 @@ devDependencies: specifier: ^7.1.0 version: 7.1.0 wrangler: - specifier: ^3.63.1 - version: 3.63.1 + specifier: ^3.63.2 + version: 3.63.2 packages: @@ -196,7 +196,7 @@ packages: dependencies: '@babel/compat-data': 7.24.7 '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -1887,8 +1887,8 @@ packages: - supports-color dev: true - /@iconify-json/tabler@1.1.116: - resolution: {integrity: sha512-p+dJ+3L/M2o10REG2lh179Blu5+AA51TFkwuUwY7F+vQsF5Z8DIjyNck3yoBBiCxWqhDhsLzC+p9YO7dWqISmw==} + /@iconify-json/tabler@1.1.117: + resolution: {integrity: sha512-RiFbco9Qo0X7jlRFlD2sq9kwLZZ5JFOyacGKi9nzdnao9tV/qFFh1930JDXFay/CTs/jr7+RYPsI+wGFg0jfsA==} dependencies: '@iconify/types': 2.0.0 dev: true @@ -1928,7 +1928,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 dev: true @@ -1949,22 +1949,22 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} dev: true /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jsdevtools/ez-spawn@3.0.4: @@ -2072,7 +2072,7 @@ packages: rollup: 2.79.1 serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.31.1 + terser: 5.31.2 dev: true /@rollup/pluginutils@3.1.0(rollup@2.79.1): @@ -2102,128 +2102,128 @@ packages: rollup: 2.79.1 dev: true - /@rollup/rollup-android-arm-eabi@4.18.0: - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + /@rollup/rollup-android-arm-eabi@4.18.1: + resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.18.0: - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + /@rollup/rollup-android-arm64@4.18.1: + resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.18.0: - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + /@rollup/rollup-darwin-arm64@4.18.1: + resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.18.0: - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + /@rollup/rollup-darwin-x64@4.18.1: + resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.18.0: - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + /@rollup/rollup-linux-arm-gnueabihf@4.18.1: + resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-musleabihf@4.18.0: - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + /@rollup/rollup-linux-arm-musleabihf@4.18.1: + resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.18.0: - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + /@rollup/rollup-linux-arm64-gnu@4.18.1: + resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.18.0: - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + /@rollup/rollup-linux-arm64-musl@4.18.1: + resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + /@rollup/rollup-linux-powerpc64le-gnu@4.18.1: + resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.18.0: - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + /@rollup/rollup-linux-riscv64-gnu@4.18.1: + resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.18.0: - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + /@rollup/rollup-linux-s390x-gnu@4.18.1: + resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.18.0: - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + /@rollup/rollup-linux-x64-gnu@4.18.1: + resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.18.0: - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + /@rollup/rollup-linux-x64-musl@4.18.1: + resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.18.0: - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + /@rollup/rollup-win32-arm64-msvc@4.18.1: + resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.18.0: - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + /@rollup/rollup-win32-ia32-msvc@4.18.1: + resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.18.0: - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + /@rollup/rollup-win32-x64-msvc@4.18.1: + resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} cpu: [x64] os: [win32] requiresBuild: true @@ -2248,8 +2248,8 @@ packages: solid-js: 1.8.18 dev: false - /@solid-primitives/resize-observer@2.0.25(solid-js@1.8.18): - resolution: {integrity: sha512-jVDXkt2MiriYRaz4DYs62185d+6jQ+1DCsR+v7f6XMsIJJuf963qdBRFjtZtKXBaxdPNMyuPeDgf5XQe3EoDJg==} + /@solid-primitives/resize-observer@2.0.26(solid-js@1.8.18): + resolution: {integrity: sha512-KbPhwal6ML9OHeUTZszBbt6PYSMj89d4wVCLxlvDYL4U0+p+xlCEaqz6v9dkCwm/0Lb+Wed7W5T1dQZCP3JUUw==} peerDependencies: solid-js: ^1.6.12 dependencies: @@ -2347,11 +2347,11 @@ packages: /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.14.9 + '@types/node': 20.14.10 dev: true - /@types/node@20.14.9: - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + /@types/node@20.14.10: + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} dependencies: undici-types: 5.26.5 dev: true @@ -2372,7 +2372,7 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 20.14.9 + '@types/node': 20.14.10 dev: true optional: true @@ -2506,8 +2506,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001640 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -2629,15 +2629,15 @@ packages: fill-range: 7.1.1 dev: true - /browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + /browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001640 - electron-to-chromium: 1.4.816 + caniuse-lite: 1.0.30001641 + electron-to-chromium: 1.4.823 node-releases: 2.0.14 - update-browserslist-db: 1.1.0(browserslist@4.23.1) + update-browserslist-db: 1.1.0(browserslist@4.23.2) dev: true /buffer-crc32@0.2.13: @@ -2694,8 +2694,8 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite@1.0.30001640: - resolution: {integrity: sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==} + /caniuse-lite@1.0.30001641: + resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} dev: true /capnp-ts@0.7.0: @@ -2772,7 +2772,7 @@ packages: engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@types/node': 20.14.9 + '@types/node': 20.14.10 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 @@ -2875,7 +2875,7 @@ packages: /core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 dev: true /cross-fetch@3.1.5: @@ -3101,8 +3101,8 @@ packages: jake: 10.9.1 dev: true - /electron-to-chromium@1.4.816: - resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==} + /electron-to-chromium@1.4.823: + resolution: {integrity: sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w==} dev: true /emoji-regex@8.0.0: @@ -3572,13 +3572,12 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.4.2: - resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} - engines: {node: '>=16 || 14 >=14.18'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.0 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 @@ -3952,9 +3951,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -3984,7 +3982,7 @@ packages: dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.4.2 + glob: 10.4.5 js-cookie: 3.0.5 nopt: 7.2.1 dev: true @@ -4141,9 +4139,8 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /lru-cache@10.3.0: - resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} dev: true /lru-cache@5.1.1: @@ -4168,7 +4165,7 @@ packages: /magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /map-obj@1.0.1: @@ -4569,7 +4566,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.3.0 + lru-cache: 10.4.3 minipass: 7.1.2 dev: true @@ -5048,29 +5045,29 @@ packages: fsevents: 2.3.3 dev: true - /rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + /rollup@4.18.1: + resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.0 - '@rollup/rollup-android-arm64': 4.18.0 - '@rollup/rollup-darwin-arm64': 4.18.0 - '@rollup/rollup-darwin-x64': 4.18.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 - '@rollup/rollup-linux-arm-musleabihf': 4.18.0 - '@rollup/rollup-linux-arm64-gnu': 4.18.0 - '@rollup/rollup-linux-arm64-musl': 4.18.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 - '@rollup/rollup-linux-riscv64-gnu': 4.18.0 - '@rollup/rollup-linux-s390x-gnu': 4.18.0 - '@rollup/rollup-linux-x64-gnu': 4.18.0 - '@rollup/rollup-linux-x64-musl': 4.18.0 - '@rollup/rollup-win32-arm64-msvc': 4.18.0 - '@rollup/rollup-win32-ia32-msvc': 4.18.0 - '@rollup/rollup-win32-x64-msvc': 4.18.0 + '@rollup/rollup-android-arm-eabi': 4.18.1 + '@rollup/rollup-android-arm64': 4.18.1 + '@rollup/rollup-darwin-arm64': 4.18.1 + '@rollup/rollup-darwin-x64': 4.18.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 + '@rollup/rollup-linux-arm-musleabihf': 4.18.1 + '@rollup/rollup-linux-arm64-gnu': 4.18.1 + '@rollup/rollup-linux-arm64-musl': 4.18.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 + '@rollup/rollup-linux-riscv64-gnu': 4.18.1 + '@rollup/rollup-linux-s390x-gnu': 4.18.1 + '@rollup/rollup-linux-x64-gnu': 4.18.1 + '@rollup/rollup-linux-x64-musl': 4.18.1 + '@rollup/rollup-win32-arm64-msvc': 4.18.1 + '@rollup/rollup-win32-ia32-msvc': 4.18.1 + '@rollup/rollup-win32-x64-msvc': 4.18.1 fsevents: 2.3.3 dev: true @@ -5426,7 +5423,7 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.2 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -5518,8 +5515,8 @@ packages: unique-string: 2.0.0 dev: true - /terser@5.31.1: - resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} + /terser@5.31.2: + resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -5823,13 +5820,13 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.1.0(browserslist@4.23.1): + /update-browserslist-db@1.1.0(browserslist@4.23.2): resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 dev: true @@ -5929,7 +5926,7 @@ packages: dependencies: esbuild: 0.21.5 postcss: 8.4.39 - rollup: 4.18.0 + rollup: 4.18.1 optionalDependencies: fsevents: 2.3.3 dev: true @@ -6165,8 +6162,8 @@ packages: '@cloudflare/workerd-windows-64': 1.20240701.0 dev: true - /wrangler@3.63.1: - resolution: {integrity: sha512-fxMPNEyDc9pZNtQOuYqRikzv6lL5eP4S1zv7L/kw24uu1cCEmJ39j8bfJGzrAEqKDNsiFXVjEka0RjlpgEVWPg==} + /wrangler@3.63.2: + resolution: {integrity: sha512-c7F46JtBGTIQehTOgfGbxfDMYgO9AjC70CXVSohxHiF9ajHz56HEV2k3aowhJJiP3MBB8sJMm8rdG10f5zUs+w==} engines: {node: '>=16.17.0'} hasBin: true peerDependencies: diff --git a/app/src/app/components/frames/favorites.tsx b/app/src/app/components/frames/favorites.tsx index df797a986..0f97a5262 100644 --- a/app/src/app/components/frames/favorites.tsx +++ b/app/src/app/components/frames/favorites.tsx @@ -11,7 +11,7 @@ export function FavoritesFrame({ }) { return (
-
+
presets.list.length} /> charts organized in a diff --git a/app/src/app/components/frames/history.tsx b/app/src/app/components/frames/history.tsx index f1a9df549..487c6544b 100644 --- a/app/src/app/components/frames/history.tsx +++ b/app/src/app/components/frames/history.tsx @@ -12,7 +12,7 @@ export function HistoryFrame({ }) { return (
b.amount !== a.amount diff --git a/app/src/scripts/datasets/resource.ts b/app/src/scripts/datasets/resource.ts index 7751ed11e..aef38adab 100644 --- a/app/src/scripts/datasets/resource.ts +++ b/app/src/scripts/datasets/resource.ts @@ -1,3 +1,4 @@ +import { requestIdleCallbackPossible } from "/src/env"; import { ONE_HOUR_IN_MS, ONE_MINUTE_IN_MS } from "/src/scripts/utils/time"; import { createRWS } from "/src/solid/rws"; @@ -22,6 +23,13 @@ export function createResourceDataset< "https://api.satonomics.xyz" }${path}`; + const backupURL = `${ + // location.hostname === "localhost" + // ? "http://localhost:3110" + // : "https://api.satonomics.xyz" + "https://api-bkp.satonomics.xyz" + }${path}`; + const fetchedJSONs = new Array( (new Date().getFullYear() - new Date("2009-01-01").getFullYear() + 2) * (scale === "date" ? 1 : 6), @@ -114,6 +122,7 @@ export function createResourceDataset< let cache: Cache | undefined; const urlWithQuery = `${baseURL}?chunk=${id}`; + const backupUrlWithQuery = `${backupURL}?chunk=${id}`; if (!fetched.json()) { try { @@ -138,68 +147,87 @@ export function createResourceDataset< return; } + let fetchedResponse: Response | undefined; + try { - const fetchedResponse = await fetch(urlWithQuery); + fetchedResponse = await fetch(urlWithQuery); if (!fetchedResponse.ok) { + throw Error; + } + } catch { + try { + fetchedResponse = await fetch(backupUrlWithQuery); + } catch { fetched.loading = false; return; } - const clonedResponse = fetchedResponse.clone(); + if (!fetchedResponse || !fetchedResponse.ok) { + fetched.loading = false; + return; + } + } - const json = await convertResponseToJSON(fetchedResponse); + const clonedResponse = fetchedResponse.clone(); - if (json) { - console.log(`fetch: ${path}?chunk=${id}`); + const json = await convertResponseToJSON(fetchedResponse); - const previousMap = fetched.json()?.dataset.map; - const newMap = json.dataset.map; + if (!json) { + fetched.loading = false; + return; + } - const previousLength = Object.keys(previousMap || []).length; - const newLength = Object.keys(newMap).length; + console.log(`fetch: ${path}?chunk=${id}`); - if (!newLength) { + const previousMap = fetched.json()?.dataset.map; + const newMap = json.dataset.map; + + const previousLength = Object.keys(previousMap || []).length; + const newLength = Object.keys(newMap).length; + + if (!newLength) { + fetched.loading = false; + return; + } + + if (previousLength && previousLength === newLength) { + const previousLastValue = Object.values(previousMap || []).at(-1); + const newLastValue = Object.values(newMap).at(-1); + + if (typeof newLastValue === "number") { + if (previousLastValue === newLastValue) { + fetched.at = new Date(); fetched.loading = false; return; } + } else { + const previousLastOHLC = previousLastValue as OHLC; + const newLastOHLC = newLastValue as OHLC; - if (previousLength && previousLength === newLength) { - const previousLastValue = Object.values(previousMap || []).at(-1); - const newLastValue = Object.values(newMap).at(-1); - - if (typeof newLastValue === "number") { - if (previousLastValue === newLastValue) { - fetched.at = new Date(); - fetched.loading = false; - return; - } - } else { - const previousLastOHLC = previousLastValue as OHLC; - const newLastOHLC = newLastValue as OHLC; - - if ( - previousLastOHLC.open === newLastOHLC.open && - previousLastOHLC.high === newLastOHLC.high && - previousLastOHLC.low === newLastOHLC.low && - previousLastOHLC.close === newLastOHLC.close - ) { - fetched.loading = false; - fetched.at = new Date(); - return; - } - } - } - - fetched.json.set(() => json); - - if (cache) { - cache.put(urlWithQuery, clonedResponse); + if ( + previousLastOHLC.open === newLastOHLC.open && + previousLastOHLC.high === newLastOHLC.high && + previousLastOHLC.low === newLastOHLC.low && + previousLastOHLC.close === newLastOHLC.close + ) { + fetched.loading = false; + fetched.at = new Date(); + return; } } - } catch { - fetched.loading = false; - return; + } + + fetched.json.set(() => json); + + function saveToCache() { + cache?.put(urlWithQuery, clonedResponse); + } + + if (requestIdleCallbackPossible) { + requestIdleCallback(saveToCache); + } else { + setTimeout(saveToCache, 1); } fetched.at = new Date(); diff --git a/app/src/scripts/lightweightCharts/baseLine.ts b/app/src/scripts/lightweightCharts/baseLine.ts index f3bbbb85b..8157b994e 100644 --- a/app/src/scripts/lightweightCharts/baseLine.ts +++ b/app/src/scripts/lightweightCharts/baseLine.ts @@ -33,6 +33,13 @@ export const createBaseLineSeries = ({ const bottomLineColor = bottomColor || color || DEFAULT_BASELINE_BOTTOM_COLOR; + function computeColors() { + return { + topLineColor: topLineColor(dark), + bottomLineColor: bottomLineColor(dark), + } as const; + } + const seriesOptions: DeepPartialBaselineOptions = { priceScaleId: "right", ...defaultSeriesOptions, @@ -45,15 +52,13 @@ export const createBaseLineSeries = ({ topFillColor2: transparent, bottomFillColor1: transparent, bottomFillColor2: transparent, + ...computeColors(), }; const series = chart.addBaselineSeries(seriesOptions); createEffect(() => { - series.applyOptions({ - topLineColor: topLineColor(dark), - bottomLineColor: bottomLineColor(dark), - }); + series.applyOptions(computeColors()); }); return series; diff --git a/app/src/scripts/lightweightCharts/candlesticks.ts b/app/src/scripts/lightweightCharts/candlesticks.ts index 836189e6f..d638fc1c5 100644 --- a/app/src/scripts/lightweightCharts/candlesticks.ts +++ b/app/src/scripts/lightweightCharts/candlesticks.ts @@ -11,6 +11,22 @@ export const createCandlesticksSeries = ({ }): [ISeriesApi<"Candlestick">, Color[]] => { const { inverseColors } = options; + const _upColor = inverseColors ? colors.loss : colors.profit; + + const _downColor = inverseColors ? colors.profit : colors.loss; + + function computeColors() { + const upColor = _upColor(dark); + + const downColor = _downColor(dark); + + return { + upColor, + wickUpColor: upColor, + downColor, + wickDownColor: downColor, + } as const; + } const candlestickSeries = chart.addCandlestickSeries({ baseLineVisible: false, borderVisible: false, @@ -20,23 +36,11 @@ export const createCandlesticksSeries = ({ borderDownColor: "", borderUpColor: "", ...options.seriesOptions, + ...computeColors(), }); - const _upColor = inverseColors ? colors.loss : colors.profit; - - const _downColor = inverseColors ? colors.profit : colors.loss; - createEffect(() => { - const upColor = _upColor(dark); - - const downColor = _downColor(dark); - - candlestickSeries.applyOptions({ - upColor, - wickUpColor: upColor, - downColor, - wickDownColor: downColor, - }); + candlestickSeries.applyOptions(computeColors()); }); return [candlestickSeries, [_upColor, _downColor]]; diff --git a/app/src/scripts/lightweightCharts/line.ts b/app/src/scripts/lightweightCharts/line.ts index 149e523d6..197792ea7 100644 --- a/app/src/scripts/lightweightCharts/line.ts +++ b/app/src/scripts/lightweightCharts/line.ts @@ -11,15 +11,20 @@ export const createLineSeries = ({ color: Color; options?: DeepPartialLineOptions; }) => { + function computeColors() { + return { + color: color(dark), + } as const; + } + const series = chart.addLineSeries({ ...defaultSeriesOptions, ...options, + ...computeColors(), }); createEffect(() => { - series.applyOptions({ - color: color(dark), - }); + series.applyOptions(computeColors()); }); return series; diff --git a/assets/v0.0.X.jpg b/assets/v0.0.X.jpg new file mode 100644 index 000000000..1c309fa21 Binary files /dev/null and b/assets/v0.0.X.jpg differ diff --git a/parser/Cargo.lock b/parser/Cargo.lock index 843ab48cb..dfb8c7ae9 100644 --- a/parser/Cargo.lock +++ b/parser/Cargo.lock @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "parser" -version = "0.2.0" +version = "0.2.1" dependencies = [ "allocative", "bincode", @@ -1628,18 +1628,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote",