Openstatus www.openstatus.dev

๐Ÿš€ webhook (#1224)

* ๐Ÿšง wip webhook

* ci: apply automated fixes

* ๐Ÿšง headers

* ci: apply automated fixes

* ๐Ÿš€ webhook

* ๐Ÿš€ webhook

* ๐Ÿงน clean

* ๐Ÿ–Š๏ธ docs

* ci: apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

authored by

Thibault Le Ouay
autofix-ci[bot]
and committed by
GitHub
1672d28d 14eed218

+1413 -871
+5 -5
apps/docs/package.json
··· 11 11 }, 12 12 "dependencies": { 13 13 "@astrojs/check": "0.9.4", 14 - "@astrojs/react": "4.2.0", 14 + "@astrojs/react": "4.2.3", 15 15 "@astrojs/sitemap": "3.2.1", 16 - "@astrojs/starlight": "0.32.1", 17 - "@astrojs/starlight-tailwind": "3.0.0", 16 + "@astrojs/starlight": "0.32.6", 17 + "@astrojs/starlight-tailwind": "3.0.1", 18 18 "@astrojs/tailwind": "6.0.0", 19 - "astro": "5.3.1", 19 + "astro": "5.6.1", 20 20 "sharp": "0.33.5", 21 21 "starlight-showcases": "0.3.0", 22 - "starlight-sidebar-topics": "0.4.1", 22 + "starlight-sidebar-topics": "0.6.0", 23 23 "unplugin-icons": "22.1.0" 24 24 }, 25 25 "devDependencies": {
+3
apps/docs/src/content/docs/alerting/overview.mdx
··· 26 26 <LinkCard title="Slack ๐Ÿ“ฃ" href="/alerting/providers/slack" description="Get notified on Slack" /> 27 27 <LinkCard title="Discord ๐Ÿค–" href="/alerting/providers/discord" description="Get notified on Discord" /> 28 28 <LinkCard title="SMS ๐Ÿ“ฑ" href="/alerting/providers/sms" description="Receive a text message" /> 29 + <LinkCard title="ntfy.sh ๐Ÿ””" href="/alerting/providers/ntfy" description="Receive a ntfy.sh notification" /> 29 30 <LinkCard title="Pagerduty ๐Ÿ“Ÿ" href="/alerting/providers/pagerduty" description="Receive a pagerduty notification"/ > 30 31 <LinkCard title="Phone ๐Ÿ“ž" href="/alerting/providers/phone-call" description="Get called on your phone" /> 31 32 <LinkCard title="Telegram ๐Ÿ“ก" href="/alerting/providers/telegram" description="Get notified on Telegram" /> 33 + <LinkCard title="Webhook ๐ŸŒ" href="/alerting/providers/webhook" description="Get notified by webhook" /> 34 + 32 35 </CardGrid>
+1 -2
apps/docs/src/content/docs/alerting/providers/ntfy.mdx
··· 7 7 8 8 9 9 10 - 11 10 Go to the Notifications Page . Select `ntfy.sh` from the list of available integrations. 12 11 13 - Enter your ntfy topic (required), your custom server URL, and your bearer token. 12 + Enter your ntfy topic (required), your custom server URL, and your bearer token.
+101
apps/docs/src/content/docs/alerting/providers/webhook.mdx
··· 1 + --- 2 + title: Webhook 3 + description: "How to set up Webhook notifications in OpenStatus to get alerts when your synthetic check fail" 4 + --- 5 + ## Setting Up Webhook Notifications 6 + To set up Webhook notifications, follow these steps: 7 + 8 + 1. **Access the Notifications Tab**\ 9 + Navigate to your notifications tab within the application. 10 + 11 + 2. **Add a New Notification**\ 12 + Click on the "Add Notification" button and select Webhook as the notification type. 13 + 14 + 3. **Provide Notification URL**\ 15 + Enter the URL where OpenStatus will send the notification payload. This URL should be publicly accessible and capable of handling incoming POST requests. 16 + 17 + 4. **Optional: Add Custom Headers**\ 18 + If needed, you can include custom headers in your request for additional context or authentication. 19 + 20 + 21 + ## Notification Payloads 22 + 23 + 24 + OpenStatus sends different payloads depending on the status of the monitor. Below are the payload structures for both 25 + recovery and failure notifications. 26 + 27 + 28 + ### Payload for Monitor Recovery 29 + When the monitor recovers, you will receive a notification with the following payload: 30 + ```json 31 + { 32 + "monitor": { 33 + "id": 1, 34 + "name": "test", 35 + "url": "http://openstat.us" 36 + }, 37 + "cronTimestamp": 1744023705307, 38 + "status": "recovered", 39 + "statusCode": 200, 40 + "latency": 1337 41 + } 42 + ``` 43 + 44 + 45 + Fields Explanation: 46 + - monitor: Contains details about the monitor. 47 + - id: Unique identifier for the monitor. 48 + - name: Name of the monitor. 49 + - url: The URL being monitored. 50 + - cronTimestamp: The timestamp when the check was executed, in milliseconds since epoch. 51 + - status: Indicates the current status of the monitor (in this case, "recovered"). 52 + - statusCode: The HTTP status code returned by the monitored service. 53 + - latency: The time taken to complete the check, in milliseconds. 54 + 55 + 56 + ### Payload for Monitor Failure 57 + 58 + In the event of a monitor failure, the notification will include the following payload: 59 + ```json 60 + { 61 + "monitor": { 62 + "id": 1, 63 + "name": "test", 64 + "url": "http://openstat.us" 65 + }, 66 + "cronTimestamp": 1744023705307, 67 + "status": "error", 68 + "errorMessage": "Connection refused" 69 + } 70 + ``` 71 + 72 + Fields Explanation: 73 + 74 + - monitor: Contains details about the monitor. 75 + - id: Unique identifier for the monitor. 76 + - name: Name of the monitor. 77 + - url: The URL being monitored. 78 + - cronTimestamp: The timestamp when the check was executed, in milliseconds since epoch. 79 + - status: Indicates the current status of the monitor (in this case, "error"). 80 + - errorMessage: A description of the error encountered during the check. 81 + 82 + 83 + ### Zod Schema 84 + 85 + 86 + ```ts 87 + import { z } from "zod"; 88 + 89 + export const PayloadSchema = z.object({ 90 + monitor: z.object({ 91 + id: z.number(), 92 + name: z.string(), 93 + url: z.string(), 94 + }), 95 + cronTimestamp: z.number(), 96 + status: z.enum(["degraded", "error", "recovered"]), 97 + statusCode: z.number().optional(), 98 + latency: z.number().optional(), 99 + errorMessage: z.string().optional(), 100 + }); 101 + ````
+1 -1
apps/server/.dockerignore
··· 1 - # This file is generated by Dofigen v2.2.0 1 + # This file is generated by Dofigen v2.3.2 2 2 # See https://github.com/lenra-io/dofigen 3 3 4 4 node_modules
+2 -8
apps/server/Dockerfile
··· 1 - # syntax=docker/dockerfile:1.7 2 - # This file is generated by Dofigen v2.2.0 1 + # syntax=docker/dockerfile:1.11 2 + # This file is generated by Dofigen v2.3.2 3 3 # See https://github.com/lenra-io/dofigen 4 4 5 5 # install ··· 12 12 --mount=type=bind,target=packages/db/package.json,source=packages/db/package.json \ 13 13 --mount=type=bind,target=packages/emails/package.json,source=packages/emails/package.json \ 14 14 --mount=type=bind,target=packages/error/package.json,source=packages/error/package.json \ 15 - --mount=type=bind,target=packages/notifications/discord/package.json,source=packages/notifications/discord/package.json \ 16 - --mount=type=bind,target=packages/notifications/email/package.json,source=packages/notifications/email/package.json \ 17 - --mount=type=bind,target=packages/notifications/opsgenie/package.json,source=packages/notifications/opsgenie/package.json \ 18 - --mount=type=bind,target=packages/notifications/pagerduty/package.json,source=packages/notifications/pagerduty/package.json \ 19 - --mount=type=bind,target=packages/notifications/slack/package.json,source=packages/notifications/slack/package.json \ 20 - --mount=type=bind,target=packages/notifications/twillio-sms/package.json,source=packages/notifications/twillio-sms/package.json \ 21 15 --mount=type=bind,target=packages/tinybird/package.json,source=packages/tinybird/package.json \ 22 16 --mount=type=bind,target=packages/tracker/package.json,source=packages/tracker/package.json \ 23 17 --mount=type=bind,target=packages/upstash/package.json,source=packages/upstash/package.json \
+1 -19
apps/server/dofigen.lock
··· 46 46 source: packages/emails/package.json 47 47 - target: packages/error/package.json 48 48 source: packages/error/package.json 49 - - target: packages/notifications/discord/package.json 50 - source: packages/notifications/discord/package.json 51 - - target: packages/notifications/email/package.json 52 - source: packages/notifications/email/package.json 53 - - target: packages/notifications/opsgenie/package.json 54 - source: packages/notifications/opsgenie/package.json 55 - - target: packages/notifications/pagerduty/package.json 56 - source: packages/notifications/pagerduty/package.json 57 - - target: packages/notifications/slack/package.json 58 - source: packages/notifications/slack/package.json 59 - - target: packages/notifications/twillio-sms/package.json 60 - source: packages/notifications/twillio-sms/package.json 61 49 - target: packages/tinybird/package.json 62 50 source: packages/tinybird/package.json 63 51 - target: packages/tracker/package.json ··· 95 83 digest: sha256:b0c91cc181796d34c53f7ea106fbcddaf87f3e601cc371af6a24a019a489c980 96 84 resources: 97 85 dofigen.yml: 98 - hash: 4983836e4e9309e7c36e9d8b42696abad4223effb74f65efdc47e8f651e323a6 86 + hash: d8fd3cc0e7fc97f77bb35e336fc7ce1a9f70131a2c0c24fb2056e112b128cbc2 99 87 content: | 100 88 ignore: 101 89 - node_modules ··· 116 104 - packages/db/package.json 117 105 - packages/emails/package.json 118 106 - packages/error/package.json 119 - - packages/notifications/discord/package.json 120 - - packages/notifications/email/package.json 121 - - packages/notifications/opsgenie/package.json 122 - - packages/notifications/pagerduty/package.json 123 - - packages/notifications/slack/package.json 124 - - packages/notifications/twillio-sms/package.json 125 107 - packages/tinybird/package.json 126 108 - packages/tracker/package.json 127 109 - packages/upstash/package.json
-6
apps/server/dofigen.yml
··· 17 17 - packages/db/package.json 18 18 - packages/emails/package.json 19 19 - packages/error/package.json 20 - - packages/notifications/discord/package.json 21 - - packages/notifications/email/package.json 22 - - packages/notifications/opsgenie/package.json 23 - - packages/notifications/pagerduty/package.json 24 - - packages/notifications/slack/package.json 25 - - packages/notifications/twillio-sms/package.json 26 20 - packages/tinybird/package.json 27 21 - packages/tracker/package.json 28 22 - packages/upstash/package.json
-6
apps/server/package.json
··· 20 20 "@openstatus/db": "workspace:*", 21 21 "@openstatus/emails": "workspace:*", 22 22 "@openstatus/error": "workspace:*", 23 - "@openstatus/notification-discord": "workspace:*", 24 - "@openstatus/notification-emails": "workspace:*", 25 - "@openstatus/notification-opsgenie": "workspace:*", 26 - "@openstatus/notification-pagerduty": "workspace:*", 27 - "@openstatus/notification-slack": "workspace:*", 28 - "@openstatus/notification-twillio-sms": "workspace:*", 29 23 "@openstatus/tinybird": "workspace:*", 30 24 "@openstatus/tracker": "workspace:*", 31 25 "@openstatus/upstash": "workspace:*",
-2
apps/server/src/index.ts
··· 7 7 import { requestId } from "hono/request-id"; 8 8 import { env } from "./env"; 9 9 import { handleError } from "./libs/errors"; 10 - import { checkerRoute } from "./routes/checker"; 11 10 import { publicRoute } from "./routes/public"; 12 11 import { api } from "./routes/v1"; 13 12 ··· 48 47 * This route is used by our checker to update the status of the monitors, 49 48 * create incidents, and send notifications. 50 49 */ 51 - app.route("/", checkerRoute); 52 50 53 51 const isDev = process.env.NODE_ENV === "development"; 54 52 const port = 3000;
-22
apps/server/src/routes/checker/alerting.test.ts
··· 1 - import { expect, mock, test } from "bun:test"; 2 - 3 - import { triggerNotifications } from "./alerting"; 4 - 5 - test.todo("should send email notification", async () => { 6 - const fn = mock(() => {}); 7 - mock.module("./utils.ts", () => { 8 - return { 9 - providerToFunction: { 10 - email: fn, 11 - }, 12 - }; 13 - }); 14 - await triggerNotifications({ 15 - monitorId: "1", 16 - statusCode: 400, 17 - notifType: "alert", 18 - cronTimestamp: 123456, 19 - incidentId: "1", 20 - }); 21 - expect(fn).toHaveBeenCalled(); 22 - });
-135
apps/server/src/routes/checker/alerting.ts
··· 1 - import { db, eq, schema } from "@openstatus/db"; 2 - import type { MonitorStatus } from "@openstatus/db/src/schema"; 3 - import { 4 - selectMonitorSchema, 5 - selectNotificationSchema, 6 - } from "@openstatus/db/src/schema"; 7 - 8 - import { checkerAudit } from "@/utils/audit-log"; 9 - import type { 10 - MonitorFlyRegion, 11 - Region, 12 - } from "@openstatus/db/src/schema/constants"; 13 - import { Redis } from "@openstatus/upstash"; 14 - import { providerToFunction } from "./utils"; 15 - 16 - const redis = Redis.fromEnv(); 17 - 18 - export const triggerNotifications = async ({ 19 - monitorId, 20 - statusCode, 21 - message, 22 - notifType, 23 - cronTimestamp, 24 - incidentId, 25 - region, 26 - latency, 27 - }: { 28 - monitorId: string; 29 - statusCode?: number; 30 - message?: string; 31 - notifType: "alert" | "recovery" | "degraded"; 32 - cronTimestamp: number; 33 - incidentId: string; 34 - region?: Region; 35 - latency?: number; 36 - }) => { 37 - console.log(`๐Ÿ’Œ triggerAlerting for ${monitorId}`); 38 - const notifications = await db 39 - .select() 40 - .from(schema.notificationsToMonitors) 41 - .innerJoin( 42 - schema.notification, 43 - eq(schema.notification.id, schema.notificationsToMonitors.notificationId), 44 - ) 45 - .innerJoin( 46 - schema.monitor, 47 - eq(schema.monitor.id, schema.notificationsToMonitors.monitorId), 48 - ) 49 - .where(eq(schema.monitor.id, Number(monitorId))) 50 - .all(); 51 - for (const notif of notifications) { 52 - const key = `${monitorId}:${incidentId}:${notif.notification.id}:${notifType}`; 53 - const r = await redis.setnx(key, "1"); 54 - if (r === 0) { 55 - console.log(`๐Ÿค” notification already sent for ${key}`); 56 - continue; 57 - } 58 - 59 - await redis.expire(key, 60 * 60); 60 - 61 - console.log( 62 - `๐Ÿ’Œ sending notification for ${monitorId} and chanel ${notif.notification.provider} for ${notifType}`, 63 - ); 64 - const monitor = selectMonitorSchema.parse(notif.monitor); 65 - switch (notifType) { 66 - case "alert": 67 - await providerToFunction[notif.notification.provider].sendAlert({ 68 - monitor, 69 - notification: selectNotificationSchema.parse(notif.notification), 70 - statusCode, 71 - message, 72 - incidentId, 73 - cronTimestamp, 74 - region, 75 - latency, 76 - }); 77 - break; 78 - case "recovery": 79 - await providerToFunction[notif.notification.provider].sendRecovery({ 80 - monitor, 81 - notification: selectNotificationSchema.parse(notif.notification), 82 - statusCode, 83 - message, 84 - incidentId, 85 - cronTimestamp, 86 - region, 87 - latency, 88 - }); 89 - break; 90 - case "degraded": 91 - await providerToFunction[notif.notification.provider].sendDegraded({ 92 - monitor, 93 - notification: selectNotificationSchema.parse(notif.notification), 94 - statusCode, 95 - message, 96 - cronTimestamp, 97 - region, 98 - latency, 99 - }); 100 - break; 101 - } 102 - // ALPHA 103 - await checkerAudit.publishAuditLog({ 104 - id: `monitor:${monitorId}`, 105 - action: "notification.sent", 106 - targets: [{ id: monitorId, type: "monitor" }], 107 - metadata: { provider: notif.notification.provider }, 108 - }); 109 - // 110 - } 111 - }; 112 - 113 - export const upsertMonitorStatus = async ({ 114 - monitorId, 115 - status, 116 - region, 117 - }: { 118 - monitorId: string; 119 - status: MonitorStatus; 120 - region: MonitorFlyRegion; 121 - }) => { 122 - const newData = await db 123 - .insert(schema.monitorStatusTable) 124 - .values({ status, region, monitorId: Number(monitorId) }) 125 - .onConflictDoUpdate({ 126 - target: [ 127 - schema.monitorStatusTable.monitorId, 128 - schema.monitorStatusTable.region, 129 - ], 130 - set: { status, updatedAt: new Date() }, 131 - }) 132 - .returning(); 133 - console.log(`๐Ÿ“ˆ upsertMonitorStatus for ${monitorId} in region ${region}`); 134 - console.log(`๐Ÿค” upsert monitor ${JSON.stringify(newData)}`); 135 - };
-271
apps/server/src/routes/checker/index.ts
··· 1 - import { Client } from "@upstash/qstash"; 2 - import { Hono } from "hono"; 3 - import { z } from "zod"; 4 - 5 - import { and, count, db, eq, isNull, schema } from "@openstatus/db"; 6 - import { incidentTable, workspace } from "@openstatus/db/src/schema"; 7 - import { 8 - monitorStatusSchema, 9 - selectMonitorSchema, 10 - } from "@openstatus/db/src/schema/monitors/validation"; 11 - 12 - import { env } from "@/env"; 13 - import { checkerAudit } from "@/utils/audit-log"; 14 - import { flyRegions } from "@openstatus/db/src/schema/constants"; 15 - import { Tinybird } from "@openstatus/tinybird"; 16 - import { triggerNotifications, upsertMonitorStatus } from "./alerting"; 17 - 18 - export const checkerRoute = new Hono(); 19 - 20 - const tb = new Tinybird({ token: process.env.TINY_BIRD_API_KEY || "" }); 21 - 22 - const payloadSchema = z.object({ 23 - monitorId: z.string(), 24 - message: z.string().optional(), 25 - statusCode: z.number().optional(), 26 - region: z.enum(flyRegions), 27 - cronTimestamp: z.number(), 28 - status: monitorStatusSchema, 29 - latency: z.number().optional(), 30 - }); 31 - 32 - const publishStatus = tb.buildIngestEndpoint({ 33 - datasource: "alerts__v0", 34 - event: payloadSchema, 35 - }); 36 - 37 - checkerRoute.post("/updateStatus", async (c) => { 38 - const auth = c.req.header("Authorization"); 39 - if (auth !== `Basic ${env.CRON_SECRET}`) { 40 - console.error("Unauthorized"); 41 - return c.text("Unauthorized", 401); 42 - } 43 - 44 - const json = await c.req.json(); 45 - 46 - const result = payloadSchema.safeParse(json); 47 - 48 - if (!result.success) { 49 - return c.text("Unprocessable Entity", 422); 50 - } 51 - const { 52 - monitorId, 53 - message, 54 - region, 55 - statusCode, 56 - cronTimestamp, 57 - status, 58 - latency, 59 - } = result.data; 60 - 61 - console.log(`๐Ÿ“ update monitor status ${JSON.stringify(result.data)}`); 62 - 63 - // First we upsert the monitor status 64 - await upsertMonitorStatus({ 65 - monitorId: monitorId, 66 - status, 67 - region: region, 68 - }); 69 - await publishStatus(result.data); 70 - 71 - const currentMonitor = await db 72 - .select() 73 - .from(schema.monitor) 74 - .where(eq(schema.monitor.id, Number(monitorId))) 75 - .get(); 76 - 77 - const monitor = selectMonitorSchema.parse(currentMonitor); 78 - const numberOfRegions = monitor.regions.length; 79 - 80 - const affectedRegion = await db 81 - .select({ count: count() }) 82 - .from(schema.monitorStatusTable) 83 - .where( 84 - and( 85 - eq(schema.monitorStatusTable.monitorId, monitor.id), 86 - eq(schema.monitorStatusTable.status, status), 87 - ), 88 - ) 89 - .get(); 90 - 91 - if (!affectedRegion?.count) { 92 - return; 93 - } 94 - 95 - if (affectedRegion.count >= numberOfRegions / 2 || numberOfRegions === 1) { 96 - switch (status) { 97 - case "active": { 98 - const incident = await db 99 - .select() 100 - .from(incidentTable) 101 - .where( 102 - and( 103 - eq(incidentTable.monitorId, Number(monitorId)), 104 - isNull(incidentTable.resolvedAt), 105 - isNull(incidentTable.acknowledgedAt), 106 - ), 107 - ) 108 - .get(); 109 - 110 - if (!incident) { 111 - // it was just a single failure not a proper incident 112 - return; 113 - } 114 - if (incident?.resolvedAt) { 115 - // incident is already resolved 116 - return; 117 - } 118 - 119 - console.log(`๐Ÿค“ recovering incident ${incident.id}`); 120 - await db 121 - .update(incidentTable) 122 - .set({ 123 - resolvedAt: new Date(cronTimestamp), 124 - autoResolved: true, 125 - }) 126 - .where(eq(incidentTable.id, incident.id)) 127 - .run(); 128 - 129 - await db 130 - .update(schema.monitor) 131 - .set({ status: "active" }) 132 - .where(eq(schema.monitor.id, monitor.id)); 133 - 134 - await triggerNotifications({ 135 - monitorId, 136 - statusCode, 137 - message, 138 - notifType: "recovery", 139 - cronTimestamp, 140 - incidentId: `${cronTimestamp}`, 141 - }); 142 - 143 - await checkerAudit.publishAuditLog({ 144 - id: `monitor:${monitorId}`, 145 - action: "monitor.recovered", 146 - targets: [{ id: monitorId, type: "monitor" }], 147 - metadata: { region: region, statusCode: statusCode ?? -1 }, 148 - }); 149 - 150 - break; 151 - } 152 - case "degraded": 153 - if (monitor.status !== "degraded") { 154 - console.log( 155 - `๐Ÿ”„ update monitorStatus ${monitor.id} status: DEGRADED}`, 156 - ); 157 - await db 158 - .update(schema.monitor) 159 - .set({ status: "degraded" }) 160 - .where(eq(schema.monitor.id, monitor.id)); 161 - // figure how to send the notification once 162 - await triggerNotifications({ 163 - monitorId, 164 - statusCode, 165 - message, 166 - notifType: "degraded", 167 - cronTimestamp, 168 - latency, 169 - incidentId: `${cronTimestamp}`, 170 - }); 171 - } 172 - await checkerAudit.publishAuditLog({ 173 - id: `monitor:${monitorId}`, 174 - action: "monitor.degraded", 175 - targets: [{ id: monitorId, type: "monitor" }], 176 - metadata: { region, statusCode: statusCode ?? -1 }, 177 - }); 178 - break; 179 - case "error": 180 - try { 181 - const newIncident = await db 182 - .insert(incidentTable) 183 - .values({ 184 - monitorId: Number(monitorId), 185 - workspaceId: monitor.workspaceId, 186 - startedAt: new Date(cronTimestamp), 187 - }) 188 - .returning(); 189 - 190 - if (!newIncident[0].id) { 191 - return; 192 - } 193 - await triggerNotifications({ 194 - monitorId, 195 - statusCode, 196 - message, 197 - notifType: "alert", 198 - cronTimestamp, 199 - incidentId: String(newIncident[0].id), 200 - }); 201 - 202 - await db 203 - .update(schema.monitor) 204 - .set({ status: "error" }) 205 - .where(eq(schema.monitor.id, monitor.id)); 206 - 207 - if (monitor && monitor.jobType === "http" && monitor.workspaceId) { 208 - const currentWorkspace = await db 209 - .select() 210 - .from(workspace) 211 - .where(eq(workspace.id, monitor.workspaceId)) 212 - .get(); 213 - if (!!currentWorkspace?.plan && currentWorkspace?.plan !== "free") { 214 - await triggerScreenshot({ 215 - data: { 216 - url: monitor.url, 217 - incidentId: newIncident[0].id, 218 - kind: "incident", 219 - }, 220 - }); 221 - } 222 - } 223 - await checkerAudit.publishAuditLog({ 224 - id: `monitor:${monitorId}`, 225 - action: "monitor.failed", 226 - targets: [{ id: monitorId, type: "monitor" }], 227 - metadata: { region, statusCode, message }, 228 - }); 229 - } catch { 230 - console.log("incident was already created"); 231 - } 232 - break; 233 - default: 234 - console.log("should not happen"); 235 - break; 236 - } 237 - } 238 - 239 - // if we are in error 240 - return c.text("Ok", 200); 241 - }); 242 - 243 - const payload = z.object({ 244 - url: z.string().url(), 245 - incidentId: z.number(), 246 - kind: z.enum(["incident", "recovery"]), 247 - }); 248 - 249 - const triggerScreenshot = async ({ 250 - data, 251 - }: { 252 - data: z.infer<typeof payload>; 253 - }) => { 254 - console.log(` ๐Ÿ“ธ taking screenshot for incident ${data.incidentId}`); 255 - 256 - const client = new Client({ token: env.QSTASH_TOKEN }); 257 - 258 - await client.publishJSON({ 259 - url: env.SCREENSHOT_SERVICE_URL, 260 - method: "POST", 261 - headers: { 262 - "Content-Type": "application/json", 263 - "api-key": `Basic ${env.CRON_SECRET}`, 264 - }, 265 - body: { 266 - url: data.url, 267 - incidentId: data.incidentId, 268 - kind: data.kind, 269 - }, 270 - }); 271 - };
-97
apps/server/src/routes/checker/utils.ts
··· 1 - import type { 2 - Monitor, 3 - Notification, 4 - NotificationProvider, 5 - } from "@openstatus/db/src/schema"; 6 - import { 7 - sendAlert as sendDiscordAlert, 8 - sendDegraded as sendDiscordDegraded, 9 - sendRecovery as sendDiscordRecovery, 10 - } from "@openstatus/notification-discord"; 11 - import { 12 - sendAlert as sendEmailAlert, 13 - sendDegraded as sendEmailDegraded, 14 - sendRecovery as sendEmailRecovery, 15 - } from "@openstatus/notification-emails"; 16 - import { 17 - sendAlert as sendSlackAlert, 18 - sendDegraded as sendSlackDegraded, 19 - sendRecovery as sendSlackRecovery, 20 - } from "@openstatus/notification-slack"; 21 - import { 22 - sendAlert as sendSmsAlert, 23 - sendDegraded as sendSmsDegraded, 24 - sendRecovery as sendSmsRecovery, 25 - } from "@openstatus/notification-twillio-sms"; 26 - 27 - import { 28 - sendDegraded as sendPagerDutyDegraded, 29 - sendRecovery as sendPagerDutyRecovery, 30 - sendAlert as sendPagerdutyAlert, 31 - } from "@openstatus/notification-pagerduty"; 32 - 33 - import type { Region } from "@openstatus/db/src/schema/constants"; 34 - import { 35 - sendAlert as sendOpsGenieAlert, 36 - sendDegraded as sendOpsGenieDegraded, 37 - sendRecovery as sendOpsGenieRecovery, 38 - } from "@openstatus/notification-opsgenie"; 39 - 40 - type SendNotification = ({ 41 - monitor, 42 - notification, 43 - statusCode, 44 - message, 45 - incidentId, 46 - cronTimestamp, 47 - latency, 48 - region, 49 - }: { 50 - monitor: Monitor; 51 - notification: Notification; 52 - statusCode?: number; 53 - message?: string; 54 - incidentId?: string; 55 - cronTimestamp: number; 56 - latency?: number; 57 - region?: Region; 58 - }) => Promise<void>; 59 - 60 - type Notif = { 61 - sendAlert: SendNotification; 62 - sendRecovery: SendNotification; 63 - sendDegraded: SendNotification; 64 - }; 65 - 66 - export const providerToFunction = { 67 - email: { 68 - sendAlert: sendEmailAlert, 69 - sendRecovery: sendEmailRecovery, 70 - sendDegraded: sendEmailDegraded, 71 - }, 72 - slack: { 73 - sendAlert: sendSlackAlert, 74 - sendRecovery: sendSlackRecovery, 75 - sendDegraded: sendSlackDegraded, 76 - }, 77 - discord: { 78 - sendAlert: sendDiscordAlert, 79 - sendRecovery: sendDiscordRecovery, 80 - sendDegraded: sendDiscordDegraded, 81 - }, 82 - sms: { 83 - sendAlert: sendSmsAlert, 84 - sendRecovery: sendSmsRecovery, 85 - sendDegraded: sendSmsDegraded, 86 - }, 87 - opsgenie: { 88 - sendAlert: sendOpsGenieAlert, 89 - sendRecovery: sendOpsGenieRecovery, 90 - sendDegraded: sendOpsGenieDegraded, 91 - }, 92 - pagerduty: { 93 - sendAlert: sendPagerdutyAlert, 94 - sendRecovery: sendPagerDutyRecovery, 95 - sendDegraded: sendPagerDutyDegraded, 96 - }, 97 - } satisfies Record<NotificationProvider, Notif>;
+1
apps/web/package.json
··· 29 29 "@openstatus/notification-pagerduty": "workspace:*", 30 30 "@openstatus/notification-slack": "workspace:*", 31 31 "@openstatus/notification-opsgenie": "workspace:*", 32 + "@openstatus/notification-webhook": "workspace:*", 32 33 "@openstatus/react": "workspace:*", 33 34 "@openstatus/tinybird": "workspace:*", 34 35 "@openstatus/tracker": "workspace:*",
+6
apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/_components/channel-table.tsx
··· 70 70 disabled={disabled || !workspace.limits.sms} 71 71 /> 72 72 <Separator /> 73 + <Channel 74 + title="Webhook" 75 + description="Send notifications to your webhook." 76 + href="./notifications/new/webhook" 77 + disabled={disabled} 78 + /> 73 79 </div> 74 80 </div> 75 81 );
+1 -1
apps/web/src/components/forms/monitor/section-otel.tsx
··· 26 26 } 27 27 28 28 export function SectionOtel({ form, limits }: Props) { 29 - const { fields, append, prepend, remove, update } = useFieldArray({ 29 + const { fields, append, remove } = useFieldArray({ 30 30 name: "otelHeaders", 31 31 control: form.control, 32 32 });
+4 -1
apps/web/src/components/forms/notification/general.tsx
··· 1 1 "use client"; 2 2 3 - import { useMemo } from "react"; 4 3 import type { UseFormReturn } from "react-hook-form"; 5 4 6 5 import type { ··· 25 24 import { SectionPagerDuty } from "./provider/section-pagerduty"; 26 25 import { SectionSlack } from "./provider/section-slack"; 27 26 import { SectionSms } from "./provider/section-sms"; 27 + import { SectionWebhook } from "./provider/section-webhook"; 28 28 29 29 const LABELS = { 30 30 slack: "Slack", ··· 34 34 opsgenie: "OpsGenie", 35 35 email: "Email", 36 36 ntfy: "Ntfy.sh", 37 + webhook: "Webhook", 37 38 }; 38 39 39 40 interface Props { ··· 60 61 return <SectionEmail form={form} />; 61 62 case "ntfy": 62 63 return <SectionNtfy form={form} />; 64 + case "webhook": 65 + return <SectionWebhook form={form} />; 63 66 default: 64 67 return <div>No provider selected</div>; 65 68 }
+14
apps/web/src/components/forms/notification/provider/actions.ts
··· 5 5 import { sendTest as sendPagerDutyAlert } from "@openstatus/notification-pagerduty"; 6 6 7 7 import { sendTest as sendNtfyAlert } from "@openstatus/notification-ntfy"; 8 + 9 + import { sendTest as sendWebhookAlert } from "@openstatus/notification-webhook"; 10 + 8 11 export async function sendOpsGenieTestAlert( 9 12 apiKey: string, 10 13 region: "us" | "eu", ··· 32 35 const isSuccessfull = await sendNtfyAlert({ topic, serverUrl, token }); 33 36 return isSuccessfull; 34 37 } 38 + 39 + export async function sendWebhookTestAlert({ 40 + url, 41 + headers, 42 + }: { 43 + url: string; 44 + headers?: { key: string; value: string }[]; 45 + }) { 46 + const isSuccessfull = await sendWebhookAlert({ url, headers }); 47 + return isSuccessfull; 48 + }
-1
apps/web/src/components/forms/notification/provider/section-ntfy.tsx
··· 8 8 import { 9 9 Button, 10 10 FormControl, 11 - FormDescription, 12 11 FormField, 13 12 FormItem, 14 13 FormLabel,
+137
apps/web/src/components/forms/notification/provider/section-webhook.tsx
··· 1 + "use client"; 2 + 3 + import { toastAction } from "@/lib/toast"; 4 + import { type UseFormReturn, useFieldArray } from "react-hook-form"; 5 + 6 + import { LoadingAnimation } from "@/components/loading-animation"; 7 + import type { InsertNotificationWithData } from "@openstatus/db/src/schema"; 8 + import { 9 + Button, 10 + FormControl, 11 + FormField, 12 + FormItem, 13 + FormLabel, 14 + FormMessage, 15 + Input, 16 + } from "@openstatus/ui"; 17 + import { X } from "lucide-react"; 18 + import { useTransition } from "react"; 19 + import { sendWebhookTestAlert } from "./actions"; 20 + 21 + interface Props { 22 + form: UseFormReturn<InsertNotificationWithData>; 23 + } 24 + 25 + export function SectionWebhook({ form }: Props) { 26 + const [isTestPending, startTestTransition] = useTransition(); 27 + 28 + const { fields, append, remove } = useFieldArray({ 29 + name: "data.webhook.headers", 30 + control: form.control, 31 + }); 32 + 33 + const watchUrl = form.watch("data.webhook.endpoint"); 34 + const watchHeaders = form.watch("data.webhook.headers"); 35 + 36 + async function sendTestAlert() { 37 + if (!watchUrl) return; 38 + startTestTransition(async () => { 39 + const isSuccessful = await sendWebhookTestAlert({ 40 + url: watchUrl, 41 + headers: watchHeaders, 42 + }); 43 + if (isSuccessful) { 44 + toastAction("test-success"); 45 + } else { 46 + toastAction("test-error"); 47 + } 48 + }); 49 + } 50 + 51 + return ( 52 + <> 53 + <FormField 54 + control={form.control} 55 + name="data.webhook.endpoint" 56 + render={({ field }) => ( 57 + <FormItem className="sm:col-span-full"> 58 + <FormLabel>URL</FormLabel> 59 + <FormControl> 60 + <Input 61 + type="url" 62 + placeholder="https://your-webhook-url" 63 + {...field} 64 + /> 65 + </FormControl> 66 + <FormMessage /> 67 + </FormItem> 68 + )} 69 + /> 70 + 71 + <div className="space-y-2 sm:col-span-full"> 72 + <FormLabel>Request Header</FormLabel> 73 + {fields.map((field, index) => ( 74 + <div key={field.id} className="grid grid-cols-6 gap-4"> 75 + <FormField 76 + control={form.control} 77 + name={`data.webhook.headers.${index}.key`} 78 + render={({ field }) => ( 79 + <FormItem className="col-span-2"> 80 + <FormControl> 81 + <Input placeholder="key" {...field} /> 82 + </FormControl> 83 + </FormItem> 84 + )} 85 + /> 86 + <div className="col-span-4 flex items-center space-x-2"> 87 + <FormField 88 + control={form.control} 89 + name={`data.webhook.headers.${index}.value`} 90 + render={({ field }) => ( 91 + <FormItem className="w-full"> 92 + <FormControl> 93 + <Input placeholder="value" {...field} /> 94 + </FormControl> 95 + </FormItem> 96 + )} 97 + /> 98 + <Button 99 + size="icon" 100 + variant="ghost" 101 + type="button" 102 + onClick={() => remove(index)} 103 + > 104 + <X className="h-4 w-4" /> 105 + </Button> 106 + </div> 107 + </div> 108 + ))} 109 + <div> 110 + <Button 111 + type="button" 112 + variant="outline" 113 + onClick={() => append({ key: "", value: "" })} 114 + > 115 + Add Custom Header 116 + </Button> 117 + </div> 118 + </div> 119 + 120 + <div className="col-span-full text-right"> 121 + <Button 122 + type="button" 123 + variant="secondary" 124 + className="w-full sm:w-auto" 125 + disabled={isTestPending} 126 + onClick={sendTestAlert} 127 + > 128 + {!isTestPending ? ( 129 + "Test Webhook" 130 + ) : ( 131 + <LoadingAnimation variant="inverse" /> 132 + )} 133 + </Button> 134 + </div> 135 + </> 136 + ); 137 + }
+1 -1
apps/web/src/config/pricing-table.tsx
··· 110 110 features: [ 111 111 { 112 112 value: "notifications", 113 - label: "Slack, Discord, Email, ntfy.sh", 113 + label: "Slack, Discord, Email, Webhook, ntfy.sh", 114 114 }, 115 115 { 116 116 value: "sms",
+1
apps/workflows/Dockerfile
··· 18 18 --mount=type=bind,target=packages/notifications/pagerduty/package.json,source=packages/notifications/pagerduty/package.json \ 19 19 --mount=type=bind,target=packages/notifications/slack/package.json,source=packages/notifications/slack/package.json \ 20 20 --mount=type=bind,target=packages/notifications/twillio-sms/package.json,source=packages/notifications/twillio-sms/package.json \ 21 + --mount=type=bind,target=packages/notifications/webhook/package.json,source=packages/notifications/webhook/package.json \ 21 22 --mount=type=bind,target=packages/utils/package.json,source=packages/utils/package.json \ 22 23 --mount=type=bind,target=packages/tsconfig/package.json,source=packages/tsconfig/package.json \ 23 24 --mount=type=bind,target=packages/tinybird/package.json,source=packages/tinybird/package.json \
+21 -18
apps/workflows/dofigen.lock
··· 10 10 - /packages/error 11 11 - /packages/tracker 12 12 builders: 13 - build: 14 - fromImage: 15 - path: oven/bun 16 - digest: sha256:e9382fda475d1ff0a939e925db3ca5a91b3b26cd71f23410dc5363262384bbc2 17 - workdir: /app/apps/workflows 18 - env: 19 - NODE_ENV: production 20 - copy: 21 - - paths: 22 - - . 23 - target: /app/ 24 - - fromBuilder: install 25 - paths: 26 - - /app/node_modules 27 - target: /app/node_modules 28 - run: 29 - - bun build --compile --sourcemap --format=cjs src/index.ts --outfile=app 30 13 install: 31 14 fromImage: 32 15 path: oven/bun ··· 61 44 source: packages/notifications/slack/package.json 62 45 - target: packages/notifications/twillio-sms/package.json 63 46 source: packages/notifications/twillio-sms/package.json 47 + - target: packages/notifications/webhook/package.json 48 + source: packages/notifications/webhook/package.json 64 49 - target: packages/utils/package.json 65 50 source: packages/utils/package.json 66 51 - target: packages/tsconfig/package.json ··· 69 54 source: packages/tinybird/package.json 70 55 - target: packages/upstash/package.json 71 56 source: packages/upstash/package.json 57 + build: 58 + fromImage: 59 + path: oven/bun 60 + digest: sha256:e9382fda475d1ff0a939e925db3ca5a91b3b26cd71f23410dc5363262384bbc2 61 + workdir: /app/apps/workflows 62 + env: 63 + NODE_ENV: production 64 + copy: 65 + - paths: 66 + - . 67 + target: /app/ 68 + - fromBuilder: install 69 + paths: 70 + - /app/node_modules 71 + target: /app/node_modules 72 + run: 73 + - bun build --compile --sourcemap --format=cjs src/index.ts --outfile=app 72 74 fromImage: 73 75 path: debian 74 76 digest: sha256:e831d9a884d63734fe3dd9c491ed9a5a3d4c6a6d32c5b14f2067357c49b0b7e1 ··· 94 96 digest: sha256:e831d9a884d63734fe3dd9c491ed9a5a3d4c6a6d32c5b14f2067357c49b0b7e1 95 97 resources: 96 98 dofigen.yml: 97 - hash: 756c481a0bf4efc02d00ba1da6a9d84960b3424e625d492ef4c93ec841d075f6 99 + hash: fbea3a6c2c01ffe130db1ea9fc60ffaf2c2f1aaac2fd63d523bb526c5eb92cf4 98 100 content: | 99 101 ignore: 100 102 - node_modules ··· 124 126 - packages/notifications/pagerduty/package.json 125 127 - packages/notifications/slack/package.json 126 128 - packages/notifications/twillio-sms/package.json 129 + - packages/notifications/webhook/package.json 127 130 - packages/utils/package.json 128 131 - packages/tsconfig/package.json 129 132 - packages/tinybird/package.json
+1
apps/workflows/dofigen.yml
··· 26 26 - packages/notifications/pagerduty/package.json 27 27 - packages/notifications/slack/package.json 28 28 - packages/notifications/twillio-sms/package.json 29 + - packages/notifications/webhook/package.json 29 30 - packages/utils/package.json 30 31 - packages/tsconfig/package.json 31 32 - packages/tinybird/package.json
+1
apps/workflows/package.json
··· 16 16 "@openstatus/notification-pagerduty": "workspace:*", 17 17 "@openstatus/notification-slack": "workspace:*", 18 18 "@openstatus/notification-twillio-sms": "workspace:*", 19 + "@openstatus/notification-webhook": "workspace:*", 19 20 "@openstatus/tinybird": "workspace:*", 20 21 "@openstatus/upstash": "workspace:*", 21 22 "@openstatus/utils": "workspace:*",
-1
apps/workflows/src/checker/alerting.ts
··· 1 1 import { db, eq, schema } from "@openstatus/db"; 2 2 import type { MonitorStatus } from "@openstatus/db/src/schema"; 3 3 import { 4 - monitor, 5 4 selectMonitorSchema, 6 5 selectNotificationSchema, 7 6 } from "@openstatus/db/src/schema";
+11 -1
apps/workflows/src/checker/utils.ts
··· 37 37 38 38 import type { Region } from "@openstatus/db/src/schema/constants"; 39 39 import { 40 - sendAlert, 41 40 sendAlert as sendOpsGenieAlert, 42 41 sendDegraded as sendOpsGenieDegraded, 43 42 sendRecovery as sendOpsGenieRecovery, 44 43 } from "@openstatus/notification-opsgenie"; 44 + 45 + import { 46 + sendAlert as sendWebhookAlert, 47 + sendDegraded as sendWebhookDegraded, 48 + sendRecovery as sendWebhookRecovery, 49 + } from "@openstatus/notification-webhook"; 45 50 46 51 type SendNotification = ({ 47 52 monitor, ··· 104 109 sendAlert: sendSmsAlert, 105 110 sendRecovery: sendSmsRecovery, 106 111 sendDegraded: sendSmsDegraded, 112 + }, 113 + webhook: { 114 + sendAlert: sendWebhookAlert, 115 + sendRecovery: sendWebhookRecovery, 116 + sendDegraded: sendWebhookDegraded, 107 117 }, 108 118 } satisfies Record<NotificationProvider, Notif>;
+1
packages/db/src/schema/notifications/constants.ts
··· 6 6 "opsgenie", 7 7 "slack", 8 8 "sms", 9 + "webhook", 9 10 ] as const;
+15 -1
packages/db/src/schema/notifications/validation.ts
··· 43 43 token: z.string().optional(), 44 44 }), 45 45 }); 46 - export const webhookDataSchema = z.object({ webhook: urlSchema }); 46 + export const webhookDataSchema = z.object({ 47 + webhook: z.object({ 48 + endpoint: z.string().url(), 49 + headers: z 50 + .array(z.object({ key: z.string(), value: z.string() })) 51 + .optional(), 52 + }), 53 + }); 47 54 export const emailDataSchema = z.object({ email: emailSchema }); 48 55 export const phoneDataSchema = z.object({ sms: phoneSchema }); 49 56 export const slackDataSchema = z.object({ slack: urlSchema }); ··· 64 71 pagerdutyDataSchema, 65 72 opsgenieDataSchema, 66 73 ntfyDataSchema, 74 + webhookDataSchema, 67 75 ]); 68 76 69 77 export const InsertNotificationWithDataSchema = z.discriminatedUnion( ··· 109 117 z.object({ 110 118 provider: z.literal("slack"), 111 119 data: slackDataSchema, 120 + }), 121 + ), 122 + insertNotificationSchema.merge( 123 + z.object({ 124 + provider: z.literal("webhook"), 125 + data: webhookDataSchema, 112 126 }), 113 127 ), 114 128 ],
+169
packages/notifications/webhook/.gitignore
··· 1 + # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 + 3 + # Logs 4 + 5 + logs 6 + _.log 7 + npm-debug.log_ 8 + yarn-debug.log* 9 + yarn-error.log* 10 + lerna-debug.log* 11 + .pnpm-debug.log* 12 + 13 + # Diagnostic reports (https://nodejs.org/api/report.html) 14 + 15 + report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 16 + 17 + # Runtime data 18 + 19 + pids 20 + _.pid 21 + _.seed 22 + \*.pid.lock 23 + 24 + # Directory for instrumented libs generated by jscoverage/JSCover 25 + 26 + lib-cov 27 + 28 + # Coverage directory used by tools like istanbul 29 + 30 + coverage 31 + \*.lcov 32 + 33 + # nyc test coverage 34 + 35 + .nyc_output 36 + 37 + # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 38 + 39 + .grunt 40 + 41 + # Bower dependency directory (https://bower.io/) 42 + 43 + bower_components 44 + 45 + # node-waf configuration 46 + 47 + .lock-wscript 48 + 49 + # Compiled binary addons (https://nodejs.org/api/addons.html) 50 + 51 + build/Release 52 + 53 + # Dependency directories 54 + 55 + node_modules/ 56 + jspm_packages/ 57 + 58 + # Snowpack dependency directory (https://snowpack.dev/) 59 + 60 + web_modules/ 61 + 62 + # TypeScript cache 63 + 64 + \*.tsbuildinfo 65 + 66 + # Optional npm cache directory 67 + 68 + .npm 69 + 70 + # Optional eslint cache 71 + 72 + .eslintcache 73 + 74 + # Optional stylelint cache 75 + 76 + .stylelintcache 77 + 78 + # Microbundle cache 79 + 80 + .rpt2_cache/ 81 + .rts2_cache_cjs/ 82 + .rts2_cache_es/ 83 + .rts2_cache_umd/ 84 + 85 + # Optional REPL history 86 + 87 + .node_repl_history 88 + 89 + # Output of 'npm pack' 90 + 91 + \*.tgz 92 + 93 + # Yarn Integrity file 94 + 95 + .yarn-integrity 96 + 97 + # dotenv environment variable files 98 + 99 + .env 100 + .env.development.local 101 + .env.test.local 102 + .env.production.local 103 + .env.local 104 + 105 + # parcel-bundler cache (https://parceljs.org/) 106 + 107 + .cache 108 + .parcel-cache 109 + 110 + # Next.js build output 111 + 112 + .next 113 + out 114 + 115 + # Nuxt.js build / generate output 116 + 117 + .nuxt 118 + dist 119 + 120 + # Gatsby files 121 + 122 + .cache/ 123 + 124 + # Comment in the public line in if your project uses Gatsby and not Next.js 125 + 126 + # https://nextjs.org/blog/next-9-1#public-directory-support 127 + 128 + # public 129 + 130 + # vuepress build output 131 + 132 + .vuepress/dist 133 + 134 + # vuepress v2.x temp and cache directory 135 + 136 + .temp 137 + .cache 138 + 139 + # Docusaurus cache and generated files 140 + 141 + .docusaurus 142 + 143 + # Serverless directories 144 + 145 + .serverless/ 146 + 147 + # FuseBox cache 148 + 149 + .fusebox/ 150 + 151 + # DynamoDB Local files 152 + 153 + .dynamodb/ 154 + 155 + # TernJS port file 156 + 157 + .tern-port 158 + 159 + # Stores VSCode versions used for testing VSCode extensions 160 + 161 + .vscode-test 162 + 163 + # yarn v2 164 + 165 + .yarn/cache 166 + .yarn/unplugged 167 + .yarn/build-state.yml 168 + .yarn/install-state.gz 169 + .pnp.\*
+15
packages/notifications/webhook/README.md
··· 1 + # @openstatus/notification-webhook 2 + To install dependencies: 3 + 4 + ```bash 5 + bun install 6 + ``` 7 + 8 + To run: 9 + 10 + ```bash 11 + bun run src/index.ts 12 + ``` 13 + 14 + This project was created using `bun init` in bun v1.0.0. [Bun](https://bun.sh) 15 + is a fast all-in-one JavaScript runtime.
+16
packages/notifications/webhook/package.json
··· 1 + { 2 + "name": "@openstatus/notification-webhook", 3 + "version": "1.0.0", 4 + "main": "src/index.ts", 5 + "dependencies": { 6 + "@openstatus/db": "workspace:*", 7 + "@openstatus/utils": "workspace:*", 8 + 9 + "zod": "3.23.8" 10 + }, 11 + "devDependencies": { 12 + "@openstatus/tsconfig": "workspace:*", 13 + "@types/node": "22.10.2", 14 + "typescript": "5.6.2" 15 + } 16 + }
+166
packages/notifications/webhook/src/index.ts
··· 1 + import type { Monitor, Notification } from "@openstatus/db/src/schema"; 2 + 3 + import type { Region } from "@openstatus/db/src/schema/constants"; 4 + import { transformHeaders } from "@openstatus/utils"; 5 + import { PayloadSchema, WebhookSchema } from "./schema"; 6 + 7 + export const sendAlert = async ({ 8 + monitor, 9 + notification, 10 + cronTimestamp, 11 + statusCode, 12 + latency, 13 + message, 14 + // biome-ignore lint/correctness/noUnusedVariables: <explanation> 15 + incidentId, 16 + }: { 17 + monitor: Monitor; 18 + notification: Notification; 19 + statusCode?: number; 20 + message?: string; 21 + incidentId?: string; 22 + cronTimestamp: number; 23 + latency?: number; 24 + region?: Region; 25 + }) => { 26 + const notificationData = WebhookSchema.parse(JSON.parse(notification.data)); 27 + 28 + const body = PayloadSchema.parse({ 29 + monitor: monitor, 30 + cronTimestamp, 31 + status: "error", 32 + statusCode, 33 + latency, 34 + errorMessage: message, 35 + }); 36 + 37 + try { 38 + await fetch(notificationData.endpoint, { 39 + method: "post", 40 + body: JSON.stringify(body), 41 + headers: notificationData.headers 42 + ? transformHeaders(notificationData.headers) 43 + : undefined, 44 + }); 45 + } catch (err) { 46 + console.log(err); 47 + // Do something 48 + } 49 + }; 50 + 51 + export const sendRecovery = async ({ 52 + monitor, 53 + notification, 54 + cronTimestamp, 55 + latency, 56 + statusCode, 57 + message, 58 + // biome-ignore lint/correctness/noUnusedVariables: <explanation> 59 + incidentId, 60 + }: { 61 + monitor: Monitor; 62 + notification: Notification; 63 + statusCode?: number; 64 + message?: string; 65 + incidentId?: string; 66 + cronTimestamp: number; 67 + latency?: number; 68 + region?: Region; 69 + }) => { 70 + const notificationData = WebhookSchema.parse(JSON.parse(notification.data)); 71 + 72 + const body = PayloadSchema.parse({ 73 + monitor: monitor, 74 + cronTimestamp, 75 + status: "recovered", 76 + statusCode, 77 + latency, 78 + errorMessage: message, 79 + }); 80 + const url = notificationData.endpoint; 81 + try { 82 + await fetch(url, { 83 + method: "post", 84 + body: JSON.stringify(body), 85 + headers: notificationData.headers 86 + ? transformHeaders(notificationData.headers) 87 + : undefined, 88 + }); 89 + } catch (err) { 90 + console.log(err); 91 + // Do something 92 + } 93 + }; 94 + 95 + export const sendDegraded = async ({ 96 + monitor, 97 + notification, 98 + cronTimestamp, 99 + latency, 100 + statusCode, 101 + message, 102 + }: { 103 + monitor: Monitor; 104 + notification: Notification; 105 + statusCode?: number; 106 + message?: string; 107 + incidentId?: string; 108 + cronTimestamp: number; 109 + latency?: number; 110 + region?: Region; 111 + }) => { 112 + const notificationData = WebhookSchema.parse(JSON.parse(notification.data)); 113 + 114 + const body = PayloadSchema.parse({ 115 + monitior: monitor, 116 + cronTimestamp, 117 + status: "degraded", 118 + statusCode, 119 + latency, 120 + errorMessage: message, 121 + }); 122 + 123 + try { 124 + await fetch(notificationData.endpoint, { 125 + method: "post", 126 + body: JSON.stringify(body), 127 + headers: notificationData.headers 128 + ? transformHeaders(notificationData.headers) 129 + : undefined, 130 + }); 131 + } catch (err) { 132 + console.log(err); 133 + // Do something 134 + } 135 + }; 136 + 137 + export const sendTest = async ({ 138 + url, 139 + headers, 140 + }: { 141 + url: string; 142 + headers?: { key: string; value: string }[]; 143 + }) => { 144 + const body = PayloadSchema.parse({ 145 + monitor: { 146 + id: 1, 147 + name: "test", 148 + url: "http://openstat.us", 149 + }, 150 + cronTimestamp: Date.now(), 151 + status: "recovered", 152 + statusCode: 200, 153 + latency: 1337, 154 + }); 155 + try { 156 + await fetch(url, { 157 + method: "post", 158 + body: JSON.stringify(body), 159 + headers: headers ? transformHeaders(headers) : undefined, 160 + }); 161 + } catch (err) { 162 + console.log(err); 163 + return false; 164 + } 165 + return true; 166 + };
+19
packages/notifications/webhook/src/schema.ts
··· 1 + import { z } from "zod"; 2 + 3 + export const WebhookSchema = z.object({ 4 + endpoint: z.string().url(), 5 + headers: z.array(z.object({ key: z.string(), value: z.string() })).optional(), 6 + }); 7 + 8 + export const PayloadSchema = z.object({ 9 + monitor: z.object({ 10 + id: z.number(), 11 + name: z.string(), 12 + url: z.string(), 13 + }), 14 + cronTimestamp: z.number(), 15 + status: z.enum(["degraded", "error", "recovered"]), 16 + statusCode: z.number().optional(), 17 + latency: z.number().optional(), 18 + errorMessage: z.string().optional(), 19 + });
+4
packages/notifications/webhook/tsconfig.json
··· 1 + { 2 + "extends": "@openstatus/tsconfig/nextjs.json", 3 + "include": ["src", "*.ts"] 4 + }
+695 -272
pnpm-lock.yaml
··· 33 33 specifier: 0.9.4 34 34 version: 0.9.4(prettier@3.4.2)(typescript@5.6.2) 35 35 '@astrojs/react': 36 - specifier: 4.2.0 37 - version: 4.2.0(@types/node@22.10.2)(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(jiti@1.21.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(terser@5.37.0)(yaml@2.6.1) 36 + specifier: 4.2.3 37 + version: 4.2.3(@types/node@22.10.2)(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(jiti@1.21.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(terser@5.37.0)(yaml@2.6.1) 38 38 '@astrojs/sitemap': 39 39 specifier: 3.2.1 40 40 version: 3.2.1 41 41 '@astrojs/starlight': 42 - specifier: 0.32.1 43 - version: 0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 42 + specifier: 0.32.6 43 + version: 0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 44 44 '@astrojs/starlight-tailwind': 45 - specifier: 3.0.0 46 - version: 3.0.0(@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(@astrojs/tailwind@6.0.0(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))) 45 + specifier: 3.0.1 46 + version: 3.0.1(@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(@astrojs/tailwind@6.0.0(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))) 47 47 '@astrojs/tailwind': 48 48 specifier: 6.0.0 49 - version: 6.0.0(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 49 + version: 6.0.0(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 50 50 astro: 51 - specifier: 5.3.1 52 - version: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 51 + specifier: 5.6.1 52 + version: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 53 53 sharp: 54 54 specifier: 0.33.5 55 55 version: 0.33.5 56 56 starlight-showcases: 57 57 specifier: 0.3.0 58 - version: 0.3.0(@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 58 + version: 0.3.0(@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 59 59 starlight-sidebar-topics: 60 - specifier: 0.4.1 61 - version: 0.4.1(@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))) 60 + specifier: 0.6.0 61 + version: 0.6.0(@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))) 62 62 unplugin-icons: 63 63 specifier: 22.1.0 64 64 version: 22.1.0(@vue/compiler-sfc@3.5.13) ··· 139 139 '@openstatus/error': 140 140 specifier: workspace:* 141 141 version: link:../../packages/error 142 - '@openstatus/notification-discord': 143 - specifier: workspace:* 144 - version: link:../../packages/notifications/discord 145 - '@openstatus/notification-emails': 146 - specifier: workspace:* 147 - version: link:../../packages/notifications/email 148 - '@openstatus/notification-opsgenie': 149 - specifier: workspace:* 150 - version: link:../../packages/notifications/opsgenie 151 - '@openstatus/notification-pagerduty': 152 - specifier: workspace:* 153 - version: link:../../packages/notifications/pagerduty 154 - '@openstatus/notification-slack': 155 - specifier: workspace:* 156 - version: link:../../packages/notifications/slack 157 - '@openstatus/notification-twillio-sms': 158 - specifier: workspace:* 159 - version: link:../../packages/notifications/twillio-sms 160 142 '@openstatus/tinybird': 161 143 specifier: workspace:* 162 144 version: link:../../packages/tinybird ··· 171 153 version: link:../../packages/utils 172 154 '@scalar/hono-api-reference': 173 155 specifier: 0.5.131 174 - version: 0.5.131(postcss@8.5.2)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2) 156 + version: 0.5.131(postcss@8.5.3)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2) 175 157 '@t3-oss/env-core': 176 158 specifier: 0.7.1 177 159 version: 0.7.1(typescript@5.7.2)(zod@3.23.8) ··· 266 248 '@openstatus/notification-slack': 267 249 specifier: workspace:* 268 250 version: link:../../packages/notifications/slack 251 + '@openstatus/notification-webhook': 252 + specifier: workspace:* 253 + version: link:../../packages/notifications/webhook 269 254 '@openstatus/react': 270 255 specifier: workspace:* 271 256 version: link:../../packages/react ··· 289 274 version: 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 290 275 '@sentry/nextjs': 291 276 specifier: 8.46.0 292 - version: 8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5)) 277 + version: 8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5)) 293 278 '@stripe/stripe-js': 294 279 specifier: 2.1.6 295 280 version: 2.1.6 ··· 316 301 version: 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2) 317 302 '@trpc/next': 318 303 specifier: 11.0.0-rc.666 319 - version: 11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2) 304 + version: 11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2) 320 305 '@trpc/react-query': 321 306 specifier: 11.0.0-rc.666 322 307 version: 11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2) ··· 364 349 version: 5.0.7 365 350 next: 366 351 specifier: 15.2.4 367 - version: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 352 + version: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 368 353 next-auth: 369 354 specifier: 5.0.0-beta.25 370 - version: 5.0.0-beta.25(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 355 + version: 5.0.0-beta.25(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 371 356 next-plausible: 372 357 specifier: 3.12.4 373 - version: 3.12.4(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 358 + version: 3.12.4(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 374 359 next-themes: 375 360 specifier: 0.2.1 376 - version: 0.2.1(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 361 + version: 0.2.1(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 377 362 nuqs: 378 363 specifier: 2.2.3 379 - version: 2.2.3(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 364 + version: 2.2.3(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) 380 365 random-word-slugs: 381 366 specifier: 0.1.7 382 367 version: 0.1.7 ··· 446 431 version: 0.2.0(@content-collections/core@0.7.3(typescript@5.6.2))(acorn@8.14.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 447 432 '@content-collections/next': 448 433 specifier: 0.2.4 449 - version: 0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) 434 + version: 0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) 450 435 '@openstatus/tsconfig': 451 436 specifier: workspace:* 452 437 version: link:../../packages/tsconfig ··· 513 498 '@openstatus/notification-twillio-sms': 514 499 specifier: workspace:* 515 500 version: link:../../packages/notifications/twillio-sms 501 + '@openstatus/notification-webhook': 502 + specifier: workspace:* 503 + version: link:../../packages/notifications/webhook 516 504 '@openstatus/tinybird': 517 505 specifier: workspace:* 518 506 version: link:../../packages/tinybird ··· 954 942 specifier: 5.6.2 955 943 version: 5.6.2 956 944 945 + packages/notifications/webhook: 946 + dependencies: 947 + '@openstatus/db': 948 + specifier: workspace:* 949 + version: link:../../db 950 + '@openstatus/utils': 951 + specifier: workspace:* 952 + version: link:../../utils 953 + zod: 954 + specifier: 3.23.8 955 + version: 3.23.8 956 + devDependencies: 957 + '@openstatus/tsconfig': 958 + specifier: workspace:* 959 + version: link:../../tsconfig 960 + '@types/node': 961 + specifier: 22.10.2 962 + version: 22.10.2 963 + typescript: 964 + specifier: 5.6.2 965 + version: 5.6.2 966 + 957 967 packages/react: 958 968 dependencies: 959 969 react: ··· 974 984 version: 3.4.3(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)) 975 985 tsup: 976 986 specifier: 7.2.0 977 - version: 7.2.0(postcss@8.5.2)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2) 987 + version: 7.2.0(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2) 978 988 typescript: 979 989 specifier: 5.6.2 980 990 version: 5.6.2 ··· 1202 1212 version: 22.10.2 1203 1213 tsup: 1204 1214 specifier: 7.2.0 1205 - version: 7.2.0(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))(typescript@5.6.2) 1215 + version: 7.2.0(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))(typescript@5.6.2) 1206 1216 typescript: 1207 1217 specifier: 5.6.2 1208 1218 version: 5.6.2 ··· 1271 1281 '@astrojs/compiler@2.10.3': 1272 1282 resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==} 1273 1283 1274 - '@astrojs/internal-helpers@0.5.1': 1275 - resolution: {integrity: sha512-M7rAge1n2+aOSxNvKUFa0u/KFn0W+sZy7EW91KOSERotm2Ti8qs+1K0xx3zbOxtAVrmJb5/J98eohVvvEqtNkw==} 1284 + '@astrojs/compiler@2.11.0': 1285 + resolution: {integrity: sha512-zZOO7i+JhojO8qmlyR/URui6LyfHJY6m+L9nwyX5GiKD78YoRaZ5tzz6X0fkl+5bD3uwlDHayf6Oe8Fu36RKNg==} 1286 + 1287 + '@astrojs/internal-helpers@0.6.1': 1288 + resolution: {integrity: sha512-l5Pqf6uZu31aG+3Lv8nl/3s4DbUzdlxTWDof4pEpto6GUJNhhCbelVi9dEyurOVyqaelwmS9oSyOWOENSfgo9A==} 1276 1289 1277 1290 '@astrojs/language-server@2.15.4': 1278 1291 resolution: {integrity: sha512-JivzASqTPR2bao9BWsSc/woPHH7OGSGc9aMxXL4U6egVTqBycB3ZHdBJPuOCVtcGLrzdWTosAqVPz1BVoxE0+A==} ··· 1289 1302 '@astrojs/markdown-remark@6.1.0': 1290 1303 resolution: {integrity: sha512-emZNNSTPGgPc3V399Cazpp5+snogjaF04ocOSQn9vy3Kw/eIC4vTQjXOrWDEoSEy+AwPDZX9bQ4wd3bxhpmGgQ==} 1291 1304 1305 + '@astrojs/markdown-remark@6.3.1': 1306 + resolution: {integrity: sha512-c5F5gGrkczUaTVgmMW9g1YMJGzOtRvjjhw6IfGuxarM6ct09MpwysP10US729dy07gg8y+ofVifezvP3BNsWZg==} 1307 + 1292 1308 '@astrojs/mdx@4.0.8': 1293 1309 resolution: {integrity: sha512-/aiLr2yQ55W9AbpyOgfMtFXk7g2t7XoWdC2Avps/NqxAx4aYONDLneX43D79QwgqdjFhin7o3cIPp/vVppMbaA==} 1294 1310 engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} ··· 1299 1315 resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==} 1300 1316 engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} 1301 1317 1302 - '@astrojs/react@4.2.0': 1303 - resolution: {integrity: sha512-2OccnYFK+mLuy9GpJqPM3BQGvvemnXNeww+nBVYFuiH04L7YIdfg4Gq0LT7v/BraiuADV5uTl9VhTDL/ZQPAhw==} 1318 + '@astrojs/react@4.2.3': 1319 + resolution: {integrity: sha512-icL1hCnW1v+w+NCAz8REfsh9R1aGMW75fYBoeLjyhrVDxXQHiFbTfyBIHkgH79qqID7SM81+hPxHlqcgCuBP8w==} 1304 1320 engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} 1305 1321 peerDependencies: 1306 1322 '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0 ··· 1311 1327 '@astrojs/sitemap@3.2.1': 1312 1328 resolution: {integrity: sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==} 1313 1329 1314 - '@astrojs/starlight-tailwind@3.0.0': 1315 - resolution: {integrity: sha512-oYHG9RY+VaOSeAhheVZfm9HDA892qvcQA82VT86POYmg1OsgBuWwdf1ZbofV8iq/z5kO06ajcSdzhPE8lhEx8g==} 1330 + '@astrojs/starlight-tailwind@3.0.1': 1331 + resolution: {integrity: sha512-9gPBaglNYuD3gLSF+4RvmbO3DxMMMby/AYFuwZkS+BLo67WQWyBIdYtmof814Gi750qSnt0sCvhqFAURqbA1Cw==} 1316 1332 peerDependencies: 1317 1333 '@astrojs/starlight': '>=0.30.0' 1318 - '@astrojs/tailwind': ^5.1.3 1334 + '@astrojs/tailwind': ^5.1.3 || ^6.0.0 1319 1335 tailwindcss: ^3.3.3 1320 1336 1321 - '@astrojs/starlight@0.32.1': 1322 - resolution: {integrity: sha512-+GPtDzi7wkbooHnMZqGjCoV0qwkYZAFSg3FhRm8jSXXSkLJcw4rgT6vnee/LuJhbVq9kvHVcevtgK8tTxy3Xeg==} 1337 + '@astrojs/starlight@0.32.6': 1338 + resolution: {integrity: sha512-ASWGwNzq+0TmJ+GJFFxFFxx6Yra7BqIIMQbvOy/cweTHjqejB6mcaEWtS3Mag12LM7tXCES7v/fzmdPgjz8Yxw==} 1323 1339 peerDependencies: 1324 1340 astro: ^5.1.5 1325 1341 ··· 1935 1951 cpu: [ppc64] 1936 1952 os: [aix] 1937 1953 1954 + '@esbuild/aix-ppc64@0.25.2': 1955 + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} 1956 + engines: {node: '>=18'} 1957 + cpu: [ppc64] 1958 + os: [aix] 1959 + 1938 1960 '@esbuild/android-arm64@0.18.20': 1939 1961 resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 1940 1962 engines: {node: '>=12'} ··· 1961 1983 1962 1984 '@esbuild/android-arm64@0.24.2': 1963 1985 resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} 1986 + engines: {node: '>=18'} 1987 + cpu: [arm64] 1988 + os: [android] 1989 + 1990 + '@esbuild/android-arm64@0.25.2': 1991 + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} 1964 1992 engines: {node: '>=18'} 1965 1993 cpu: [arm64] 1966 1994 os: [android] ··· 1995 2023 cpu: [arm] 1996 2024 os: [android] 1997 2025 2026 + '@esbuild/android-arm@0.25.2': 2027 + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} 2028 + engines: {node: '>=18'} 2029 + cpu: [arm] 2030 + os: [android] 2031 + 1998 2032 '@esbuild/android-x64@0.18.20': 1999 2033 resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 2000 2034 engines: {node: '>=12'} ··· 2025 2059 cpu: [x64] 2026 2060 os: [android] 2027 2061 2062 + '@esbuild/android-x64@0.25.2': 2063 + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} 2064 + engines: {node: '>=18'} 2065 + cpu: [x64] 2066 + os: [android] 2067 + 2028 2068 '@esbuild/darwin-arm64@0.18.20': 2029 2069 resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 2030 2070 engines: {node: '>=12'} ··· 2055 2095 cpu: [arm64] 2056 2096 os: [darwin] 2057 2097 2098 + '@esbuild/darwin-arm64@0.25.2': 2099 + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} 2100 + engines: {node: '>=18'} 2101 + cpu: [arm64] 2102 + os: [darwin] 2103 + 2058 2104 '@esbuild/darwin-x64@0.18.20': 2059 2105 resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 2060 2106 engines: {node: '>=12'} ··· 2081 2127 2082 2128 '@esbuild/darwin-x64@0.24.2': 2083 2129 resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} 2130 + engines: {node: '>=18'} 2131 + cpu: [x64] 2132 + os: [darwin] 2133 + 2134 + '@esbuild/darwin-x64@0.25.2': 2135 + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} 2084 2136 engines: {node: '>=18'} 2085 2137 cpu: [x64] 2086 2138 os: [darwin] ··· 2115 2167 cpu: [arm64] 2116 2168 os: [freebsd] 2117 2169 2170 + '@esbuild/freebsd-arm64@0.25.2': 2171 + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} 2172 + engines: {node: '>=18'} 2173 + cpu: [arm64] 2174 + os: [freebsd] 2175 + 2118 2176 '@esbuild/freebsd-x64@0.18.20': 2119 2177 resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 2120 2178 engines: {node: '>=12'} ··· 2145 2203 cpu: [x64] 2146 2204 os: [freebsd] 2147 2205 2206 + '@esbuild/freebsd-x64@0.25.2': 2207 + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} 2208 + engines: {node: '>=18'} 2209 + cpu: [x64] 2210 + os: [freebsd] 2211 + 2148 2212 '@esbuild/linux-arm64@0.18.20': 2149 2213 resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 2150 2214 engines: {node: '>=12'} ··· 2175 2239 cpu: [arm64] 2176 2240 os: [linux] 2177 2241 2242 + '@esbuild/linux-arm64@0.25.2': 2243 + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} 2244 + engines: {node: '>=18'} 2245 + cpu: [arm64] 2246 + os: [linux] 2247 + 2178 2248 '@esbuild/linux-arm@0.18.20': 2179 2249 resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 2180 2250 engines: {node: '>=12'} ··· 2205 2275 cpu: [arm] 2206 2276 os: [linux] 2207 2277 2278 + '@esbuild/linux-arm@0.25.2': 2279 + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} 2280 + engines: {node: '>=18'} 2281 + cpu: [arm] 2282 + os: [linux] 2283 + 2208 2284 '@esbuild/linux-ia32@0.18.20': 2209 2285 resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 2210 2286 engines: {node: '>=12'} ··· 2231 2307 2232 2308 '@esbuild/linux-ia32@0.24.2': 2233 2309 resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} 2310 + engines: {node: '>=18'} 2311 + cpu: [ia32] 2312 + os: [linux] 2313 + 2314 + '@esbuild/linux-ia32@0.25.2': 2315 + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} 2234 2316 engines: {node: '>=18'} 2235 2317 cpu: [ia32] 2236 2318 os: [linux] ··· 2265 2347 cpu: [loong64] 2266 2348 os: [linux] 2267 2349 2350 + '@esbuild/linux-loong64@0.25.2': 2351 + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} 2352 + engines: {node: '>=18'} 2353 + cpu: [loong64] 2354 + os: [linux] 2355 + 2268 2356 '@esbuild/linux-mips64el@0.18.20': 2269 2357 resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 2270 2358 engines: {node: '>=12'} ··· 2295 2383 cpu: [mips64el] 2296 2384 os: [linux] 2297 2385 2386 + '@esbuild/linux-mips64el@0.25.2': 2387 + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} 2388 + engines: {node: '>=18'} 2389 + cpu: [mips64el] 2390 + os: [linux] 2391 + 2298 2392 '@esbuild/linux-ppc64@0.18.20': 2299 2393 resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 2300 2394 engines: {node: '>=12'} ··· 2325 2419 cpu: [ppc64] 2326 2420 os: [linux] 2327 2421 2422 + '@esbuild/linux-ppc64@0.25.2': 2423 + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} 2424 + engines: {node: '>=18'} 2425 + cpu: [ppc64] 2426 + os: [linux] 2427 + 2328 2428 '@esbuild/linux-riscv64@0.18.20': 2329 2429 resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 2330 2430 engines: {node: '>=12'} ··· 2355 2455 cpu: [riscv64] 2356 2456 os: [linux] 2357 2457 2458 + '@esbuild/linux-riscv64@0.25.2': 2459 + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} 2460 + engines: {node: '>=18'} 2461 + cpu: [riscv64] 2462 + os: [linux] 2463 + 2358 2464 '@esbuild/linux-s390x@0.18.20': 2359 2465 resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 2360 2466 engines: {node: '>=12'} ··· 2381 2487 2382 2488 '@esbuild/linux-s390x@0.24.2': 2383 2489 resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} 2490 + engines: {node: '>=18'} 2491 + cpu: [s390x] 2492 + os: [linux] 2493 + 2494 + '@esbuild/linux-s390x@0.25.2': 2495 + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} 2384 2496 engines: {node: '>=18'} 2385 2497 cpu: [s390x] 2386 2498 os: [linux] ··· 2415 2527 cpu: [x64] 2416 2528 os: [linux] 2417 2529 2530 + '@esbuild/linux-x64@0.25.2': 2531 + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} 2532 + engines: {node: '>=18'} 2533 + cpu: [x64] 2534 + os: [linux] 2535 + 2418 2536 '@esbuild/netbsd-arm64@0.24.2': 2419 2537 resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} 2538 + engines: {node: '>=18'} 2539 + cpu: [arm64] 2540 + os: [netbsd] 2541 + 2542 + '@esbuild/netbsd-arm64@0.25.2': 2543 + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} 2420 2544 engines: {node: '>=18'} 2421 2545 cpu: [arm64] 2422 2546 os: [netbsd] ··· 2451 2575 cpu: [x64] 2452 2576 os: [netbsd] 2453 2577 2578 + '@esbuild/netbsd-x64@0.25.2': 2579 + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} 2580 + engines: {node: '>=18'} 2581 + cpu: [x64] 2582 + os: [netbsd] 2583 + 2454 2584 '@esbuild/openbsd-arm64@0.24.2': 2455 2585 resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} 2586 + engines: {node: '>=18'} 2587 + cpu: [arm64] 2588 + os: [openbsd] 2589 + 2590 + '@esbuild/openbsd-arm64@0.25.2': 2591 + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} 2456 2592 engines: {node: '>=18'} 2457 2593 cpu: [arm64] 2458 2594 os: [openbsd] ··· 2483 2619 2484 2620 '@esbuild/openbsd-x64@0.24.2': 2485 2621 resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} 2622 + engines: {node: '>=18'} 2623 + cpu: [x64] 2624 + os: [openbsd] 2625 + 2626 + '@esbuild/openbsd-x64@0.25.2': 2627 + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} 2486 2628 engines: {node: '>=18'} 2487 2629 cpu: [x64] 2488 2630 os: [openbsd] ··· 2517 2659 cpu: [x64] 2518 2660 os: [sunos] 2519 2661 2662 + '@esbuild/sunos-x64@0.25.2': 2663 + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} 2664 + engines: {node: '>=18'} 2665 + cpu: [x64] 2666 + os: [sunos] 2667 + 2520 2668 '@esbuild/win32-arm64@0.18.20': 2521 2669 resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 2522 2670 engines: {node: '>=12'} ··· 2543 2691 2544 2692 '@esbuild/win32-arm64@0.24.2': 2545 2693 resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} 2694 + engines: {node: '>=18'} 2695 + cpu: [arm64] 2696 + os: [win32] 2697 + 2698 + '@esbuild/win32-arm64@0.25.2': 2699 + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} 2546 2700 engines: {node: '>=18'} 2547 2701 cpu: [arm64] 2548 2702 os: [win32] ··· 2577 2731 cpu: [ia32] 2578 2732 os: [win32] 2579 2733 2734 + '@esbuild/win32-ia32@0.25.2': 2735 + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} 2736 + engines: {node: '>=18'} 2737 + cpu: [ia32] 2738 + os: [win32] 2739 + 2580 2740 '@esbuild/win32-x64@0.18.20': 2581 2741 resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 2582 2742 engines: {node: '>=12'} ··· 2603 2763 2604 2764 '@esbuild/win32-x64@0.24.2': 2605 2765 resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} 2766 + engines: {node: '>=18'} 2767 + cpu: [x64] 2768 + os: [win32] 2769 + 2770 + '@esbuild/win32-x64@0.25.2': 2771 + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} 2606 2772 engines: {node: '>=18'} 2607 2773 cpu: [x64] 2608 2774 os: [win32] ··· 4479 4645 '@shikijs/core@1.29.2': 4480 4646 resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} 4481 4647 4648 + '@shikijs/core@3.2.1': 4649 + resolution: {integrity: sha512-FhsdxMWYu/C11sFisEp7FMGBtX/OSSbnXZDMBhGuUDBNTdsoZlMSgQv5f90rwvzWAdWIW6VobD+G3IrazxA6dQ==} 4650 + 4482 4651 '@shikijs/engine-javascript@1.29.2': 4483 4652 resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} 4484 4653 4654 + '@shikijs/engine-javascript@3.2.1': 4655 + resolution: {integrity: sha512-eMdcUzN3FMQYxOmRf2rmU8frikzoSHbQDFH2hIuXsrMO+IBOCI9BeeRkCiBkcLDHeRKbOCtYMJK3D6U32ooU9Q==} 4656 + 4485 4657 '@shikijs/engine-oniguruma@1.29.2': 4486 4658 resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} 4659 + 4660 + '@shikijs/engine-oniguruma@3.2.1': 4661 + resolution: {integrity: sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==} 4487 4662 4488 4663 '@shikijs/langs@1.29.2': 4489 4664 resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} 4490 4665 4666 + '@shikijs/langs@3.2.1': 4667 + resolution: {integrity: sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==} 4668 + 4491 4669 '@shikijs/themes@1.29.2': 4492 4670 resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} 4493 4671 4672 + '@shikijs/themes@3.2.1': 4673 + resolution: {integrity: sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==} 4674 + 4494 4675 '@shikijs/types@1.29.2': 4495 4676 resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} 4677 + 4678 + '@shikijs/types@3.2.1': 4679 + resolution: {integrity: sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==} 4496 4680 4497 4681 '@shikijs/vscode-textmate@10.0.2': 4498 4682 resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} ··· 5373 5557 engines: {node: '>=0.4.0'} 5374 5558 hasBin: true 5375 5559 5560 + acorn@8.14.1: 5561 + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 5562 + engines: {node: '>=0.4.0'} 5563 + hasBin: true 5564 + 5376 5565 agent-base@6.0.2: 5377 5566 resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 5378 5567 engines: {node: '>= 6.0.0'} ··· 5526 5715 peerDependencies: 5527 5716 astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 5528 5717 5529 - astro@5.3.1: 5530 - resolution: {integrity: sha512-dfcuWKkGsYI6XH6zhSK4tHGFXRgEbPZZwZQ/VmGtKBnDfFW+3faq6k+ETKlKDeRB4LwDGtaeoH+US4HYC5w1SA==} 5718 + astro@5.6.1: 5719 + resolution: {integrity: sha512-aQ2TV7wIf+q2Oi6gGWMINHWEAZqoP0eH6/mihodfTJYATPWyd03JIGVfjtYUJlkNdNSKxDXwEe/r/Zx4CZ1FPg==} 5531 5720 engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} 5532 5721 hasBin: true 5533 5722 ··· 5776 5965 resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} 5777 5966 engines: {node: '>= 14.16.0'} 5778 5967 5968 + chokidar@4.0.3: 5969 + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 5970 + engines: {node: '>= 14.16.0'} 5971 + 5779 5972 chownr@1.1.4: 5780 5973 resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 5781 5974 ··· 5783 5976 resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} 5784 5977 engines: {node: '>=6.0'} 5785 5978 5786 - ci-info@4.1.0: 5787 - resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} 5979 + ci-info@4.2.0: 5980 + resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} 5788 5981 engines: {node: '>=8'} 5789 5982 5790 5983 cjs-module-lexer@1.4.1: ··· 5931 6124 resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 5932 6125 engines: {node: '>= 0.6'} 5933 6126 6127 + cookie@1.0.2: 6128 + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} 6129 + engines: {node: '>=18'} 6130 + 5934 6131 copy-anything@3.0.5: 5935 6132 resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 5936 6133 engines: {node: '>=12.13'} ··· 6436 6633 engines: {node: '>=18'} 6437 6634 hasBin: true 6438 6635 6636 + esbuild@0.25.2: 6637 + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} 6638 + engines: {node: '>=18'} 6639 + hasBin: true 6640 + 6439 6641 escalade@3.1.1: 6440 6642 resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 6441 6643 engines: {node: '>=6'} ··· 6640 6842 filter-obj@1.1.0: 6641 6843 resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} 6642 6844 engines: {node: '>=0.10.0'} 6643 - 6644 - find-up-simple@1.0.0: 6645 - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} 6646 - engines: {node: '>=18'} 6647 - 6648 - find-up@4.1.0: 6649 - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 6650 - engines: {node: '>=8'} 6651 6845 6652 6846 find-up@5.0.0: 6653 6847 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 6654 6848 engines: {node: '>=10'} 6655 6849 6656 - find-yarn-workspace-root2@1.2.16: 6657 - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} 6658 - 6659 6850 flat-cache@4.0.1: 6660 6851 resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 6661 6852 engines: {node: '>=16'} ··· 6963 7154 6964 7155 hast-util-to-html@9.0.4: 6965 7156 resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} 7157 + 7158 + hast-util-to-html@9.0.5: 7159 + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} 6966 7160 6967 7161 hast-util-to-jsx-runtime@2.3.2: 6968 7162 resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} ··· 7483 7677 resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 7484 7678 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 7485 7679 7486 - load-yaml-file@0.2.0: 7487 - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} 7488 - engines: {node: '>=6'} 7489 - 7490 7680 loader-runner@4.3.0: 7491 7681 resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} 7492 7682 engines: {node: '>=6.11.5'} ··· 7494 7684 local-pkg@1.0.0: 7495 7685 resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} 7496 7686 engines: {node: '>=14'} 7497 - 7498 - locate-path@5.0.0: 7499 - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 7500 - engines: {node: '>=8'} 7501 7687 7502 7688 locate-path@6.0.0: 7503 7689 resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} ··· 7955 8141 resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 7956 8142 engines: {node: '>=4'} 7957 8143 7958 - mrmime@2.0.0: 7959 - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 8144 + mrmime@2.0.1: 8145 + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 7960 8146 engines: {node: '>=10'} 7961 8147 7962 8148 ms@2.1.2: ··· 8218 8404 resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 8219 8405 engines: {node: '>=6'} 8220 8406 8407 + oniguruma-parser@0.5.4: 8408 + resolution: {integrity: sha512-yNxcQ8sKvURiTwP0mV6bLQCYE7NKfKRRWunhbZnXgxSmB1OXa1lHrN3o4DZd+0Si0kU5blidK7BcROO8qv5TZA==} 8409 + 8221 8410 oniguruma-to-es@2.3.0: 8222 8411 resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} 8412 + 8413 + oniguruma-to-es@4.1.0: 8414 + resolution: {integrity: sha512-SNwG909cSLo4vPyyPbU/VJkEc9WOXqu2ycBlfd1UCXLqk1IijcQktSBb2yRQ2UFPsDhpkaf+C1dtT3PkLK/yWA==} 8223 8415 8224 8416 open@8.4.2: 8225 8417 resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} ··· 8240 8432 resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 8241 8433 engines: {node: '>=0.10.0'} 8242 8434 8243 - p-limit@2.3.0: 8244 - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 8245 - engines: {node: '>=6'} 8246 - 8247 8435 p-limit@3.1.0: 8248 8436 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 8249 8437 engines: {node: '>=10'} ··· 8256 8444 resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} 8257 8445 engines: {node: '>=18'} 8258 8446 8259 - p-locate@4.1.0: 8260 - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 8261 - engines: {node: '>=8'} 8262 - 8263 8447 p-locate@5.0.0: 8264 8448 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 8265 8449 engines: {node: '>=10'} ··· 8280 8464 resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} 8281 8465 engines: {node: '>=14.16'} 8282 8466 8283 - p-try@2.2.0: 8284 - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 8285 - engines: {node: '>=6'} 8286 - 8287 8467 pac-proxy-agent@7.0.1: 8288 8468 resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} 8289 8469 engines: {node: '>= 14'} ··· 8297 8477 8298 8478 package-manager-detector@0.2.9: 8299 8479 resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} 8480 + 8481 + package-manager-detector@1.1.0: 8482 + resolution: {integrity: sha512-Y8f9qUlBzW8qauJjd/eu6jlpJZsuPJm2ZAV0cDVd420o4EdpH5RPdoCv+60/TdJflGatr4sDfpAL6ArWZbM5tA==} 8300 8483 8301 8484 pagefind@1.3.0: 8302 8485 resolution: {integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==} ··· 8415 8598 resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 8416 8599 engines: {node: '>=0.10.0'} 8417 8600 8418 - pify@4.0.1: 8419 - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 8420 - engines: {node: '>=6'} 8421 - 8422 8601 pirates@4.0.6: 8423 8602 resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 8424 8603 engines: {node: '>= 6'} 8425 8604 8426 - pkg-dir@4.2.0: 8427 - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 8428 - engines: {node: '>=8'} 8429 - 8430 8605 pkg-types@1.3.1: 8431 8606 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 8432 8607 ··· 8515 8690 resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} 8516 8691 engines: {node: ^10 || ^12 || >=14} 8517 8692 8693 + postcss@8.5.3: 8694 + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 8695 + engines: {node: ^10 || ^12 || >=14} 8696 + 8518 8697 postgres-array@2.0.0: 8519 8698 resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} 8520 8699 engines: {node: '>=4'} ··· 8568 8747 engines: {node: '>=10'} 8569 8748 hasBin: true 8570 8749 8571 - preferred-pm@4.1.1: 8572 - resolution: {integrity: sha512-rU+ZAv1Ur9jAUZtGPebQVQPzdGhNzaEiQ7VL9+cjsAWPHFYOccNXPNiev1CCDSOg/2j7UujM7ojNhpkuILEVNQ==} 8573 - engines: {node: '>=18.12'} 8574 - 8575 8750 prettier@2.8.7: 8576 8751 resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} 8577 8752 engines: {node: '>=10.13.0'} ··· 8634 8809 8635 8810 property-information@6.3.0: 8636 8811 resolution: {integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==} 8812 + 8813 + property-information@7.0.0: 8814 + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} 8637 8815 8638 8816 proto-list@1.2.4: 8639 8817 resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} ··· 8835 9013 8836 9014 regex-recursion@5.1.1: 8837 9015 resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} 9016 + 9017 + regex-recursion@6.0.2: 9018 + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} 8838 9019 8839 9020 regex-utilities@2.3.0: 8840 9021 resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} ··· 8842 9023 regex@5.1.1: 8843 9024 resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} 8844 9025 9026 + regex@6.0.1: 9027 + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} 9028 + 8845 9029 registry-auth-token@3.3.2: 8846 9030 resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} 8847 9031 ··· 8904 9088 8905 9089 remark-gfm@4.0.0: 8906 9090 resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} 9091 + 9092 + remark-gfm@4.0.1: 9093 + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} 8907 9094 8908 9095 remark-mdx-frontmatter@4.0.0: 8909 9096 resolution: {integrity: sha512-PZzAiDGOEfv1Ua7exQ8S5kKxkD8CDaSb4nM+1Mprs6u8dyvQifakh+kCj6NovfGXW+bTvrhjaR3srzjS2qJHKg==} ··· 9113 9300 shiki@1.29.2: 9114 9301 resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} 9115 9302 9303 + shiki@3.2.1: 9304 + resolution: {integrity: sha512-VML/2o1/KGYkEf/stJJ+s9Ypn7jUKQPomGLGYso4JJFMFxVDyPNsjsI3MB3KLjlMOeH44gyaPdXC6rik2WXvUQ==} 9305 + 9116 9306 shimmer@1.2.1: 9117 9307 resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} 9118 9308 ··· 9230 9420 peerDependencies: 9231 9421 '@astrojs/starlight': '>=0.30.0' 9232 9422 9233 - starlight-sidebar-topics@0.4.1: 9234 - resolution: {integrity: sha512-fzYVgccxUDBjdxgGXPDQzNI/GghEMhcdaxlDkkOFXzKvZQVX71/LAB/ZffGAB+EKkS3n9bF5YggYYBMuO6wKAw==} 9423 + starlight-sidebar-topics@0.6.0: 9424 + resolution: {integrity: sha512-ysmOR7zaHYKtk18/mpW4MbEMDioR/ZBsisu9bdQrq0v9BlHWpW7gAdWlqFWO9zdv1P7l0Mo1WKd0wJ0UtqOVEQ==} 9235 9425 engines: {node: '>=18'} 9236 9426 peerDependencies: 9237 9427 '@astrojs/starlight': '>=0.32.0' ··· 9295 9485 resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} 9296 9486 engines: {node: '>=0.10.0'} 9297 9487 9298 - strip-bom@3.0.0: 9299 - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 9300 - engines: {node: '>=4'} 9301 - 9302 9488 strip-final-newline@2.0.0: 9303 9489 resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 9304 9490 engines: {node: '>=6'} ··· 9541 9727 '@swc/wasm': 9542 9728 optional: true 9543 9729 9544 - tsconfck@3.1.4: 9545 - resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} 9730 + tsconfck@3.1.5: 9731 + resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} 9546 9732 engines: {node: ^18 || >=20} 9547 9733 hasBin: true 9548 9734 peerDependencies: ··· 9672 9858 ultrahtml@1.5.3: 9673 9859 resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==} 9674 9860 9861 + ultrahtml@1.6.0: 9862 + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} 9863 + 9675 9864 uncrypto@0.1.3: 9676 9865 resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} 9677 9866 ··· 9795 9984 resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} 9796 9985 engines: {node: '>=18.12.0'} 9797 9986 9798 - unstorage@1.14.4: 9799 - resolution: {integrity: sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg==} 9987 + unstorage@1.15.0: 9988 + resolution: {integrity: sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==} 9800 9989 peerDependencies: 9801 9990 '@azure/app-configuration': ^1.8.0 9802 9991 '@azure/cosmos': ^4.2.0 9803 9992 '@azure/data-tables': ^13.3.0 9804 - '@azure/identity': ^4.5.0 9993 + '@azure/identity': ^4.6.0 9805 9994 '@azure/keyvault-secrets': ^4.9.0 9806 9995 '@azure/storage-blob': ^12.26.0 9807 9996 '@capacitor/preferences': ^6.0.3 9808 - '@deno/kv': '>=0.8.4' 9997 + '@deno/kv': '>=0.9.0' 9809 9998 '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 9810 9999 '@planetscale/database': ^1.19.0 9811 10000 '@upstash/redis': ^1.34.3 9812 - '@vercel/blob': '>=0.27.0' 10001 + '@vercel/blob': '>=0.27.1' 9813 10002 '@vercel/kv': ^1.0.1 9814 10003 aws4fetch: ^1.0.20 9815 10004 db0: '>=0.2.1' 9816 10005 idb-keyval: ^6.2.1 9817 10006 ioredis: ^5.4.2 9818 - uploadthing: ^7.4.1 10007 + uploadthing: ^7.4.4 9819 10008 peerDependenciesMeta: 9820 10009 '@azure/app-configuration': 9821 10010 optional: true ··· 9959 10148 victory-vendor@36.9.2: 9960 10149 resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} 9961 10150 9962 - vite@6.1.0: 9963 - resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} 10151 + vite@6.2.5: 10152 + resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} 9964 10153 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 9965 10154 hasBin: true 9966 10155 peerDependencies: ··· 9999 10188 yaml: 10000 10189 optional: true 10001 10190 10002 - vitefu@1.0.5: 10003 - resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==} 10191 + vitefu@1.0.6: 10192 + resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==} 10004 10193 peerDependencies: 10005 10194 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 10006 10195 peerDependenciesMeta: ··· 10213 10402 resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} 10214 10403 engines: {node: '>=4'} 10215 10404 10216 - which-pm@3.0.1: 10217 - resolution: {integrity: sha512-v2JrMq0waAI4ju1xU5x3blsxBBMgdgZve580iYMN5frDaLGjbA24fok7wKCsya8KLVO19Ju4XDc5+zTZCJkQfg==} 10218 - engines: {node: '>=18.12'} 10219 - 10220 10405 which-typed-array@1.1.13: 10221 10406 resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} 10222 10407 engines: {node: '>= 0.4'} ··· 10357 10542 resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} 10358 10543 engines: {node: '>=12.20'} 10359 10544 10360 - yocto-spinner@0.2.0: 10361 - resolution: {integrity: sha512-Qu6WAqNLGleB687CCGcmgHIo8l+J19MX/32UrSMfbf/4L8gLoxjpOYoiHT1asiWyqvjRZbgvOhLlvne6E5Tbdw==} 10545 + yocto-spinner@0.2.1: 10546 + resolution: {integrity: sha512-lHHxjh0bXaLgdJy3cNnVb/F9myx3CkhrvSOEVTkaUgNMXnYFa2xYPVhtGnqhh3jErY2gParBOHallCbc7NrlZQ==} 10362 10547 engines: {node: '>=18.19'} 10363 10548 10364 10549 yoctocolors@2.1.1: ··· 10368 10553 zhead@2.2.4: 10369 10554 resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} 10370 10555 10371 - zod-to-json-schema@3.24.1: 10372 - resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} 10556 + zod-to-json-schema@3.24.5: 10557 + resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} 10373 10558 peerDependencies: 10374 10559 zod: ^3.24.1 10375 10560 ··· 10390 10575 10391 10576 zod@3.24.1: 10392 10577 resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} 10578 + 10579 + zod@3.24.2: 10580 + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} 10393 10581 10394 10582 zwitch@2.0.4: 10395 10583 resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} ··· 10417 10605 openapi3-ts: 4.1.2 10418 10606 zod: 3.23.8 10419 10607 10420 - '@astro-community/astro-embed-twitter@0.5.8(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10608 + '@astro-community/astro-embed-twitter@0.5.8(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10421 10609 dependencies: 10422 10610 '@astro-community/astro-embed-utils': 0.1.3 10423 - astro: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10611 + astro: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10424 10612 10425 10613 '@astro-community/astro-embed-utils@0.1.3': 10426 10614 dependencies: 10427 10615 linkedom: 0.14.26 10428 10616 10429 - '@astro-community/astro-embed-youtube@0.5.6(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10617 + '@astro-community/astro-embed-youtube@0.5.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10430 10618 dependencies: 10431 - astro: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10619 + astro: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10432 10620 lite-youtube-embed: 0.3.3 10433 10621 10434 10622 '@astrojs/check@0.9.4(prettier@3.4.2)(typescript@5.6.2)': ··· 10444 10632 10445 10633 '@astrojs/compiler@2.10.3': {} 10446 10634 10447 - '@astrojs/internal-helpers@0.5.1': {} 10635 + '@astrojs/compiler@2.11.0': {} 10636 + 10637 + '@astrojs/internal-helpers@0.6.1': {} 10448 10638 10449 10639 '@astrojs/language-server@2.15.4(prettier@3.4.2)(typescript@5.6.2)': 10450 10640 dependencies: ··· 10496 10686 transitivePeerDependencies: 10497 10687 - supports-color 10498 10688 10499 - '@astrojs/mdx@4.0.8(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10689 + '@astrojs/markdown-remark@6.3.1': 10690 + dependencies: 10691 + '@astrojs/internal-helpers': 0.6.1 10692 + '@astrojs/prism': 3.2.0 10693 + github-slugger: 2.0.0 10694 + hast-util-from-html: 2.0.3 10695 + hast-util-to-text: 4.0.2 10696 + import-meta-resolve: 4.1.0 10697 + js-yaml: 4.1.0 10698 + mdast-util-definitions: 6.0.0 10699 + rehype-raw: 7.0.0 10700 + rehype-stringify: 10.0.1 10701 + remark-gfm: 4.0.1 10702 + remark-parse: 11.0.0 10703 + remark-rehype: 11.1.1 10704 + remark-smartypants: 3.0.2 10705 + shiki: 3.2.1 10706 + smol-toml: 1.3.1 10707 + unified: 11.0.5 10708 + unist-util-remove-position: 5.0.0 10709 + unist-util-visit: 5.0.0 10710 + unist-util-visit-parents: 6.0.1 10711 + vfile: 6.0.3 10712 + transitivePeerDependencies: 10713 + - supports-color 10714 + 10715 + '@astrojs/mdx@4.0.8(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10500 10716 dependencies: 10501 10717 '@astrojs/markdown-remark': 6.1.0 10502 10718 '@mdx-js/mdx': 3.1.0(acorn@8.14.0) 10503 10719 acorn: 8.14.0 10504 - astro: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10720 + astro: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10505 10721 es-module-lexer: 1.6.0 10506 10722 estree-util-visit: 2.0.0 10507 10723 hast-util-to-html: 9.0.4 ··· 10519 10735 dependencies: 10520 10736 prismjs: 1.29.0 10521 10737 10522 - '@astrojs/react@4.2.0(@types/node@22.10.2)(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(jiti@1.21.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(terser@5.37.0)(yaml@2.6.1)': 10738 + '@astrojs/react@4.2.3(@types/node@22.10.2)(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(jiti@1.21.7)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(terser@5.37.0)(yaml@2.6.1)': 10523 10739 dependencies: 10524 10740 '@types/react': 19.0.10 10525 10741 '@types/react-dom': 19.0.4(@types/react@19.0.10) 10526 - '@vitejs/plugin-react': 4.3.4(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1)) 10742 + '@vitejs/plugin-react': 4.3.4(vite@6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1)) 10527 10743 react: 19.0.0 10528 10744 react-dom: 19.0.0(react@19.0.0) 10529 10745 ultrahtml: 1.5.3 10530 - vite: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 10746 + vite: 6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 10531 10747 transitivePeerDependencies: 10532 10748 - '@types/node' 10533 10749 - jiti ··· 10548 10764 stream-replace-string: 2.0.0 10549 10765 zod: 3.24.1 10550 10766 10551 - '@astrojs/starlight-tailwind@3.0.0(@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(@astrojs/tailwind@6.0.0(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))': 10767 + '@astrojs/starlight-tailwind@3.0.1(@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(@astrojs/tailwind@6.0.0(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))': 10552 10768 dependencies: 10553 - '@astrojs/starlight': 0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 10554 - '@astrojs/tailwind': 6.0.0(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 10769 + '@astrojs/starlight': 0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 10770 + '@astrojs/tailwind': 6.0.0(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 10555 10771 tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 10556 10772 10557 - '@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10773 + '@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))': 10558 10774 dependencies: 10559 - '@astrojs/mdx': 4.0.8(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 10775 + '@astrojs/mdx': 4.0.8(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 10560 10776 '@astrojs/sitemap': 3.2.1 10561 10777 '@pagefind/default-ui': 1.3.0 10562 10778 '@types/hast': 3.0.4 10563 10779 '@types/js-yaml': 4.0.9 10564 10780 '@types/mdast': 4.0.4 10565 - astro: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10566 - astro-expressive-code: 0.40.2(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 10781 + astro: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10782 + astro-expressive-code: 0.40.2(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 10567 10783 bcp-47: 2.1.0 10568 10784 hast-util-from-html: 2.0.3 10569 10785 hast-util-select: 6.0.3 ··· 10585 10801 transitivePeerDependencies: 10586 10802 - supports-color 10587 10803 10588 - '@astrojs/tailwind@6.0.0(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))': 10804 + '@astrojs/tailwind@6.0.0(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)))(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))': 10589 10805 dependencies: 10590 - astro: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10806 + astro: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 10591 10807 autoprefixer: 10.4.20(postcss@8.5.2) 10592 10808 postcss: 8.5.2 10593 10809 postcss-load-config: 4.0.2(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) ··· 10597 10813 10598 10814 '@astrojs/telemetry@3.2.0': 10599 10815 dependencies: 10600 - ci-info: 4.1.0 10816 + ci-info: 4.2.0 10601 10817 debug: 4.4.0 10602 10818 dlv: 1.1.3 10603 10819 dset: 3.1.4 ··· 11526 11742 - acorn 11527 11743 - supports-color 11528 11744 11529 - '@content-collections/next@0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': 11745 + '@content-collections/next@0.2.4(@content-collections/core@0.7.3(typescript@5.6.2))(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))': 11530 11746 dependencies: 11531 11747 '@content-collections/core': 0.7.3(typescript@5.6.2) 11532 11748 '@content-collections/integrations': 0.2.1(@content-collections/core@0.7.3(typescript@5.6.2)) 11533 - next: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 11749 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 11534 11750 11535 11751 '@cspotcode/source-map-support@0.8.1': 11536 11752 dependencies: ··· 11654 11870 '@esbuild/aix-ppc64@0.24.2': 11655 11871 optional: true 11656 11872 11873 + '@esbuild/aix-ppc64@0.25.2': 11874 + optional: true 11875 + 11657 11876 '@esbuild/android-arm64@0.18.20': 11658 11877 optional: true 11659 11878 ··· 11669 11888 '@esbuild/android-arm64@0.24.2': 11670 11889 optional: true 11671 11890 11891 + '@esbuild/android-arm64@0.25.2': 11892 + optional: true 11893 + 11672 11894 '@esbuild/android-arm@0.18.20': 11673 11895 optional: true 11674 11896 ··· 11684 11906 '@esbuild/android-arm@0.24.2': 11685 11907 optional: true 11686 11908 11909 + '@esbuild/android-arm@0.25.2': 11910 + optional: true 11911 + 11687 11912 '@esbuild/android-x64@0.18.20': 11688 11913 optional: true 11689 11914 ··· 11697 11922 optional: true 11698 11923 11699 11924 '@esbuild/android-x64@0.24.2': 11925 + optional: true 11926 + 11927 + '@esbuild/android-x64@0.25.2': 11700 11928 optional: true 11701 11929 11702 11930 '@esbuild/darwin-arm64@0.18.20': ··· 11714 11942 '@esbuild/darwin-arm64@0.24.2': 11715 11943 optional: true 11716 11944 11945 + '@esbuild/darwin-arm64@0.25.2': 11946 + optional: true 11947 + 11717 11948 '@esbuild/darwin-x64@0.18.20': 11718 11949 optional: true 11719 11950 ··· 11729 11960 '@esbuild/darwin-x64@0.24.2': 11730 11961 optional: true 11731 11962 11963 + '@esbuild/darwin-x64@0.25.2': 11964 + optional: true 11965 + 11732 11966 '@esbuild/freebsd-arm64@0.18.20': 11733 11967 optional: true 11734 11968 ··· 11742 11976 optional: true 11743 11977 11744 11978 '@esbuild/freebsd-arm64@0.24.2': 11979 + optional: true 11980 + 11981 + '@esbuild/freebsd-arm64@0.25.2': 11745 11982 optional: true 11746 11983 11747 11984 '@esbuild/freebsd-x64@0.18.20': ··· 11759 11996 '@esbuild/freebsd-x64@0.24.2': 11760 11997 optional: true 11761 11998 11999 + '@esbuild/freebsd-x64@0.25.2': 12000 + optional: true 12001 + 11762 12002 '@esbuild/linux-arm64@0.18.20': 11763 12003 optional: true 11764 12004 ··· 11774 12014 '@esbuild/linux-arm64@0.24.2': 11775 12015 optional: true 11776 12016 12017 + '@esbuild/linux-arm64@0.25.2': 12018 + optional: true 12019 + 11777 12020 '@esbuild/linux-arm@0.18.20': 11778 12021 optional: true 11779 12022 ··· 11789 12032 '@esbuild/linux-arm@0.24.2': 11790 12033 optional: true 11791 12034 12035 + '@esbuild/linux-arm@0.25.2': 12036 + optional: true 12037 + 11792 12038 '@esbuild/linux-ia32@0.18.20': 11793 12039 optional: true 11794 12040 ··· 11804 12050 '@esbuild/linux-ia32@0.24.2': 11805 12051 optional: true 11806 12052 12053 + '@esbuild/linux-ia32@0.25.2': 12054 + optional: true 12055 + 11807 12056 '@esbuild/linux-loong64@0.18.20': 11808 12057 optional: true 11809 12058 ··· 11819 12068 '@esbuild/linux-loong64@0.24.2': 11820 12069 optional: true 11821 12070 12071 + '@esbuild/linux-loong64@0.25.2': 12072 + optional: true 12073 + 11822 12074 '@esbuild/linux-mips64el@0.18.20': 11823 12075 optional: true 11824 12076 ··· 11834 12086 '@esbuild/linux-mips64el@0.24.2': 11835 12087 optional: true 11836 12088 12089 + '@esbuild/linux-mips64el@0.25.2': 12090 + optional: true 12091 + 11837 12092 '@esbuild/linux-ppc64@0.18.20': 11838 12093 optional: true 11839 12094 ··· 11849 12104 '@esbuild/linux-ppc64@0.24.2': 11850 12105 optional: true 11851 12106 12107 + '@esbuild/linux-ppc64@0.25.2': 12108 + optional: true 12109 + 11852 12110 '@esbuild/linux-riscv64@0.18.20': 11853 12111 optional: true 11854 12112 ··· 11862 12120 optional: true 11863 12121 11864 12122 '@esbuild/linux-riscv64@0.24.2': 12123 + optional: true 12124 + 12125 + '@esbuild/linux-riscv64@0.25.2': 11865 12126 optional: true 11866 12127 11867 12128 '@esbuild/linux-s390x@0.18.20': ··· 11879 12140 '@esbuild/linux-s390x@0.24.2': 11880 12141 optional: true 11881 12142 12143 + '@esbuild/linux-s390x@0.25.2': 12144 + optional: true 12145 + 11882 12146 '@esbuild/linux-x64@0.18.20': 11883 12147 optional: true 11884 12148 ··· 11894 12158 '@esbuild/linux-x64@0.24.2': 11895 12159 optional: true 11896 12160 12161 + '@esbuild/linux-x64@0.25.2': 12162 + optional: true 12163 + 11897 12164 '@esbuild/netbsd-arm64@0.24.2': 12165 + optional: true 12166 + 12167 + '@esbuild/netbsd-arm64@0.25.2': 11898 12168 optional: true 11899 12169 11900 12170 '@esbuild/netbsd-x64@0.18.20': ··· 11912 12182 '@esbuild/netbsd-x64@0.24.2': 11913 12183 optional: true 11914 12184 12185 + '@esbuild/netbsd-x64@0.25.2': 12186 + optional: true 12187 + 11915 12188 '@esbuild/openbsd-arm64@0.24.2': 12189 + optional: true 12190 + 12191 + '@esbuild/openbsd-arm64@0.25.2': 11916 12192 optional: true 11917 12193 11918 12194 '@esbuild/openbsd-x64@0.18.20': ··· 11930 12206 '@esbuild/openbsd-x64@0.24.2': 11931 12207 optional: true 11932 12208 12209 + '@esbuild/openbsd-x64@0.25.2': 12210 + optional: true 12211 + 11933 12212 '@esbuild/sunos-x64@0.18.20': 11934 12213 optional: true 11935 12214 ··· 11945 12224 '@esbuild/sunos-x64@0.24.2': 11946 12225 optional: true 11947 12226 12227 + '@esbuild/sunos-x64@0.25.2': 12228 + optional: true 12229 + 11948 12230 '@esbuild/win32-arm64@0.18.20': 11949 12231 optional: true 11950 12232 ··· 11960 12242 '@esbuild/win32-arm64@0.24.2': 11961 12243 optional: true 11962 12244 12245 + '@esbuild/win32-arm64@0.25.2': 12246 + optional: true 12247 + 11963 12248 '@esbuild/win32-ia32@0.18.20': 11964 12249 optional: true 11965 12250 ··· 11975 12260 '@esbuild/win32-ia32@0.24.2': 11976 12261 optional: true 11977 12262 12263 + '@esbuild/win32-ia32@0.25.2': 12264 + optional: true 12265 + 11978 12266 '@esbuild/win32-x64@0.18.20': 11979 12267 optional: true 11980 12268 ··· 11988 12276 optional: true 11989 12277 11990 12278 '@esbuild/win32-x64@0.24.2': 12279 + optional: true 12280 + 12281 + '@esbuild/win32-x64@0.25.2': 11991 12282 optional: true 11992 12283 11993 12284 '@expressive-code/core@0.40.2': ··· 13746 14037 - typescript 13747 14038 - vitest 13748 14039 13749 - '@scalar/api-reference@1.24.70(postcss@8.5.2)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2)': 14040 + '@scalar/api-reference@1.24.70(postcss@8.5.3)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2)': 13750 14041 dependencies: 13751 14042 '@floating-ui/vue': 1.1.1(vue@3.4.31(typescript@5.7.2)) 13752 14043 '@headlessui/vue': 1.7.22(vue@3.4.31(typescript@5.7.2)) ··· 13766 14057 github-slugger: 2.0.0 13767 14058 httpsnippet-lite: 3.0.5 13768 14059 nanoid: 5.0.7 13769 - postcss-nested: 6.0.1(postcss@8.5.2) 14060 + postcss-nested: 6.0.1(postcss@8.5.3) 13770 14061 unhead: 1.9.15 13771 14062 unified: 11.0.5 13772 14063 vue: 3.4.31(typescript@5.7.2) ··· 13835 14126 transitivePeerDependencies: 13836 14127 - typescript 13837 14128 13838 - '@scalar/hono-api-reference@0.5.131(postcss@8.5.2)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2)': 14129 + '@scalar/hono-api-reference@0.5.131(postcss@8.5.3)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2)': 13839 14130 dependencies: 13840 - '@scalar/api-reference': 1.24.70(postcss@8.5.2)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2) 14131 + '@scalar/api-reference': 1.24.70(postcss@8.5.3)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5))(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2) 13841 14132 hono: 4.7.4 13842 14133 transitivePeerDependencies: 13843 14134 - '@jest/globals' ··· 14055 14346 '@sentry/types': 8.9.2 14056 14347 '@sentry/utils': 8.9.2 14057 14348 14058 - '@sentry/nextjs@8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5))': 14349 + '@sentry/nextjs@8.46.0(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(esbuild@0.21.5))': 14059 14350 dependencies: 14060 14351 '@opentelemetry/api': 1.9.0 14061 14352 '@opentelemetry/semantic-conventions': 1.28.0 ··· 14068 14359 '@sentry/vercel-edge': 8.46.0 14069 14360 '@sentry/webpack-plugin': 2.22.7(encoding@0.1.13)(webpack@5.97.1(esbuild@0.21.5)) 14070 14361 chalk: 3.0.0 14071 - next: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14362 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14072 14363 resolve: 1.22.8 14073 14364 rollup: 3.29.5 14074 14365 stacktrace-parser: 0.1.10 ··· 14167 14458 '@types/hast': 3.0.4 14168 14459 hast-util-to-html: 9.0.4 14169 14460 14461 + '@shikijs/core@3.2.1': 14462 + dependencies: 14463 + '@shikijs/types': 3.2.1 14464 + '@shikijs/vscode-textmate': 10.0.2 14465 + '@types/hast': 3.0.4 14466 + hast-util-to-html: 9.0.5 14467 + 14170 14468 '@shikijs/engine-javascript@1.29.2': 14171 14469 dependencies: 14172 14470 '@shikijs/types': 1.29.2 14173 14471 '@shikijs/vscode-textmate': 10.0.2 14174 14472 oniguruma-to-es: 2.3.0 14175 14473 14474 + '@shikijs/engine-javascript@3.2.1': 14475 + dependencies: 14476 + '@shikijs/types': 3.2.1 14477 + '@shikijs/vscode-textmate': 10.0.2 14478 + oniguruma-to-es: 4.1.0 14479 + 14176 14480 '@shikijs/engine-oniguruma@1.29.2': 14177 14481 dependencies: 14178 14482 '@shikijs/types': 1.29.2 14179 14483 '@shikijs/vscode-textmate': 10.0.2 14180 14484 14485 + '@shikijs/engine-oniguruma@3.2.1': 14486 + dependencies: 14487 + '@shikijs/types': 3.2.1 14488 + '@shikijs/vscode-textmate': 10.0.2 14489 + 14181 14490 '@shikijs/langs@1.29.2': 14182 14491 dependencies: 14183 14492 '@shikijs/types': 1.29.2 14184 14493 14494 + '@shikijs/langs@3.2.1': 14495 + dependencies: 14496 + '@shikijs/types': 3.2.1 14497 + 14185 14498 '@shikijs/themes@1.29.2': 14186 14499 dependencies: 14187 14500 '@shikijs/types': 1.29.2 14501 + 14502 + '@shikijs/themes@3.2.1': 14503 + dependencies: 14504 + '@shikijs/types': 3.2.1 14188 14505 14189 14506 '@shikijs/types@1.29.2': 14507 + dependencies: 14508 + '@shikijs/vscode-textmate': 10.0.2 14509 + '@types/hast': 3.0.4 14510 + 14511 + '@shikijs/types@3.2.1': 14190 14512 dependencies: 14191 14513 '@shikijs/vscode-textmate': 10.0.2 14192 14514 '@types/hast': 3.0.4 ··· 14696 15018 '@trpc/server': 11.0.0-rc.666(typescript@5.6.2) 14697 15019 typescript: 5.6.2 14698 15020 14699 - '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2)': 15021 + '@trpc/next@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/react-query@11.0.0-rc.666(@tanstack/react-query@5.62.8(react@19.0.0))(@trpc/client@11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2))(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.6.2)': 14700 15022 dependencies: 14701 15023 '@trpc/client': 11.0.0-rc.666(@trpc/server@11.0.0-rc.666(typescript@5.6.2))(typescript@5.6.2) 14702 15024 '@trpc/server': 11.0.0-rc.666(typescript@5.6.2) 14703 - next: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 15025 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14704 15026 react: 19.0.0 14705 15027 react-dom: 19.0.0(react@19.0.0) 14706 15028 typescript: 5.6.2 ··· 15089 15411 is-buffer: 2.0.5 15090 15412 undici: 5.28.4 15091 15413 15092 - '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1))': 15414 + '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1))': 15093 15415 dependencies: 15094 15416 '@babel/core': 7.26.0 15095 15417 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) 15096 15418 '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) 15097 15419 '@types/babel__core': 7.20.5 15098 15420 react-refresh: 0.14.2 15099 - vite: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 15421 + vite: 6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 15100 15422 transitivePeerDependencies: 15101 15423 - supports-color 15102 15424 ··· 15384 15706 15385 15707 acorn@8.14.0: {} 15386 15708 15709 + acorn@8.14.1: {} 15710 + 15387 15711 agent-base@6.0.2: 15388 15712 dependencies: 15389 15713 debug: 4.4.0 ··· 15518 15842 15519 15843 astring@1.8.6: {} 15520 15844 15521 - astro-expressive-code@0.40.2(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)): 15845 + astro-expressive-code@0.40.2(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)): 15522 15846 dependencies: 15523 - astro: 5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 15847 + astro: 5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1) 15524 15848 rehype-expressive-code: 0.40.2 15525 15849 15526 - astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1): 15850 + astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1): 15527 15851 dependencies: 15528 - '@astrojs/compiler': 2.10.3 15529 - '@astrojs/internal-helpers': 0.5.1 15530 - '@astrojs/markdown-remark': 6.1.0 15852 + '@astrojs/compiler': 2.11.0 15853 + '@astrojs/internal-helpers': 0.6.1 15854 + '@astrojs/markdown-remark': 6.3.1 15531 15855 '@astrojs/telemetry': 3.2.0 15532 15856 '@oslojs/encoding': 1.1.0 15533 15857 '@rollup/pluginutils': 5.1.4(rollup@4.34.8) 15534 - '@types/cookie': 0.6.0 15535 - acorn: 8.14.0 15858 + acorn: 8.14.1 15536 15859 aria-query: 5.3.2 15537 15860 axobject-query: 4.1.0 15538 15861 boxen: 8.0.1 15539 - ci-info: 4.1.0 15862 + ci-info: 4.2.0 15540 15863 clsx: 2.1.1 15541 15864 common-ancestor-path: 1.0.1 15542 - cookie: 0.7.2 15865 + cookie: 1.0.2 15543 15866 cssesc: 3.0.0 15544 15867 debug: 4.4.0 15545 15868 deterministic-object-hash: 2.0.2 ··· 15548 15871 dlv: 1.1.3 15549 15872 dset: 3.1.4 15550 15873 es-module-lexer: 1.6.0 15551 - esbuild: 0.24.2 15874 + esbuild: 0.25.2 15552 15875 estree-walker: 3.0.3 15553 15876 flattie: 1.1.1 15554 15877 github-slugger: 2.0.0 ··· 15558 15881 kleur: 4.1.5 15559 15882 magic-string: 0.30.17 15560 15883 magicast: 0.3.5 15561 - mrmime: 2.0.0 15884 + mrmime: 2.0.1 15562 15885 neotraverse: 0.6.18 15563 15886 p-limit: 6.2.0 15564 15887 p-queue: 8.1.0 15888 + package-manager-detector: 1.1.0 15565 15889 picomatch: 4.0.2 15566 - preferred-pm: 4.1.1 15567 15890 prompts: 2.4.2 15568 15891 rehype: 13.0.2 15569 15892 semver: 7.7.1 15570 - shiki: 1.29.2 15893 + shiki: 3.2.1 15571 15894 tinyexec: 0.3.2 15572 15895 tinyglobby: 0.2.12 15573 - tsconfck: 3.1.4(typescript@5.6.2) 15574 - ultrahtml: 1.5.3 15896 + tsconfck: 3.1.5(typescript@5.6.2) 15897 + ultrahtml: 1.6.0 15575 15898 unist-util-visit: 5.0.0 15576 - unstorage: 1.14.4 15899 + unstorage: 1.15.0 15577 15900 vfile: 6.0.3 15578 - vite: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 15579 - vitefu: 1.0.5(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1)) 15580 - which-pm: 3.0.1 15901 + vite: 6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 15902 + vitefu: 1.0.6(vite@6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1)) 15581 15903 xxhash-wasm: 1.1.0 15582 15904 yargs-parser: 21.1.1 15583 - yocto-spinner: 0.2.0 15584 - zod: 3.24.1 15585 - zod-to-json-schema: 3.24.1(zod@3.24.1) 15586 - zod-to-ts: 1.2.0(typescript@5.6.2)(zod@3.24.1) 15905 + yocto-spinner: 0.2.1 15906 + zod: 3.24.2 15907 + zod-to-json-schema: 3.24.5(zod@3.24.2) 15908 + zod-to-ts: 1.2.0(typescript@5.6.2)(zod@3.24.2) 15587 15909 optionalDependencies: 15588 15910 sharp: 0.33.5 15589 15911 transitivePeerDependencies: ··· 15915 16237 dependencies: 15916 16238 readdirp: 4.0.2 15917 16239 16240 + chokidar@4.0.3: 16241 + dependencies: 16242 + readdirp: 4.0.2 16243 + 15918 16244 chownr@1.1.4: {} 15919 16245 15920 16246 chrome-trace-event@1.0.4: {} 15921 16247 15922 - ci-info@4.1.0: {} 16248 + ci-info@4.2.0: {} 15923 16249 15924 16250 cjs-module-lexer@1.4.1: {} 15925 16251 ··· 16054 16380 cookie@0.7.1: {} 16055 16381 16056 16382 cookie@0.7.2: {} 16383 + 16384 + cookie@1.0.2: {} 16057 16385 16058 16386 copy-anything@3.0.5: 16059 16387 dependencies: ··· 16584 16912 '@esbuild/win32-ia32': 0.24.2 16585 16913 '@esbuild/win32-x64': 0.24.2 16586 16914 16915 + esbuild@0.25.2: 16916 + optionalDependencies: 16917 + '@esbuild/aix-ppc64': 0.25.2 16918 + '@esbuild/android-arm': 0.25.2 16919 + '@esbuild/android-arm64': 0.25.2 16920 + '@esbuild/android-x64': 0.25.2 16921 + '@esbuild/darwin-arm64': 0.25.2 16922 + '@esbuild/darwin-x64': 0.25.2 16923 + '@esbuild/freebsd-arm64': 0.25.2 16924 + '@esbuild/freebsd-x64': 0.25.2 16925 + '@esbuild/linux-arm': 0.25.2 16926 + '@esbuild/linux-arm64': 0.25.2 16927 + '@esbuild/linux-ia32': 0.25.2 16928 + '@esbuild/linux-loong64': 0.25.2 16929 + '@esbuild/linux-mips64el': 0.25.2 16930 + '@esbuild/linux-ppc64': 0.25.2 16931 + '@esbuild/linux-riscv64': 0.25.2 16932 + '@esbuild/linux-s390x': 0.25.2 16933 + '@esbuild/linux-x64': 0.25.2 16934 + '@esbuild/netbsd-arm64': 0.25.2 16935 + '@esbuild/netbsd-x64': 0.25.2 16936 + '@esbuild/openbsd-arm64': 0.25.2 16937 + '@esbuild/openbsd-x64': 0.25.2 16938 + '@esbuild/sunos-x64': 0.25.2 16939 + '@esbuild/win32-arm64': 0.25.2 16940 + '@esbuild/win32-ia32': 0.25.2 16941 + '@esbuild/win32-x64': 0.25.2 16942 + 16587 16943 escalade@3.1.1: {} 16588 16944 16589 16945 escalade@3.1.2: {} ··· 16786 17142 16787 17143 filter-obj@1.1.0: {} 16788 17144 16789 - find-up-simple@1.0.0: {} 16790 - 16791 - find-up@4.1.0: 16792 - dependencies: 16793 - locate-path: 5.0.0 16794 - path-exists: 4.0.0 16795 - 16796 17145 find-up@5.0.0: 16797 17146 dependencies: 16798 17147 locate-path: 6.0.0 16799 17148 path-exists: 4.0.0 16800 - 16801 - find-yarn-workspace-root2@1.2.16: 16802 - dependencies: 16803 - micromatch: 4.0.8 16804 - pkg-dir: 4.2.0 16805 17149 16806 17150 flat-cache@4.0.1: 16807 17151 dependencies: ··· 17269 17613 html-void-elements: 3.0.0 17270 17614 mdast-util-to-hast: 13.2.0 17271 17615 property-information: 6.3.0 17616 + space-separated-tokens: 2.0.2 17617 + stringify-entities: 4.0.3 17618 + zwitch: 2.0.4 17619 + 17620 + hast-util-to-html@9.0.5: 17621 + dependencies: 17622 + '@types/hast': 3.0.4 17623 + '@types/unist': 3.0.2 17624 + ccount: 2.0.1 17625 + comma-separated-tokens: 2.0.3 17626 + hast-util-whitespace: 3.0.0 17627 + html-void-elements: 3.0.0 17628 + mdast-util-to-hast: 13.2.0 17629 + property-information: 7.0.0 17272 17630 space-separated-tokens: 2.0.2 17273 17631 stringify-entities: 4.0.3 17274 17632 zwitch: 2.0.4 ··· 17812 18170 17813 18171 load-tsconfig@0.2.5: {} 17814 18172 17815 - load-yaml-file@0.2.0: 17816 - dependencies: 17817 - graceful-fs: 4.2.11 17818 - js-yaml: 3.14.1 17819 - pify: 4.0.1 17820 - strip-bom: 3.0.0 17821 - 17822 18173 loader-runner@4.3.0: {} 17823 18174 17824 18175 local-pkg@1.0.0: 17825 18176 dependencies: 17826 18177 mlly: 1.7.3 17827 18178 pkg-types: 1.3.1 17828 - 17829 - locate-path@5.0.0: 17830 - dependencies: 17831 - p-locate: 4.1.0 17832 18179 17833 18180 locate-path@6.0.0: 17834 18181 dependencies: ··· 18672 19019 18673 19020 mri@1.2.0: {} 18674 19021 18675 - mrmime@2.0.0: {} 19022 + mrmime@2.0.1: {} 18676 19023 18677 19024 ms@2.1.2: {} 18678 19025 ··· 18706 19053 18707 19054 netmask@2.0.2: {} 18708 19055 19056 + next-auth@5.0.0-beta.25(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 19057 + dependencies: 19058 + '@auth/core': 0.37.2 19059 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 19060 + react: 19.0.0 19061 + 18709 19062 next-auth@5.0.0-beta.25(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18710 19063 dependencies: 18711 19064 '@auth/core': 0.37.2 18712 19065 next: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18713 19066 react: 19.0.0 18714 19067 18715 - next-plausible@3.12.4(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 19068 + next-plausible@3.12.4(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18716 19069 dependencies: 18717 - next: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 19070 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 19071 + react: 19.0.0 19072 + react-dom: 19.0.0(react@19.0.0) 19073 + 19074 + next-themes@0.2.1(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 19075 + dependencies: 19076 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18718 19077 react: 19.0.0 18719 19078 react-dom: 19.0.0(react@19.0.0) 18720 19079 ··· 18750 19109 - '@babel/core' 18751 19110 - babel-plugin-macros 18752 19111 19112 + next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 19113 + dependencies: 19114 + '@next/env': 15.2.4 19115 + '@swc/counter': 0.1.3 19116 + '@swc/helpers': 0.5.15 19117 + busboy: 1.6.0 19118 + caniuse-lite: 1.0.30001689 19119 + postcss: 8.4.31 19120 + react: 19.0.0 19121 + react-dom: 19.0.0(react@19.0.0) 19122 + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) 19123 + optionalDependencies: 19124 + '@next/swc-darwin-arm64': 15.2.4 19125 + '@next/swc-darwin-x64': 15.2.4 19126 + '@next/swc-linux-arm64-gnu': 15.2.4 19127 + '@next/swc-linux-arm64-musl': 15.2.4 19128 + '@next/swc-linux-x64-gnu': 15.2.4 19129 + '@next/swc-linux-x64-musl': 15.2.4 19130 + '@next/swc-win32-arm64-msvc': 15.2.4 19131 + '@next/swc-win32-x64-msvc': 15.2.4 19132 + '@opentelemetry/api': 1.9.0 19133 + sharp: 0.33.5 19134 + transitivePeerDependencies: 19135 + - '@babel/core' 19136 + - babel-plugin-macros 19137 + 18753 19138 next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 18754 19139 dependencies: 18755 19140 '@next/env': 15.2.4 ··· 18760 19145 postcss: 8.4.31 18761 19146 react: 19.0.0 18762 19147 react-dom: 19.0.0(react@19.0.0) 18763 - styled-jsx: 5.1.6(@babel/core@7.24.5)(react@19.0.0) 19148 + styled-jsx: 5.1.6(react@19.0.0) 18764 19149 optionalDependencies: 18765 19150 '@next/swc-darwin-arm64': 15.2.4 18766 19151 '@next/swc-darwin-x64': 15.2.4 ··· 18853 19238 dependencies: 18854 19239 boolbase: 1.0.0 18855 19240 18856 - nuqs@2.2.3(next@15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 19241 + nuqs@2.2.3(next@15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0): 18857 19242 dependencies: 18858 19243 mitt: 3.0.1 18859 19244 react: 19.0.0 18860 19245 optionalDependencies: 18861 - next: 15.2.4(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 19246 + next: 15.2.4(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 18862 19247 18863 19248 oauth4webapi@2.10.4: {} 18864 19249 ··· 18893 19278 dependencies: 18894 19279 mimic-fn: 2.1.0 18895 19280 19281 + oniguruma-parser@0.5.4: {} 19282 + 18896 19283 oniguruma-to-es@2.3.0: 18897 19284 dependencies: 18898 19285 emoji-regex-xs: 1.0.0 18899 19286 regex: 5.1.1 18900 19287 regex-recursion: 5.1.1 18901 19288 19289 + oniguruma-to-es@4.1.0: 19290 + dependencies: 19291 + emoji-regex-xs: 1.0.0 19292 + oniguruma-parser: 0.5.4 19293 + regex: 6.0.1 19294 + regex-recursion: 6.0.2 19295 + 18902 19296 open@8.4.2: 18903 19297 dependencies: 18904 19298 define-lazy-prop: 2.0.0 ··· 18934 19328 18935 19329 os-tmpdir@1.0.2: {} 18936 19330 18937 - p-limit@2.3.0: 18938 - dependencies: 18939 - p-try: 2.2.0 18940 - 18941 19331 p-limit@3.1.0: 18942 19332 dependencies: 18943 19333 yocto-queue: 0.1.0 ··· 18950 19340 dependencies: 18951 19341 yocto-queue: 1.1.1 18952 19342 18953 - p-locate@4.1.0: 18954 - dependencies: 18955 - p-limit: 2.3.0 18956 - 18957 19343 p-locate@5.0.0: 18958 19344 dependencies: 18959 19345 p-limit: 3.1.0 ··· 18972 19358 p-timeout: 6.1.3 18973 19359 18974 19360 p-timeout@6.1.3: {} 18975 - 18976 - p-try@2.2.0: {} 18977 19361 18978 19362 pac-proxy-agent@7.0.1: 18979 19363 dependencies: ··· 18997 19381 package-json-from-dist@1.0.1: {} 18998 19382 18999 19383 package-manager-detector@0.2.9: {} 19384 + 19385 + package-manager-detector@1.1.0: {} 19000 19386 19001 19387 pagefind@1.3.0: 19002 19388 optionalDependencies: ··· 19119 19505 19120 19506 pify@2.3.0: {} 19121 19507 19122 - pify@4.0.1: {} 19123 - 19124 19508 pirates@4.0.6: {} 19125 19509 19126 - pkg-dir@4.2.0: 19127 - dependencies: 19128 - find-up: 4.1.0 19129 - 19130 19510 pkg-types@1.3.1: 19131 19511 dependencies: 19132 19512 confbox: 0.1.8 ··· 19167 19547 camelcase-css: 2.0.1 19168 19548 postcss: 8.5.2 19169 19549 19170 - postcss-load-config@4.0.1(postcss@8.5.2)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)): 19550 + postcss-load-config@4.0.1(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)): 19171 19551 dependencies: 19172 19552 lilconfig: 2.1.0 19173 19553 yaml: 2.3.3 19174 19554 optionalDependencies: 19175 - postcss: 8.5.2 19555 + postcss: 8.5.3 19176 19556 ts-node: 10.9.2(@types/node@20.8.0)(typescript@5.6.2) 19177 19557 19178 - postcss-load-config@4.0.1(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)): 19558 + postcss-load-config@4.0.1(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)): 19179 19559 dependencies: 19180 19560 lilconfig: 2.1.0 19181 19561 yaml: 2.3.3 19182 19562 optionalDependencies: 19183 - postcss: 8.5.2 19563 + postcss: 8.5.3 19184 19564 ts-node: 10.9.2(@types/node@22.10.2)(typescript@5.6.2) 19185 19565 19186 19566 postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@20.14.8)(typescript@5.6.2)): ··· 19223 19603 postcss: 8.5.2 19224 19604 ts-node: 10.9.2(@types/node@22.10.2)(typescript@5.7.2) 19225 19605 19226 - postcss-nested@6.0.1(postcss@8.5.2): 19606 + postcss-nested@6.0.1(postcss@8.5.3): 19227 19607 dependencies: 19228 - postcss: 8.5.2 19608 + postcss: 8.5.3 19229 19609 postcss-selector-parser: 6.1.2 19230 19610 19231 19611 postcss-nested@6.2.0(postcss@8.4.38): ··· 19268 19648 picocolors: 1.1.1 19269 19649 source-map-js: 1.2.1 19270 19650 19651 + postcss@8.5.3: 19652 + dependencies: 19653 + nanoid: 3.3.8 19654 + picocolors: 1.1.1 19655 + source-map-js: 1.2.1 19656 + 19271 19657 postgres-array@2.0.0: {} 19272 19658 19273 19659 postgres-array@3.0.2: ··· 19333 19719 tunnel-agent: 0.6.0 19334 19720 optional: true 19335 19721 19336 - preferred-pm@4.1.1: 19337 - dependencies: 19338 - find-up-simple: 1.0.0 19339 - find-yarn-workspace-root2: 1.2.16 19340 - which-pm: 3.0.1 19341 - 19342 19722 prettier@2.8.7: 19343 19723 optional: true 19344 19724 ··· 19391 19771 react-is: 16.13.1 19392 19772 19393 19773 property-information@6.3.0: {} 19774 + 19775 + property-information@7.0.0: {} 19394 19776 19395 19777 proto-list@1.2.4: {} 19396 19778 ··· 19676 20058 regex: 5.1.1 19677 20059 regex-utilities: 2.3.0 19678 20060 20061 + regex-recursion@6.0.2: 20062 + dependencies: 20063 + regex-utilities: 2.3.0 20064 + 19679 20065 regex-utilities@2.3.0: {} 19680 20066 19681 20067 regex@5.1.1: 20068 + dependencies: 20069 + regex-utilities: 2.3.0 20070 + 20071 + regex@6.0.1: 19682 20072 dependencies: 19683 20073 regex-utilities: 2.3.0 19684 20074 ··· 19825 20215 transitivePeerDependencies: 19826 20216 - supports-color 19827 20217 20218 + remark-gfm@4.0.1: 20219 + dependencies: 20220 + '@types/mdast': 4.0.4 20221 + mdast-util-gfm: 3.0.0 20222 + micromark-extension-gfm: 3.0.0 20223 + remark-parse: 11.0.0 20224 + remark-stringify: 11.0.0 20225 + unified: 11.0.5 20226 + transitivePeerDependencies: 20227 + - supports-color 20228 + 19828 20229 remark-mdx-frontmatter@4.0.0: 19829 20230 dependencies: 19830 20231 '@types/mdast': 4.0.4 ··· 20134 20535 '@shikijs/vscode-textmate': 10.0.2 20135 20536 '@types/hast': 3.0.4 20136 20537 20538 + shiki@3.2.1: 20539 + dependencies: 20540 + '@shikijs/core': 3.2.1 20541 + '@shikijs/engine-javascript': 3.2.1 20542 + '@shikijs/engine-oniguruma': 3.2.1 20543 + '@shikijs/langs': 3.2.1 20544 + '@shikijs/themes': 3.2.1 20545 + '@shikijs/types': 3.2.1 20546 + '@shikijs/vscode-textmate': 10.0.2 20547 + '@types/hast': 3.0.4 20548 + 20137 20549 shimmer@1.2.1: {} 20138 20550 20139 20551 side-channel@1.0.4: ··· 20256 20668 dependencies: 20257 20669 type-fest: 0.7.1 20258 20670 20259 - starlight-showcases@0.3.0(@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)): 20671 + starlight-showcases@0.3.0(@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)))(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)): 20260 20672 dependencies: 20261 - '@astro-community/astro-embed-twitter': 0.5.8(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20262 - '@astro-community/astro-embed-youtube': 0.5.6(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20263 - '@astrojs/starlight': 0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20673 + '@astro-community/astro-embed-twitter': 0.5.8(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20674 + '@astro-community/astro-embed-youtube': 0.5.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20675 + '@astrojs/starlight': 0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20264 20676 transitivePeerDependencies: 20265 20677 - astro 20266 20678 20267 - starlight-sidebar-topics@0.4.1(@astrojs/starlight@0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))): 20679 + starlight-sidebar-topics@0.6.0(@astrojs/starlight@0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1))): 20268 20680 dependencies: 20269 - '@astrojs/starlight': 0.32.1(astro@5.3.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20681 + '@astrojs/starlight': 0.32.6(astro@5.6.1(@types/node@22.10.2)(jiti@1.21.7)(rollup@4.34.8)(terser@5.37.0)(typescript@5.6.2)(yaml@2.6.1)) 20682 + picomatch: 4.0.2 20270 20683 20271 20684 storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@6.0.5): 20272 20685 dependencies: ··· 20333 20746 20334 20747 strip-bom-string@1.0.0: {} 20335 20748 20336 - strip-bom@3.0.0: {} 20337 - 20338 20749 strip-final-newline@2.0.0: {} 20339 20750 20340 20751 strip-indent@3.0.0: ··· 20371 20782 optionalDependencies: 20372 20783 '@babel/core': 7.24.5 20373 20784 20785 + styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.0.0): 20786 + dependencies: 20787 + client-only: 0.0.1 20788 + react: 19.0.0 20789 + optionalDependencies: 20790 + '@babel/core': 7.26.0 20791 + 20792 + styled-jsx@5.1.6(react@19.0.0): 20793 + dependencies: 20794 + client-only: 0.0.1 20795 + react: 19.0.0 20796 + 20374 20797 sucrase@3.34.0: 20375 20798 dependencies: 20376 20799 '@jridgewell/gen-mapping': 0.3.5 ··· 20611 21034 terser@5.37.0: 20612 21035 dependencies: 20613 21036 '@jridgewell/source-map': 0.3.6 20614 - acorn: 8.14.0 21037 + acorn: 8.14.1 20615 21038 commander: 2.20.3 20616 21039 source-map-support: 0.5.21 20617 21040 ··· 20772 21195 yn: 3.1.1 20773 21196 optional: true 20774 21197 20775 - tsconfck@3.1.4(typescript@5.6.2): 21198 + tsconfck@3.1.5(typescript@5.6.2): 20776 21199 optionalDependencies: 20777 21200 typescript: 5.6.2 20778 21201 ··· 20782 21205 20783 21206 tslib@2.8.1: {} 20784 21207 20785 - tsup@7.2.0(postcss@8.5.2)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2): 21208 + tsup@7.2.0(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2))(typescript@5.6.2): 20786 21209 dependencies: 20787 21210 bundle-require: 4.0.2(esbuild@0.18.20) 20788 21211 cac: 6.7.14 ··· 20792 21215 execa: 5.1.1 20793 21216 globby: 11.1.0 20794 21217 joycon: 3.1.1 20795 - postcss-load-config: 4.0.1(postcss@8.5.2)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)) 21218 + postcss-load-config: 4.0.1(postcss@8.5.3)(ts-node@10.9.2(@types/node@20.8.0)(typescript@5.6.2)) 20796 21219 resolve-from: 5.0.0 20797 21220 rollup: 3.29.4 20798 21221 source-map: 0.8.0-beta.0 20799 21222 sucrase: 3.34.0 20800 21223 tree-kill: 1.2.2 20801 21224 optionalDependencies: 20802 - postcss: 8.5.2 21225 + postcss: 8.5.3 20803 21226 typescript: 5.6.2 20804 21227 transitivePeerDependencies: 20805 21228 - supports-color 20806 21229 - ts-node 20807 21230 20808 - tsup@7.2.0(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))(typescript@5.6.2): 21231 + tsup@7.2.0(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2))(typescript@5.6.2): 20809 21232 dependencies: 20810 21233 bundle-require: 4.0.2(esbuild@0.18.20) 20811 21234 cac: 6.7.14 ··· 20815 21238 execa: 5.1.1 20816 21239 globby: 11.1.0 20817 21240 joycon: 3.1.1 20818 - postcss-load-config: 4.0.1(postcss@8.5.2)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 21241 + postcss-load-config: 4.0.1(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.6.2)) 20819 21242 resolve-from: 5.0.0 20820 21243 rollup: 3.29.4 20821 21244 source-map: 0.8.0-beta.0 20822 21245 sucrase: 3.34.0 20823 21246 tree-kill: 1.2.2 20824 21247 optionalDependencies: 20825 - postcss: 8.5.2 21248 + postcss: 8.5.3 20826 21249 typescript: 5.6.2 20827 21250 transitivePeerDependencies: 20828 21251 - supports-color ··· 20892 21315 uhyphen@0.2.0: {} 20893 21316 20894 21317 ultrahtml@1.5.3: {} 21318 + 21319 + ultrahtml@1.6.0: {} 20895 21320 20896 21321 uncrypto@0.1.3: {} 20897 21322 ··· 21053 21478 acorn: 8.14.0 21054 21479 webpack-virtual-modules: 0.6.2 21055 21480 21056 - unstorage@1.14.4: 21481 + unstorage@1.15.0: 21057 21482 dependencies: 21058 21483 anymatch: 3.1.3 21059 - chokidar: 3.6.0 21484 + chokidar: 4.0.3 21060 21485 destr: 2.0.3 21061 21486 h3: 1.15.0 21062 21487 lru-cache: 10.4.3 ··· 21198 21623 d3-time: 3.1.0 21199 21624 d3-timer: 3.0.1 21200 21625 21201 - vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1): 21626 + vite@6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1): 21202 21627 dependencies: 21203 - esbuild: 0.24.2 21204 - postcss: 8.5.2 21628 + esbuild: 0.25.2 21629 + postcss: 8.5.3 21205 21630 rollup: 4.34.8 21206 21631 optionalDependencies: 21207 21632 '@types/node': 22.10.2 ··· 21210 21635 terser: 5.37.0 21211 21636 yaml: 2.6.1 21212 21637 21213 - vitefu@1.0.5(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1)): 21638 + vitefu@1.0.6(vite@6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1)): 21214 21639 optionalDependencies: 21215 - vite: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 21640 + vite: 6.2.5(@types/node@22.10.2)(jiti@1.21.7)(terser@5.37.0)(yaml@2.6.1) 21216 21641 21217 21642 vlq@0.2.3: {} 21218 21643 ··· 21385 21810 '@webassemblyjs/ast': 1.14.1 21386 21811 '@webassemblyjs/wasm-edit': 1.14.1 21387 21812 '@webassemblyjs/wasm-parser': 1.14.1 21388 - acorn: 8.14.0 21813 + acorn: 8.14.1 21389 21814 browserslist: 4.24.3 21390 21815 chrome-trace-event: 1.0.4 21391 21816 enhanced-resolve: 5.17.1 ··· 21425 21850 21426 21851 which-pm-runs@1.1.0: {} 21427 21852 21428 - which-pm@3.0.1: 21429 - dependencies: 21430 - load-yaml-file: 0.2.0 21431 - 21432 21853 which-typed-array@1.1.13: 21433 21854 dependencies: 21434 21855 available-typed-arrays: 1.0.5 ··· 21559 21980 21560 21981 yocto-queue@1.1.1: {} 21561 21982 21562 - yocto-spinner@0.2.0: 21983 + yocto-spinner@0.2.1: 21563 21984 dependencies: 21564 21985 yoctocolors: 2.1.1 21565 21986 ··· 21567 21988 21568 21989 zhead@2.2.4: {} 21569 21990 21570 - zod-to-json-schema@3.24.1(zod@3.24.1): 21991 + zod-to-json-schema@3.24.5(zod@3.24.2): 21571 21992 dependencies: 21572 - zod: 3.24.1 21993 + zod: 3.24.2 21573 21994 21574 - zod-to-ts@1.2.0(typescript@5.6.2)(zod@3.24.1): 21995 + zod-to-ts@1.2.0(typescript@5.6.2)(zod@3.24.2): 21575 21996 dependencies: 21576 21997 typescript: 5.6.2 21577 - zod: 3.24.1 21998 + zod: 3.24.2 21578 21999 21579 22000 zod-validation-error@3.3.0(zod@3.23.8): 21580 22001 dependencies: ··· 21583 22004 zod@3.23.8: {} 21584 22005 21585 22006 zod@3.24.1: {} 22007 + 22008 + zod@3.24.2: {} 21586 22009 21587 22010 zwitch@2.0.4: {}