From d8ca9f059a4d35ca01905cc9d878a12f28932b89 Mon Sep 17 00:00:00 2001 From: ewsgit Date: Sun, 31 May 2026 00:58:34 +0100 Subject: [PATCH] progress on creating a GCI community --- README.md | 2 +- frontend/src/routes/app/community.tsx | 11 + .../src/databaseTables.ts | 52 ++-- generalCommunicationInstance/src/routes.ts | 8 +- .../src/socket/handleSocketMessage.ts | 5 +- .../src/socket/messages/create_community.ts | 28 ++ .../src/socket/socket.ts | 8 +- .../src/socket/types/socketMessageType.ts | 1 + .../src/types/rolePermissions.ts | 5 + generalCommunicationInstance/src/uid.ts | 7 + pnpm-lock.yaml | 290 +++++++++--------- 11 files changed, 238 insertions(+), 179 deletions(-) create mode 100644 generalCommunicationInstance/src/socket/messages/create_community.ts create mode 100644 generalCommunicationInstance/src/types/rolePermissions.ts create mode 100644 generalCommunicationInstance/src/uid.ts diff --git a/README.md b/README.md index ef46cfe..34c680e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Harmony Chat -work in progress discord-like chat application +Work in progress discord-like chat application DO NOT USE BUN, solid-start is bugged without a NODEJS runtime, use pnpm instead of npm for monorepo purposes diff --git a/frontend/src/routes/app/community.tsx b/frontend/src/routes/app/community.tsx index eee8dc1..c9fa609 100644 --- a/frontend/src/routes/app/community.tsx +++ b/frontend/src/routes/app/community.tsx @@ -1,9 +1,13 @@ +import UKButton from "@ewsgit/uikit-solid/src/components/button/UKButton.jsx"; import { SocketMessageType } from "@harmonychat/generalcommunicationinstance/src/socket/types/socketMessageType"; import { type Component, onMount, type ParentProps } from "solid-js"; const Community: Component = (props) => { + let socket: WebSocket; + onMount(() => { const gciWebsocket = new WebSocket("wss://127.0.0.1/gci/websocket"); + socket = gciWebsocket; gciWebsocket.addEventListener("open", () => { gciWebsocket.send(JSON.stringify({ type: SocketMessageType.ConnectionPing })); @@ -19,6 +23,13 @@ const Community: Component = (props) => {
Test CommunityLayout {props.children} + { + socket.send(JSON.stringify({ type: SocketMessageType.CreateCommunity, content: { displayName: "Sample Community Name" } })); + }} + > + Create Community +
); }; diff --git a/generalCommunicationInstance/src/databaseTables.ts b/generalCommunicationInstance/src/databaseTables.ts index 913f824..8710c5d 100644 --- a/generalCommunicationInstance/src/databaseTables.ts +++ b/generalCommunicationInstance/src/databaseTables.ts @@ -2,7 +2,7 @@ import sql from "./database.ts"; // GCI User Sessions // - did TEXT -// - session_token TEXT[] +// - session_token TEXT await sql`CREATE TABLE IF NOT EXISTS gci_user_sessions ( did TEXT, @@ -30,22 +30,22 @@ await sql`CREATE TABLE IF NOT EXISTS gci_user_sessions ( await sql`CREATE TABLE IF NOT EXISTS gci_users ( did TEXT, - member_of_communities TEXT[], - uid TEXT, + member_of_communities TEXT[] DEFAULT '{}', + uid TEXT PRIMARY KEY, display_name TEXT, avatar TEXT, avatar_shape INT, bio TEXT, - links TEXT[], + links TEXT[] DEFAULT '{}', link_to_did BOOLEAN, - display_aliases TEXT[], - friends TEXT[], - badges TEXT[], + display_aliases TEXT[] DEFAULT '{}', + friends TEXT[] DEFAULT '{}', + badges TEXT[] DEFAULT '{}', presence INT, status TEXT, status_duration DATE, - pronouns TEXT, - reviews TEXT[] + pronouns TEXT DEFAULT '{"new user"}', + reviews TEXT[] DEFAULT '{}' )`; // GCI Communities @@ -57,25 +57,28 @@ await sql`CREATE TABLE IF NOT EXISTS gci_users ( await sql`CREATE TABLE IF NOT EXISTS gci_communities ( cid TEXT, - members TEXT[], + members TEXT[] DEFAULT '{}', display_name TEXT, owner TEXT, - join_links TEXT[] + join_links TEXT[] DEFAULT '{}' )`; // GCI Community Invites // - cid TEXT // - invite_code TEXT // - created_by TEXT +// - max_uses INT await sql`CREATE TABLE IF NOT EXISTS gci_community_invites ( cid TEXT, invite_code TEXT, - created_by TEXT + created_by TEXT, + max_uses INT )`; // GCI Community Roles -// - role_id TEXT +// - cid TEXT +// - role_id INT // - display_name TEXT // - revoke_permissions INT[] // - apply_permissions INT[] @@ -84,12 +87,13 @@ await sql`CREATE TABLE IF NOT EXISTS gci_community_invites ( // - name_color TEXT await sql`CREATE TABLE IF NOT EXISTS gci_community_roles ( - role_id TEXT, + cid TEXT, + role_id INT, display_name TEXT, - revoke_permissions INT[], - apply_permissions INT[], + revoke_permissions INT[] DEFAULT '{}', + apply_permissions INT[] DEFAULT '{}', requires_two_factor BOOL, - force_badges INT[], + force_badges INT[] DEFAULT '{}', name_color TEXT )`; @@ -103,7 +107,7 @@ await sql`CREATE TABLE IF NOT EXISTS gci_community_badges ( badge_id INT, texture TEXT, texture_tint_color TEXT, - required_roles INT[] + required_roles INT[] DEFAULT '{}' )`; // GCI Community Audits @@ -118,7 +122,7 @@ await sql`CREATE TABLE IF NOT EXISTS gci_community_badges ( // - target_message INT // - target_interaction INT -await sql`CREATE TABLE IF NOT EXISTS gci_community_badges ( +await sql`CREATE TABLE IF NOT EXISTS gci_community_audits ( cid TEXT, time DATE, action_name TEXT, @@ -132,6 +136,7 @@ await sql`CREATE TABLE IF NOT EXISTS gci_community_badges ( )`; // Community Members +// - cid TEXT // - uid TEXT // - nickname TEXT // - roles INT[] @@ -140,12 +145,13 @@ await sql`CREATE TABLE IF NOT EXISTS gci_community_badges ( // - messages_sent INT // - members_invited INT -await sql`CREATE TABLE IF NOT EXISTS gci_community_badges ( +await sql`CREATE TABLE IF NOT EXISTS gci_community_members ( + cid TEXT, uid TEXT, nickname TEXT, - roles INT[], - channels_shown INT[], - badges INT[], + roles INT[] DEFAULT '{}', + channels_shown INT[] DEFAULT '{}', + badges INT[] DEFAULT '{}', messages_sent INT, members_invited INT )`; diff --git a/generalCommunicationInstance/src/routes.ts b/generalCommunicationInstance/src/routes.ts index 861c688..b0d8178 100644 --- a/generalCommunicationInstance/src/routes.ts +++ b/generalCommunicationInstance/src/routes.ts @@ -14,6 +14,8 @@ export default function main(app: FastifyInstance) { /* Leave empty */ }, wsHandler(socket, req) { + // TODO: verify the session here + socket.on("open", () => { socket.send(JSON.stringify({ message: SocketMessageType.ConnectionEstablished })); }); @@ -21,8 +23,12 @@ export default function main(app: FastifyInstance) { socket.on("message", (message) => { const parsedMessage = JSON.parse(message.toString()); - handleSocketMessage(parsedMessage, socket); + handleSocketMessage(parsedMessage, socket, req); }); }, }); + + app.post("/auth/create", (req, res) => { + return res.send({ missingEndpoint: true }); + }); } diff --git a/generalCommunicationInstance/src/socket/handleSocketMessage.ts b/generalCommunicationInstance/src/socket/handleSocketMessage.ts index 8b8e299..b1a69d1 100644 --- a/generalCommunicationInstance/src/socket/handleSocketMessage.ts +++ b/generalCommunicationInstance/src/socket/handleSocketMessage.ts @@ -1,5 +1,6 @@ import * as fs from "node:fs"; import * as path from "node:path"; +import type { FastifyRequest } from "fastify"; import type { WebSocket } from "ws"; import createHarmonySocket from "./socket.ts"; import type { SocketMessageHandler } from "./types/socketMessageHandler.ts"; @@ -17,7 +18,7 @@ for (const messageHandlerFileName of messageHandlerFiles) { } // biome-ignore lint/suspicious/noExplicitAny: the type of content is not yet known at this stage -export default function handleSocketMessage(message: { type: SocketMessageType; content: any }, socket: WebSocket) { +export default function handleSocketMessage(message: { type: SocketMessageType; content: any }, socket: WebSocket, req: FastifyRequest) { const resolvedHandler = messageHandlers[message.type]; if (resolvedHandler) { @@ -30,7 +31,7 @@ export default function handleSocketMessage(message: { type: SocketMessageType; return; } - resolvedHandler.onMessage(parseResult.data, createHarmonySocket(socket)); + resolvedHandler.onMessage(parseResult.data, createHarmonySocket(socket, req)); } else { console.warn(`Unknown socket message type`, message.type); } diff --git a/generalCommunicationInstance/src/socket/messages/create_community.ts b/generalCommunicationInstance/src/socket/messages/create_community.ts new file mode 100644 index 0000000..36b4e0e --- /dev/null +++ b/generalCommunicationInstance/src/socket/messages/create_community.ts @@ -0,0 +1,28 @@ +import { z } from "zod"; +import sql from "../../database.ts"; +import RolePermissions from "../../types/rolePermissions.ts"; +import createUniqueId from "../../uid.ts"; +import createMessageHandler from "../createSocketMessageHandler.ts"; +import { SocketMessageType } from "../types/socketMessageType.ts"; + +export default createMessageHandler({ + type: SocketMessageType.CreateCommunity, + schema: z.object({ displayName: z.string() }), + async onMessage(content, socket) { + console.log(content); + + const cid = createUniqueId(); + + const transactionSuccess = await sql.begin(async (s) => { + await s`INSERT INTO gci_communities (cid, members, display_name, owner) VALUES (${cid}, ${[socket.user.uid]}, ${content.displayName}, ${socket.user.uid})`; + const OWNER_ROLE_ID = 0; + await s`INSERT INTO gci_community_members (cid, uid, roles) VALUES (${cid}, ${socket.user.uid}, ${[OWNER_ROLE_ID]})`; + await s`INSERT INTO gci_community_roles (cid, role_id, display_name, apply_permissions, name_color) VALUES (${cid}, ${OWNER_ROLE_ID}, ${"Owner"}, ${[RolePermissions.ADMINISTRATOR]}, ${"#998844"})`; + await s`UPDATE gci_users SET member_of_communities = array_append(member_of_communities, ${cid}) WHERE uid = ${socket.user.uid}`; + + return true; + }); + + if (transactionSuccess) socket.reply(SocketMessageType.ConfirmCommunityCreated, { cid }); + }, +}); diff --git a/generalCommunicationInstance/src/socket/socket.ts b/generalCommunicationInstance/src/socket/socket.ts index 179421f..6505dc4 100644 --- a/generalCommunicationInstance/src/socket/socket.ts +++ b/generalCommunicationInstance/src/socket/socket.ts @@ -1,7 +1,8 @@ +import type { FastifyRequest } from "fastify"; import type { WebSocket } from "ws"; import type { SocketMessageType } from "./types/socketMessageType.ts"; -export default function createHarmonySocket(socket: WebSocket) { +export default function createHarmonySocket(socket: WebSocket, req: FastifyRequest) { return { reply(messageType: SocketMessageType, content: ContentType) { console.log(`Client <- Server: ${messageType}`, content ?? ""); @@ -10,6 +11,11 @@ export default function createHarmonySocket(socket: WebSocket) { return; }, rawWebSocket: socket, + rawRequest: req, + user: { + uid: req.cookies.gci_uid || "123", + did: req.cookies.gci_did || "435", + }, }; } diff --git a/generalCommunicationInstance/src/socket/types/socketMessageType.ts b/generalCommunicationInstance/src/socket/types/socketMessageType.ts index 1d5b137..52ae9fc 100644 --- a/generalCommunicationInstance/src/socket/types/socketMessageType.ts +++ b/generalCommunicationInstance/src/socket/types/socketMessageType.ts @@ -4,5 +4,6 @@ export enum SocketMessageType { ConnectionPong = "connection_pong", JoinCommunity = "join_community", CreateCommunity = "create_community", + ConfirmCommunityCreated = "confirm_community_created", LeaveCommunity = "leave_community", } diff --git a/generalCommunicationInstance/src/types/rolePermissions.ts b/generalCommunicationInstance/src/types/rolePermissions.ts new file mode 100644 index 0000000..0a3710a --- /dev/null +++ b/generalCommunicationInstance/src/types/rolePermissions.ts @@ -0,0 +1,5 @@ +enum RolePermissions { + ADMINISTRATOR, +} + +export default RolePermissions; diff --git a/generalCommunicationInstance/src/uid.ts b/generalCommunicationInstance/src/uid.ts new file mode 100644 index 0000000..72669e5 --- /dev/null +++ b/generalCommunicationInstance/src/uid.ts @@ -0,0 +1,7 @@ +let lastGeneratedIdSuffix = 0; + +export default function createUniqueId() { + if (lastGeneratedIdSuffix > 9999) lastGeneratedIdSuffix = 0; + + return Date.now().toString().padStart(16, "0") + lastGeneratedIdSuffix.toString().padStart(8, "0"); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1b6266b..71a0a70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,51 +8,51 @@ importers: packageManagerDependencies: '@pnpm/exe': specifier: ^11.1.1 - version: 11.3.0 + version: 11.5.0 pnpm: specifier: ^11.1.1 - version: 11.3.0 + version: 11.5.0 packages: - '@pnpm/exe@11.3.0': - resolution: {integrity: sha512-1ItrG3GdA8HC7IUMy79SmYqynjjfwXtIMlbpx9MzrU3ZXMYMfw3yuwjIXW7Aw2z0rRxxa2KtTYcLxqjIaVjUmg==} + '@pnpm/exe@11.5.0': + resolution: {integrity: sha512-4hzOXq1HHrNPjwI8k1rt7Ot/Yrdx1JX3pn/L/M95ii1gid1Q6ZK6dVg4+gbSgUdPsYmYDZ4/Yfc0A7vd5C0ndg==} hasBin: true - '@pnpm/linux-arm64@11.3.0': - resolution: {integrity: sha512-+VwGD4/l+TrGKwKeGhSkqzO6eJxK7CkYAoh18ORvBMeYXOlWYF66423VyRbrSK67dtvZ2O0nZ82sA5pxVUUWvQ==} + '@pnpm/linux-arm64@11.5.0': + resolution: {integrity: sha512-NV9HdzzCB0epuI9LqZZeTaqjH3OweNQSQCS76GzEkFxJHS9e5Gvu7tgex91gxVL7bCZ+R4yr/3d3yexBFtr2ug==} cpu: [arm64] os: [linux] - '@pnpm/linux-x64@11.3.0': - resolution: {integrity: sha512-/Csxm8VN18Hcs7vSA83rSk/TTytIVZjgx4K61uLeREClxC7DjAlAc+3jmH9BM615vbUZws821otlWytHRTdVkQ==} + '@pnpm/linux-x64@11.5.0': + resolution: {integrity: sha512-vH83rRx4iPk/bwm9pBVCn+5hXbcQI66I/4zk6Vc09SusJgTqOdbN4U6VhMcGIqSEdr901ksYGCyIbMv7f6Guew==} cpu: [x64] os: [linux] - '@pnpm/linuxstatic-arm64@11.3.0': - resolution: {integrity: sha512-A+wiDUs+8pitTZw0FjWqdqVk4xXvvM3TwVagh6il54EtPr+JS/BkCc5S1lBYJp+ei2H27TBsfXX7Ff/qFfIC2g==} + '@pnpm/linuxstatic-arm64@11.5.0': + resolution: {integrity: sha512-2nOnMW1rSwGv22q2yZz1HlGT3ly/Ij8wUlX0NB4n+Krx7nETRHA3MgWsbkVejxHknDcTulRVudAghuX9rgrXcw==} cpu: [arm64] os: [linux] libc: [musl] - '@pnpm/linuxstatic-x64@11.3.0': - resolution: {integrity: sha512-6TuJt6AlUMZbdC3IQfBVKPgUnX9IDEra5DCS2jMHmu26bJZnzEgee8YLuC3j1/xTPrRVbF9Oo5nMbmxUVOCYew==} + '@pnpm/linuxstatic-x64@11.5.0': + resolution: {integrity: sha512-ONOC1Mg0JusHtjzkRlre9di1QO+GAjy4HP7jMjDx21yGhrSheNdUweTXbekMH1EflRd19kTU6d8M3zewJFPtVg==} cpu: [x64] os: [linux] libc: [musl] - '@pnpm/macos-arm64@11.3.0': - resolution: {integrity: sha512-MXY3ml1zmFn6m710krku0lrTdapuyD44ipKxwaMVylmIJV/U2Co8tielk2p5KEY2pyHBgR8tBTXnvoTnQZ+tvA==} + '@pnpm/macos-arm64@11.5.0': + resolution: {integrity: sha512-od0ALdTxs4A7s5vAH5q2l2phzCJb98+PVOW1rq7BGpWGeYxQ+EwvL+vq0KaO6iLsn/eVVoncCkgZ/k6QNYuTgw==} cpu: [arm64] os: [darwin] - '@pnpm/win-arm64@11.3.0': - resolution: {integrity: sha512-lGjVPngNxeWwlugcO5cAdqWYpnVQ9JMo3gnvUICWsiXRaVi9QYf9aQNNDE8h3E5J+wFQn8zCTv9X3x1eDauFBw==} + '@pnpm/win-arm64@11.5.0': + resolution: {integrity: sha512-9HqbI80FjVVqFx4+EPxYYNfeP9Sx69W6kYqUDvOJn9G7RJ/2NNNQ898cVHTMpXlW1/PrMEcijmdpa/NjZIrWiQ==} cpu: [arm64] os: [win32] - '@pnpm/win-x64@11.3.0': - resolution: {integrity: sha512-mq5PnEYv4sCAbIWG2vuicN4qlnxf+epXVpuoBEWR+BhwUS8Bb6GgCcRfhaj9AZW8cAxIz2XXkgb4OvJRAer/4A==} + '@pnpm/win-x64@11.5.0': + resolution: {integrity: sha512-Q89CQqFGAsWmfvHZs5Kbbar45q3GBYtfAdPUCiVMVNJoLi3dsBS2LCvUq8ak3AufkFDaJBpvhaFcDP2M1NXr3A==} cpu: [x64] os: [win32] @@ -116,45 +116,45 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - pnpm@11.3.0: - resolution: {integrity: sha512-LEA9ZZRScodnKx9wVjQ6H3w2NANqZ/+r/MKz11ldhDdo+HhxSNG1fPeVbJBga70ZKFfDY68Z6W0tDsnsV0HSFQ==} + pnpm@11.5.0: + resolution: {integrity: sha512-2/zE+Bz0hZev1Lw5H/3xLBHxqfuDo5W/prCi2cwv2P/rr9scy9UpYyFT95OQTCYVt/Cf4aNFRz/Rw1hFFyqOsQ==} engines: {node: '>=22.13'} hasBin: true snapshots: - '@pnpm/exe@11.3.0': + '@pnpm/exe@11.5.0': dependencies: '@reflink/reflink': 0.1.19 detect-libc: 2.1.2 optionalDependencies: - '@pnpm/linux-arm64': 11.3.0 - '@pnpm/linux-x64': 11.3.0 - '@pnpm/linuxstatic-arm64': 11.3.0 - '@pnpm/linuxstatic-x64': 11.3.0 - '@pnpm/macos-arm64': 11.3.0 - '@pnpm/win-arm64': 11.3.0 - '@pnpm/win-x64': 11.3.0 + '@pnpm/linux-arm64': 11.5.0 + '@pnpm/linux-x64': 11.5.0 + '@pnpm/linuxstatic-arm64': 11.5.0 + '@pnpm/linuxstatic-x64': 11.5.0 + '@pnpm/macos-arm64': 11.5.0 + '@pnpm/win-arm64': 11.5.0 + '@pnpm/win-x64': 11.5.0 - '@pnpm/linux-arm64@11.3.0': + '@pnpm/linux-arm64@11.5.0': optional: true - '@pnpm/linux-x64@11.3.0': + '@pnpm/linux-x64@11.5.0': optional: true - '@pnpm/linuxstatic-arm64@11.3.0': + '@pnpm/linuxstatic-arm64@11.5.0': optional: true - '@pnpm/linuxstatic-x64@11.3.0': + '@pnpm/linuxstatic-x64@11.5.0': optional: true - '@pnpm/macos-arm64@11.3.0': + '@pnpm/macos-arm64@11.5.0': optional: true - '@pnpm/win-arm64@11.3.0': + '@pnpm/win-arm64@11.5.0': optional: true - '@pnpm/win-x64@11.3.0': + '@pnpm/win-x64@11.5.0': optional: true '@reflink/reflink-darwin-arm64@0.1.19': @@ -194,7 +194,7 @@ snapshots: detect-libc@2.1.2: {} - pnpm@11.3.0: {} + pnpm@11.5.0: {} --- lockfileVersion: '9.0' @@ -209,7 +209,7 @@ importers: dependencies: '@biomejs/biome': specifier: ^2.4.15 - version: 2.4.15 + version: 2.4.16 centralUserBackend: dependencies: @@ -221,7 +221,7 @@ importers: version: 0.3.17 '@biomejs/biome': specifier: ^2.4.15 - version: 2.4.15 + version: 2.4.16 '@fastify/cookie': specifier: ^11.0.2 version: 11.0.2 @@ -264,7 +264,7 @@ importers: version: 0.3.17 '@biomejs/biome': specifier: ^2.4.15 - version: 2.4.15 + version: 2.4.16 '@ewsgit/uikit-solid': specifier: file:./uikit-solid version: file:frontend/uikit-solid(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(postcss@8.5.15)(sass@1.100.0)(terser@5.48.0)(tsx@4.22.3)(typescript@6.0.3)(yaml@2.9.0) @@ -273,7 +273,7 @@ importers: version: link:../generalCommunicationInstance '@material-symbols/svg-700': specifier: ^0.44.6 - version: 0.44.9 + version: 0.44.10 '@solid-primitives/deep': specifier: ^0.3.5 version: 0.3.5(solid-js@1.9.13) @@ -318,7 +318,7 @@ importers: dependencies: '@biomejs/biome': specifier: ^2.4.15 - version: 2.4.15 + version: 2.4.16 '@fastify/cookie': specifier: ^11.0.2 version: 11.0.2 @@ -565,59 +565,59 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@biomejs/biome@2.4.15': - resolution: {integrity: sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==} + '@biomejs/biome@2.4.16': + resolution: {integrity: sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.4.15': - resolution: {integrity: sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==} + '@biomejs/cli-darwin-arm64@2.4.16': + resolution: {integrity: sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.4.15': - resolution: {integrity: sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==} + '@biomejs/cli-darwin-x64@2.4.16': + resolution: {integrity: sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.4.15': - resolution: {integrity: sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==} + '@biomejs/cli-linux-arm64-musl@2.4.16': + resolution: {integrity: sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.4.15': - resolution: {integrity: sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==} + '@biomejs/cli-linux-arm64@2.4.16': + resolution: {integrity: sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.4.15': - resolution: {integrity: sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==} + '@biomejs/cli-linux-x64-musl@2.4.16': + resolution: {integrity: sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.4.15': - resolution: {integrity: sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==} + '@biomejs/cli-linux-x64@2.4.16': + resolution: {integrity: sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.4.15': - resolution: {integrity: sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==} + '@biomejs/cli-win32-arm64@2.4.16': + resolution: {integrity: sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.4.15': - resolution: {integrity: sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==} + '@biomejs/cli-win32-x64@2.4.16': + resolution: {integrity: sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -1139,8 +1139,8 @@ packages: '@fastify/websocket@11.2.0': resolution: {integrity: sha512-3HrDPbAG1CzUCqnslgJxppvzaAZffieOVbLp1DAy1huCSynUWPifSvfdEDUR8HlJLp3sp1A36uOM2tJogADS8w==} - '@ioredis/commands@1.5.1': - resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==} + '@ioredis/commands@1.10.0': + resolution: {integrity: sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1177,8 +1177,8 @@ packages: '@material-symbols/svg-700@0.42.3': resolution: {integrity: sha512-RDD1EO2or1YW4ebdk66gE8RPscHhI5BO13ZrzJ7lOqcyTR5+l3YmA8Pco+TPXtpoDu8yEW/uL0up/dJ8kVM5qQ==} - '@material-symbols/svg-700@0.44.9': - resolution: {integrity: sha512-UjscY8UG1V6ZDwteXNWvOKhyqoVTuyGvrrDwTmafdhRvqqjOtWZv/nAE4fn0JLAIMVHYn7yTomFcNgj7slFftw==} + '@material-symbols/svg-700@0.44.10': + resolution: {integrity: sha512-p6ZjE0+c7JrUTsZhfvuGU8K0w6hEBy8No1OBH1er/EOWfo1hJck5ng4XqKIQ3GodXCDI1g2IbHNUl06xRrsEgQ==} '@napi-rs/wasm-runtime@1.1.4': resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==} @@ -1418,8 +1418,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@29.0.2': - resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==} + '@rollup/plugin-commonjs@29.0.3': + resolution: {integrity: sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -1472,8 +1472,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1789,8 +1789,8 @@ packages: '@ungap/structured-clone@1.3.1': resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} - '@vercel/nft@1.5.0': - resolution: {integrity: sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==} + '@vercel/nft@1.10.2': + resolution: {integrity: sha512-w+WyX5Ulmj4dtTZrxaulqrjaLZHSbnPzx75SJsTNYmotKsqn1JlLnDJa+lz5hn90HJofhl/2MAtw0mCrgM3qYw==} engines: {node: '>=20'} hasBin: true @@ -2048,8 +2048,8 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + cluster-key-slot@1.1.1: + resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} engines: {node: '>=0.10.0'} color-convert@2.0.1: @@ -2234,8 +2234,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.361: - resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==} + electron-to-chromium@1.5.364: + resolution: {integrity: sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -2471,8 +2471,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.3: - resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} hast-util-to-html@9.0.5: @@ -2515,14 +2515,14 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - immutable@5.1.5: - resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} + immutable@5.1.6: + resolution: {integrity: sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==} inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ioredis@5.10.1: - resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==} + ioredis@5.11.0: + resolution: {integrity: sha512-EZBErytyVovD8f6pDfG3Kb37N6Y3lmDA9NNj+4+IP13CzzHGeX+OyeRM2Um13khRzoBSzzL+5lVnCX8V2RLeMg==} engines: {node: '>=12.22.0'} ipaddr.js@2.4.0: @@ -2748,20 +2748,14 @@ packages: resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} engines: {node: '>=14'} - lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - - lodash.isarguments@3.1.0: - resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.5.0: - resolution: {integrity: sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==} + lru-cache@11.5.1: + resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -3446,8 +3440,8 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - streamx@2.25.0: - resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} + streamx@2.26.0: + resolution: {integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -3548,8 +3542,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyclip@0.1.12: - resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==} + tinyclip@0.1.13: + resolution: {integrity: sha512-8OqlXQ35euK9+e7L68u8UwcODxkHoIkjbGsgXuARKNyQ5G6xt8nw1YPeMbxMLgCPFkToU+UEK5j05t2t8edKpQ==} engines: {node: ^16.14.0 || >= 17.3.0} tinyexec@0.3.2: @@ -4309,39 +4303,39 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@biomejs/biome@2.4.15': + '@biomejs/biome@2.4.16': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.4.15 - '@biomejs/cli-darwin-x64': 2.4.15 - '@biomejs/cli-linux-arm64': 2.4.15 - '@biomejs/cli-linux-arm64-musl': 2.4.15 - '@biomejs/cli-linux-x64': 2.4.15 - '@biomejs/cli-linux-x64-musl': 2.4.15 - '@biomejs/cli-win32-arm64': 2.4.15 - '@biomejs/cli-win32-x64': 2.4.15 + '@biomejs/cli-darwin-arm64': 2.4.16 + '@biomejs/cli-darwin-x64': 2.4.16 + '@biomejs/cli-linux-arm64': 2.4.16 + '@biomejs/cli-linux-arm64-musl': 2.4.16 + '@biomejs/cli-linux-x64': 2.4.16 + '@biomejs/cli-linux-x64-musl': 2.4.16 + '@biomejs/cli-win32-arm64': 2.4.16 + '@biomejs/cli-win32-x64': 2.4.16 - '@biomejs/cli-darwin-arm64@2.4.15': + '@biomejs/cli-darwin-arm64@2.4.16': optional: true - '@biomejs/cli-darwin-x64@2.4.15': + '@biomejs/cli-darwin-x64@2.4.16': optional: true - '@biomejs/cli-linux-arm64-musl@2.4.15': + '@biomejs/cli-linux-arm64-musl@2.4.16': optional: true - '@biomejs/cli-linux-arm64@2.4.15': + '@biomejs/cli-linux-arm64@2.4.16': optional: true - '@biomejs/cli-linux-x64-musl@2.4.15': + '@biomejs/cli-linux-x64-musl@2.4.16': optional: true - '@biomejs/cli-linux-x64@2.4.15': + '@biomejs/cli-linux-x64@2.4.16': optional: true - '@biomejs/cli-win32-arm64@2.4.15': + '@biomejs/cli-win32-arm64@2.4.16': optional: true - '@biomejs/cli-win32-x64@2.4.15': + '@biomejs/cli-win32-x64@2.4.16': optional: true '@bufbuild/protobuf@2.12.0': {} @@ -4683,7 +4677,7 @@ snapshots: - bufferutil - utf-8-validate - '@ioredis/commands@1.5.1': {} + '@ioredis/commands@1.10.0': {} '@isaacs/cliui@8.0.2': dependencies: @@ -4737,7 +4731,7 @@ snapshots: '@material-symbols/svg-700@0.42.3': {} - '@material-symbols/svg-700@0.44.9': {} + '@material-symbols/svg-700@0.44.10': {} '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: @@ -4897,9 +4891,9 @@ snapshots: optionalDependencies: rollup: 4.60.4 - '@rollup/plugin-commonjs@29.0.2(rollup@4.60.4)': + '@rollup/plugin-commonjs@29.0.3(rollup@4.60.4)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.4) @@ -4911,7 +4905,7 @@ snapshots: '@rollup/plugin-inject@5.0.5(rollup@4.60.4)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: @@ -4919,13 +4913,13 @@ snapshots: '@rollup/plugin-json@6.1.0(rollup@4.60.4)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) optionalDependencies: rollup: 4.60.4 '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.4)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 @@ -4935,7 +4929,7 @@ snapshots: '@rollup/plugin-replace@6.0.3(rollup@4.60.4)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) magic-string: 0.30.21 optionalDependencies: rollup: 4.60.4 @@ -4948,7 +4942,7 @@ snapshots: optionalDependencies: rollup: 4.60.4 - '@rollup/pluginutils@5.3.0(rollup@4.60.4)': + '@rollup/pluginutils@5.4.0(rollup@4.60.4)': dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 @@ -5309,10 +5303,10 @@ snapshots: '@ungap/structured-clone@1.3.1': {} - '@vercel/nft@1.5.0(rollup@4.60.4)': + '@vercel/nft@1.10.2(rollup@4.60.4)': dependencies: '@mapbox/node-pre-gyp': 2.0.3 - '@rollup/pluginutils': 5.3.0(rollup@4.60.4) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) acorn: 8.16.0 acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 @@ -5461,7 +5455,7 @@ snapshots: bare-stream@2.13.1(bare-events@2.8.3): dependencies: - streamx: 2.25.0 + streamx: 2.26.0 teex: 1.0.1 optionalDependencies: bare-events: 2.8.3 @@ -5496,7 +5490,7 @@ snapshots: dependencies: baseline-browser-mapping: 2.10.32 caniuse-lite: 1.0.30001793 - electron-to-chromium: 1.5.361 + electron-to-chromium: 1.5.364 node-releases: 2.0.46 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -5569,7 +5563,7 @@ snapshots: clsx@2.1.1: {} - cluster-key-slot@1.1.2: {} + cluster-key-slot@1.1.1: {} color-convert@2.0.1: dependencies: @@ -5692,7 +5686,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.361: {} + electron-to-chromium@1.5.364: {} emoji-regex-xs@1.0.0: {} @@ -6005,7 +5999,7 @@ snapshots: has-flag@4.0.0: {} - hasown@2.0.3: + hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -6058,18 +6052,16 @@ snapshots: ignore@7.0.5: {} - immutable@5.1.5: {} + immutable@5.1.6: {} inherits@2.0.4: {} - ioredis@5.10.1: + ioredis@5.11.0: dependencies: - '@ioredis/commands': 1.5.1 - cluster-key-slot: 1.1.2 + '@ioredis/commands': 1.10.0 + cluster-key-slot: 1.1.1 debug: 4.4.3 denque: 2.1.0 - lodash.defaults: 4.2.0 - lodash.isarguments: 3.1.0 redis-errors: 1.2.0 redis-parser: 3.0.0 standard-as-callback: 2.1.0 @@ -6082,7 +6074,7 @@ snapshots: is-core-module@2.16.2: dependencies: - hasown: 2.0.3 + hasown: 2.0.4 is-docker@3.0.0: {} @@ -6243,7 +6235,7 @@ snapshots: node-forge: 1.4.0 pathe: 2.0.3 std-env: 4.1.0 - tinyclip: 0.1.12 + tinyclip: 0.1.13 ufo: 1.6.4 untun: 0.1.3 uqr: 0.1.3 @@ -6256,15 +6248,11 @@ snapshots: pkg-types: 2.3.1 quansync: 0.2.11 - lodash.defaults@4.2.0: {} - - lodash.isarguments@3.1.0: {} - lodash@4.18.1: {} lru-cache@10.4.3: {} - lru-cache@11.5.0: {} + lru-cache@11.5.1: {} lru-cache@5.1.1: dependencies: @@ -6369,13 +6357,13 @@ snapshots: dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@rollup/plugin-alias': 6.0.0(rollup@4.60.4) - '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.4) + '@rollup/plugin-commonjs': 29.0.3(rollup@4.60.4) '@rollup/plugin-inject': 5.0.5(rollup@4.60.4) '@rollup/plugin-json': 6.1.0(rollup@4.60.4) '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.4) '@rollup/plugin-replace': 6.0.3(rollup@4.60.4) '@rollup/plugin-terser': 1.0.0(rollup@4.60.4) - '@vercel/nft': 1.5.0(rollup@4.60.4) + '@vercel/nft': 1.10.2(rollup@4.60.4) archiver: 7.0.1 c12: 3.3.4(magicast@0.5.3) chokidar: 5.0.0 @@ -6399,7 +6387,7 @@ snapshots: h3: 1.15.11 hookable: 5.5.3 httpxy: 0.5.3 - ioredis: 5.10.1 + ioredis: 5.11.0 jiti: 2.7.0 klona: 2.0.6 knitwork: 1.3.0 @@ -6432,7 +6420,7 @@ snapshots: unenv: 2.0.0-rc.24 unimport: 6.3.0(rolldown@1.0.2) unplugin-utils: 0.3.1 - unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1) + unstorage: 1.17.5(db0@0.3.4)(ioredis@5.11.0) untyped: 2.0.0 unwasm: 0.5.3 youch: 4.1.1 @@ -6547,7 +6535,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.5.0 + lru-cache: 11.5.1 minipass: 7.1.3 path-to-regexp@8.4.2: {} @@ -6860,7 +6848,7 @@ snapshots: dependencies: '@bufbuild/protobuf': 2.12.0 colorjs.io: 0.5.2 - immutable: 5.1.5 + immutable: 5.1.6 rxjs: 7.8.2 supports-color: 8.1.1 sync-child-process: 1.0.2 @@ -6888,7 +6876,7 @@ snapshots: sass@1.100.0: dependencies: chokidar: 5.0.0 - immutable: 5.1.5 + immutable: 5.1.6 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 @@ -7022,7 +7010,7 @@ snapshots: stream-shift@1.0.3: {} - streamx@2.25.0: + streamx@2.26.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -7105,7 +7093,7 @@ snapshots: b4a: 1.8.1 bare-fs: 4.7.1 fast-fifo: 1.3.2 - streamx: 2.25.0 + streamx: 2.26.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -7121,7 +7109,7 @@ snapshots: teex@1.0.1: dependencies: - streamx: 2.25.0 + streamx: 2.26.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -7158,7 +7146,7 @@ snapshots: tiny-invariant@1.3.3: {} - tinyclip@0.1.12: {} + tinyclip@0.1.13: {} tinyexec@0.3.2: {} @@ -7314,19 +7302,19 @@ snapshots: picomatch: 4.0.4 webpack-virtual-modules: 0.6.2 - unstorage@1.17.5(db0@0.3.4)(ioredis@5.10.1): + unstorage@1.17.5(db0@0.3.4)(ioredis@5.11.0): dependencies: anymatch: 3.1.3 chokidar: 5.0.0 destr: 2.0.5 h3: 1.15.11 - lru-cache: 11.5.0 + lru-cache: 11.5.1 node-fetch-native: 1.6.7 ofetch: 1.5.1 ufo: 1.6.4 optionalDependencies: db0: 0.3.4 - ioredis: 5.10.1 + ioredis: 5.11.0 untun@0.1.3: dependencies: -- 2.51.2