diff --git a/.github/workflows/build-and-deploy.yaml b/.github/workflows/build-and-deploy.yaml new file mode 100644 index 0000000..ecbcd14 --- /dev/null +++ b/.github/workflows/build-and-deploy.yaml @@ -0,0 +1,52 @@ +name: Deploy static content to Pages + +on: + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: write + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build-and-deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Set Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + + - name: Run install + uses: borales/actions-yarn@v4 + with: + cmd: install # will run `yarn install` command + + - name: Build production bundle + uses: borales/actions-yarn@v4 + with: + cmd: build # will run `yarn build` command + + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: 'build' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 + diff --git a/package.json b/package.json index fc94796..596310a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "devDependencies": { "@sveltejs/adapter-static": "^2.0.3", "@sveltejs/kit": "^1.22.6", + "@sveltejs/vite-plugin-svelte": "^2.4.5", "@typescript-eslint/eslint-plugin": "^6.5.0", "@typescript-eslint/parser": "^6.5.0", "eslint": "^8.48.0", @@ -21,8 +22,7 @@ "prettier-plugin-svelte": "^3.0.3", "svelte": "^4.2.0", "svelte-check": "^3.5.0", - "vite": "^4.4.9", - "@sveltejs/vite-plugin-svelte": "^2.4.5" + "vite": "^4.4.9" }, "prettier": { "printWidth": 100, @@ -32,6 +32,7 @@ "dependencies": { "axios": "^1.5.0", "moment": "^2.29.4", + "node-fetch": "^3.3.2", "uikit": "^3.16.26", "uikit-icons": "^0.5.0" } diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 0a43413..ec45a14 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -9,7 +9,7 @@ import AccountView from '../ui/AccountView.svelte' import BoundaryStatus from '../ui/BoundaryStatus.svelte' // import GovEvents from '../ui/GovEvents.svelte' - + import TransactionTable from '../ui/TransactionTable.svelte' onMount(async () => { await initApi() // ONLY DO THIS ONCE ON LOAD @@ -52,5 +52,7 @@
+
+
diff --git a/src/store/index.ts b/src/store/index.ts index 9ba8d84..152f949 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -8,11 +8,13 @@ import type { SystemInfo, ProofOfFee, govEventData, + Transaction, } from '../types' import * as systemPayloads from '../api/payloads/system' import * as validatorPayloads from '../api/payloads/validators' import * as commonPayloads from '../api/payloads/common' import { govEvents } from '../api/payloads/events' +import { fetchTransactions } from './transactions.js' export interface User { address: string @@ -32,7 +34,7 @@ export const indexDataStore = writable() export const valDataStore = writable() export const selectedAccount = writable({ address: '' }) export const govStore = writable() - +export const transactions = writable([]) export const setAccount = (address: string) => { selectedAccount.set({ address, @@ -158,6 +160,7 @@ export const refresh = async () => { getIndexData() getSystemInfo() getValidators() + fetchTransactions() getEventList(govEvents()).then((res) => govStore.set(res)) } catch (error) { console.error(`Failed to refresh: ${error}`) diff --git a/src/store/transactions.js b/src/store/transactions.js new file mode 100644 index 0000000..b9e34d2 --- /dev/null +++ b/src/store/transactions.js @@ -0,0 +1,86 @@ +import { transactions } from '.' + +async function queryTransactions(offset = 0, limit = 100) { + const transactions = await fetch('https://api.0l.fyi/graphql', { + headers: { + accept: '*/*', + 'accept-language': 'en,zh-CN;q=0.9,zh;q=0.8,eu;q=0.7', + 'content-type': 'application/json', + 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-site', + }, + mode: 'cors', + credentials: 'omit', + body: JSON.stringify({ + operationName: 'GetUserTransactions', + variables: { + limit: limit, + offset: offset, + }, + query: + 'query GetUserTransactions($limit: Int!, $offset: Int!) {\n userTransactions(limit: $limit, offset: $offset, order: "DESC") {\n size\n items {\n version\n sender\n moduleAddress\n moduleName\n functionName\n timestamp\n success\n __typename\n }\n __typename\n }\n}', + }), + method: 'POST', + }).then((res) => res.json()) + return transactions.data.userTransactions +} + +async function getTransactionDetail(version) { + const data = await fetch(`https://rpc.0l.fyi/v1/transactions/by_version/${version}`).then((res) => + res.json(), + ) + return data.payload.arguments +} +let isFetching = false; +export async function fetchTransactions() { + if (isFetching) return; + const endTime = (Date.now() - 3 * 24 * 60 * 60 * 1000) * 1_000; + const minAmount = 1_000 * 1e6; + const limit = 200 + let page = 0 + const { size } = await queryTransactions(0, 1) + const totalPage = Math.ceil(size / limit) + let allTransferList = [] + isFetching = true; + for (page = 0; page < totalPage; page++) { + try { + const { items } = await queryTransactions(page * limit, limit) + if (items[0] && items[0].timestamp < endTime) { + break + } + let transferList = items.filter( + (item) => + item.functionName === 'transfer' && item.success && item.timestamp >= endTime, + ) + + const details = await Promise.all( + transferList.map((item) => getTransactionDetail(item.version)), + ) + + transferList = transferList.map((item, index) => { + const [receiver, amount] = details[index] + return { + sender: item.sender.toLowerCase(), + receiver: receiver.slice(2).toLowerCase(), + amount: amount, + ledger_version: item.version, + ledger_timestamp: item.timestamp.toString(), + } + }) + allTransferList = allTransferList.concat(transferList.filter(t => t.amount >= minAmount)); + console.log(`${page + 1}/${totalPage}`) + } catch (error) { + console.log('Fetch error, will retry after 3s') + await new Promise((resolve) => setTimeout(resolve, 3000)) + page-- // Retry the same page + } + } + transactions.set(allTransferList) + isFetching = false +} + +// fetchTransactions() diff --git a/src/types/index.ts b/src/types/index.ts index 09056c4..654aba9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -40,6 +40,7 @@ export interface SlowWalletBalance { unlocked: number total: number } + export interface UserAccount { address: string in_val_set?: boolean @@ -53,6 +54,7 @@ export interface valData { eligible_validators: string[] // Array of addresses current_profiles: UserAccount[] } + export interface govEventData { data: { num_votes: string @@ -62,3 +64,11 @@ export interface govEventData { voter: string } } + +export interface Transaction { + sender: string, + receiver: string, + amount: number, + ledger_version: number, + ledger_timestamp: number, +} diff --git a/src/ui/TransactionTable.svelte b/src/ui/TransactionTable.svelte new file mode 100644 index 0000000..25a08ba --- /dev/null +++ b/src/ui/TransactionTable.svelte @@ -0,0 +1,32 @@ + + +
+ + + + + + + + + + + + + {#if $transactions.length > 0} + {#each $transactions as tx} + + + + + + + + {/each} + {/if} + +
SenderReceiverAmountVersionTimestamp
{tx.sender}{tx.receiver}{scaleCoin(tx.amount)}{tx.ledger_version}{new Date(Math.floor(tx.ledger_timestamp / 1_000)).toLocaleString()}
+
diff --git a/src/ui/Transactions.svelte b/src/ui/Transactions.svelte new file mode 100644 index 0000000..25c1818 --- /dev/null +++ b/src/ui/Transactions.svelte @@ -0,0 +1,45 @@ + + +
+ {#if $valDataStore && $valDataStore.current_list} +
+ Validator Set ({($valDataStore && + $valDataStore.current_list && + $valDataStore.current_list.length) || + 0}): +
+ {/if} + + {#if $systemInfo} + Epoch Reward: {scaleCoin($systemInfo.consensus_reward)} + {/if} + + {#if profiles && profiles.length > 0} + + {:else} + loading ... + {/if} +
diff --git a/yarn.lock b/yarn.lock index 41c35fd..4c99e6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,12 +32,12 @@ "@esbuild/darwin-arm64@0.18.16": version "0.18.16" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz#3c5a083e6e08a50f478fa243939989d86be1c6bf" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz" integrity sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw== "@esbuild/darwin-x64@0.18.16": version "0.18.16" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz#a8f3b61bee2807131cbe28eb164ad2b0333b59f5" integrity sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA== "@esbuild/freebsd-arm64@0.18.16": @@ -157,6 +157,11 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz" integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + "@humanwhocodes/config-array@^0.11.10": version "0.11.10" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" @@ -258,53 +263,41 @@ integrity sha512-VUqTfXsxYGugCpMqQv1U0LIdbR3S5nBkMMDmpjGVJyM6Q2jHVMFtdWJCkeHMySc6mZxJ+0eZK3T7IgmUCDrcUQ== "@sveltejs/kit@^1.22.6": - version "1.22.6" - resolved "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.22.6.tgz" - integrity sha512-SDKxI/QpsReCwIn5czjT53fKlPBybbmMk67d317gUqfeORroBAFN1Z6s/x0E1JYi+04i7kKllS+Sz9wVfmUkAQ== + version "1.30.4" + resolved "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.30.4.tgz" + integrity sha512-JSQIQT6XvdchCRQEm7BABxPC56WP5RYVONAi+09S8tmzeP43fBsRlr95bFmsTQM2RHBldfgQk+jgdnsKI75daA== dependencies: - "@sveltejs/vite-plugin-svelte" "^2.4.1" + "@sveltejs/vite-plugin-svelte" "^2.5.0" "@types/cookie" "^0.5.1" cookie "^0.5.0" devalue "^4.3.1" esm-env "^1.0.0" kleur "^4.1.5" magic-string "^0.30.0" - mime "^3.0.0" + mrmime "^1.0.1" sade "^1.8.1" set-cookie-parser "^2.6.0" sirv "^2.0.2" - undici "~5.23.0" + tiny-glob "^0.2.9" + undici "^5.28.3" -"@sveltejs/vite-plugin-svelte-inspector@^1.0.3": - version "1.0.3" - resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz" - integrity sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA== - dependencies: - debug "^4.3.4" - -"@sveltejs/vite-plugin-svelte@^2.4.1": - version "2.4.3" - resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.3.tgz" - integrity sha512-NY2h+B54KHZO3kDURTdARqthn6D4YSIebtfW75NvZ/fwyk4G+AJw3V/i0OBjyN4406Ht9yZcnNWMuRUFnDNNiA== +"@sveltejs/vite-plugin-svelte-inspector@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz" + integrity sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ== dependencies: - "@sveltejs/vite-plugin-svelte-inspector" "^1.0.3" debug "^4.3.4" - deepmerge "^4.3.1" - kleur "^4.1.5" - magic-string "^0.30.1" - svelte-hmr "^0.15.2" - vitefu "^0.2.4" -"@sveltejs/vite-plugin-svelte@^2.4.5": - version "2.4.5" - resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.5.tgz" - integrity sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ== +"@sveltejs/vite-plugin-svelte@^2.4.5", "@sveltejs/vite-plugin-svelte@^2.5.0": + version "2.5.3" + resolved "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.5.3.tgz" + integrity sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w== dependencies: - "@sveltejs/vite-plugin-svelte-inspector" "^1.0.3" + "@sveltejs/vite-plugin-svelte-inspector" "^1.0.4" debug "^4.3.4" deepmerge "^4.3.1" kleur "^4.1.5" - magic-string "^0.30.2" + magic-string "^0.30.3" svelte-hmr "^0.15.3" vitefu "^0.2.4" @@ -325,7 +318,7 @@ "@types/prop-types@*": version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz" integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== "@types/pug@^2.0.6": @@ -335,7 +328,7 @@ "@types/react@^16.9.11": version "16.14.52" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.52.tgz#d6c31c3f69cf6ae10718d0a07a2ef6f2ebafc490" + resolved "https://registry.npmjs.org/@types/react/-/react-16.14.52.tgz" integrity sha512-4+ZN73hgRW3Gang3QMqWjrqPPkf+lWZYiyG4uXtUbpd+7eiBDw6Gemila6rXDd8DorADupTiIERL6Mb5BQTF2w== dependencies: "@types/prop-types" "*" @@ -344,7 +337,7 @@ "@types/scheduler@*": version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== "@types/semver@^7.5.0": @@ -517,11 +510,11 @@ asynckit@^0.4.0: integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== axios@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + version "1.6.7" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.4" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -562,13 +555,6 @@ buffer-crc32@^0.2.5: resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -671,9 +657,14 @@ cssesc@^3.0.0: csstype@^3.0.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" @@ -924,6 +915,14 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -991,10 +990,10 @@ flatted@^3.2.7: resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== form-data@^4.0.0: version "4.0.0" @@ -1005,6 +1004,13 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" @@ -1070,6 +1076,11 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" +globalyzer@0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" @@ -1093,6 +1104,11 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globrex@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" @@ -1182,7 +1198,7 @@ isexe@^2.0.0: "js-tokens@^3.0.0 || ^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: @@ -1270,7 +1286,7 @@ lodash.merge@^4.6.2: loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" @@ -1289,14 +1305,14 @@ magic-string@^0.27.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" -magic-string@^0.30.0, magic-string@^0.30.1: +magic-string@^0.30.0: version "0.30.1" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz" integrity sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -magic-string@^0.30.2: +magic-string@^0.30.3: version "0.30.3" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz" integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== @@ -1340,11 +1356,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" @@ -1379,7 +1390,7 @@ mri@^1.1.0: resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -mrmime@^1.0.0: +mrmime@^1.0.0, mrmime@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== @@ -1399,6 +1410,20 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -1406,7 +1431,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0: @@ -1583,7 +1608,7 @@ prettier@^3.0.2: prop-types@^15.6.2: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" @@ -1607,12 +1632,12 @@ queue-microtask@^1.2.2: react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react@^16.11.0: version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + resolved "https://registry.npmjs.org/react/-/react-16.14.0.tgz" integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== dependencies: loose-envify "^1.1.0" @@ -1739,11 +1764,6 @@ source-map-js@^1.0.1, source-map-js@^1.0.2: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -1802,11 +1822,6 @@ svelte-check@^3.5.0: postcss "^8.4.28" postcss-scss "^4.0.7" -svelte-hmr@^0.15.2: - version "0.15.2" - resolved "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.2.tgz" - integrity sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg== - svelte-hmr@^0.15.3: version "0.15.3" resolved "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz" @@ -1847,6 +1862,14 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -1890,7 +1913,7 @@ typescript@^5.0.3: uikit-icons@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/uikit-icons/-/uikit-icons-0.5.0.tgz#e6bed31aac96c669943ae8a717328aa8e2a45ae3" + resolved "https://registry.npmjs.org/uikit-icons/-/uikit-icons-0.5.0.tgz" integrity sha512-KOXrEp6pKp6i9GvVdsi0P0dVOxd0QddCsvWcMTezyiHe44X6V2Uwj1mU5WX5bs6balVbxSKULkXlRRngYh0DrA== dependencies: "@types/react" "^16.9.11" @@ -1901,12 +1924,12 @@ uikit@^3.16.26: resolved "https://registry.npmjs.org/uikit/-/uikit-3.16.26.tgz" integrity sha512-5NCaHqgYIzTVDMxix9tUb4pJn478GdIxEodWuWy/eMf3mi7EWZPyVQxPEos71H0hrr7xC6i0TK6tjOSfF7gkOA== -undici@~5.23.0: - version "5.23.0" - resolved "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz" - integrity sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg== +undici@^5.28.3: + version "5.28.3" + resolved "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== dependencies: - busboy "^1.6.0" + "@fastify/busboy" "^2.0.0" universalify@^0.1.0: version "0.1.2" @@ -1926,9 +1949,9 @@ util-deprecate@^1.0.2: integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== vite@^4.4.9: - version "4.4.9" - resolved "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz" - integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + version "4.5.2" + resolved "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz" + integrity sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w== dependencies: esbuild "^0.18.10" postcss "^8.4.27" @@ -1941,6 +1964,11 @@ vitefu@^0.2.4: resolved "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz" integrity sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g== +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"