From 6b9f3531f27402afafd8b5c19df8bc1b9ff92ade Mon Sep 17 00:00:00 2001 From: Andreas Thomas Date: Thu, 5 Dec 2024 15:04:40 +0100 Subject: [PATCH] feat: ingesting analytics tags (#2698) * wip: analytics tags * [autofix.ci] apply automated fixes * feat: add verifications_per_hour_v2 * feat: insert tags * docs: specify 10 tags per request * test: run serially cause gh actions suck --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> --- .github/workflows/deploy.yaml | 15 + .../job_clickhouse_migration_preview.yaml | 31 + .../job_clickhouse_migration_production.yaml | 31 + .../workflows/job_deploy_api_production.yaml | 10 +- Taskfile.yml | 7 + apps/api/src/pkg/auth/root_key.ts | 1 + apps/api/src/routes/v1_keys_verifyKey.ts | 17 + apps/docs/apis/features/analytics.mdx | 58 + apps/docs/mint.json | 3 + apps/docs/package.json | 2 +- ...verifications.raw_key_verifications_v1.sql | 11 + ...ications.key_verifications_per_hour_v2.sql | 19 + ...tions.key_verifications_per_hour_mv_v2.sql | 27 + ...fications.key_verifications_per_day_v2.sql | 19 + ...ations.key_verifications_per_day_mv_v2.sql | 27 + ...cations.key_verifications_per_month_v2.sql | 19 + ...ions.key_verifications_per_month_mv_v2.sql | 27 + ...cations.key_verifications_per_month_v2.sql | 33 + ...cations.key_verifications_per_month_v2.sql | 16 + internal/clickhouse/src/client/client.ts | 16 +- .../src/insert_verifications.test.ts | 8 +- .../clickhouse/src/latest_verifications.ts | 2 + internal/clickhouse/src/testutil.ts | 14 +- .../clickhouse/src/verification_tags.test.ts | 132 +++ internal/clickhouse/src/verifications.ts | 39 +- .../src/verifications_billing.test.ts | 4 +- internal/clickhouse/vitest.config.ts | 12 + packages/error/src/errors/base.ts | 2 + pnpm-lock.yaml | 1028 ++++++++--------- 29 files changed, 1073 insertions(+), 557 deletions(-) create mode 100644 .github/workflows/job_clickhouse_migration_preview.yaml create mode 100644 .github/workflows/job_clickhouse_migration_production.yaml create mode 100644 internal/clickhouse/schema/027_add_tags_to_verifications.raw_key_verifications_v1.sql create mode 100644 internal/clickhouse/schema/028_create_verifications.key_verifications_per_hour_v2.sql create mode 100644 internal/clickhouse/schema/029_create_verifications.key_verifications_per_hour_mv_v2.sql create mode 100644 internal/clickhouse/schema/030_create_verifications.key_verifications_per_day_v2.sql create mode 100644 internal/clickhouse/schema/031_create_verifications.key_verifications_per_day_mv_v2.sql create mode 100644 internal/clickhouse/schema/032_create_verifications.key_verifications_per_month_v2.sql create mode 100644 internal/clickhouse/schema/033_create_verifications.key_verifications_per_month_mv_v2.sql create mode 100644 internal/clickhouse/schema/034_billing_read_from_verifications.key_verifications_per_month_v2.sql create mode 100644 internal/clickhouse/schema/035_business_update_active_workspaces_keys_per_month_mv_v1_read_from_verifications.key_verifications_per_month_v2.sql create mode 100644 internal/clickhouse/src/verification_tags.test.ts create mode 100644 internal/clickhouse/vitest.config.ts diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 811a325045..68384b05ed 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -129,6 +129,7 @@ jobs: needs: - api_canary_test - agent_production_deployment + uses: ./.github/workflows/job_deploy_api_production.yaml secrets: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} @@ -170,3 +171,17 @@ jobs: uses: ./.github/workflows/job_deploy_api_enterprise.yaml secrets: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + + clickhouse_migration_preview: + needs: api_local_test + uses: ./.github/workflows/job_clickhouse_migration_preview.yaml + secrets: + CLICKHOUSE_URL: ${{ secrets.CLICKHOUSE_URL }} + + clickhouse_migration_production: + needs: + - api_preview_test + - agent_staging_deployment + uses: ./.github/workflows/job_clickhouse_migration_production.yaml + secrets: + CLICKHOUSE_URL: ${{ secrets.CLICKHOUSE_URL }} diff --git a/.github/workflows/job_clickhouse_migration_preview.yaml b/.github/workflows/job_clickhouse_migration_preview.yaml new file mode 100644 index 0000000000..5529740fc0 --- /dev/null +++ b/.github/workflows/job_clickhouse_migration_preview.yaml @@ -0,0 +1,31 @@ +name: ClickHouse Migration Production +on: + workflow_call: + secrets: + CLICKHOUSE_URL: + required: true + + + +jobs: + deploy: + environment: ClickHouse Production Migration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install + uses: ./.github/actions/install + with: + go: true + + - name: Install goose + run: go install github.com/pressly/goose/v3/cmd/goose@latest + + + - name: Deploy + run: goose up + working-directory: internal/clickhouse/schema + env: + GOOSE_DRIVER: clickhouse + GOOSE_DB_STRING: ${{ secrets.CLICKHOUSE_URL }} diff --git a/.github/workflows/job_clickhouse_migration_production.yaml b/.github/workflows/job_clickhouse_migration_production.yaml new file mode 100644 index 0000000000..0af9c60a48 --- /dev/null +++ b/.github/workflows/job_clickhouse_migration_production.yaml @@ -0,0 +1,31 @@ +name: ClickHouse Migration Preview +on: + workflow_call: + secrets: + CLICKHOUSE_URL: + required: true + + + +jobs: + deploy: + environment: Preview + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install + uses: ./.github/actions/install + with: + go: true + + - name: Install gooes + run: go install github.com/pressly/goose/v3/cmd/goose@latest + + + - name: Deploy + run: goose up + working-directory: internal/clickhouse/schema + env: + GOOSE_DRIVER: clickhouse + GOOSE_DB_STRING: ${{ secrets.CLICKHOUSE_URL }} diff --git a/.github/workflows/job_deploy_api_production.yaml b/.github/workflows/job_deploy_api_production.yaml index 0bfdcc9424..3494018c1c 100644 --- a/.github/workflows/job_deploy_api_production.yaml +++ b/.github/workflows/job_deploy_api_production.yaml @@ -1,11 +1,11 @@ -name: Deploy API Production +name: ClickHouse Migration on: workflow_call: - secrets: - CLOUDFLARE_API_TOKEN: + secrets: + CLOUDFLARE_API_TOKEN: required: true - + jobs: deploy: @@ -26,4 +26,4 @@ jobs: run: wrangler deploy --env=production --var VERSION:$(git rev-parse --short HEAD) working-directory: apps/api env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} \ No newline at end of file + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/Taskfile.yml b/Taskfile.yml index 862a8ccd1a..978da9a18c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -26,6 +26,13 @@ tasks: GOOSE_MIGRATION_DIR: ./internal/clickhouse/schema cmds: - goose up + migrate-clickhouse-reset: + env: + GOOSE_DRIVER: clickhouse + GOOSE_DBSTRING: "tcp://default:password@127.0.0.1:9000" + GOOSE_MIGRATION_DIR: ./internal/clickhouse/schema + cmds: + - goose down-to 0 migrate-db: diff --git a/apps/api/src/pkg/auth/root_key.ts b/apps/api/src/pkg/auth/root_key.ts index a35ae54235..ffee62ae72 100644 --- a/apps/api/src/pkg/auth/root_key.ts +++ b/apps/api/src/pkg/auth/root_key.ts @@ -62,6 +62,7 @@ export async function rootKeyAuth(c: Context, permissionQuery?: Permiss // @ts-expect-error - the cf object will be there on cloudflare region: c.req.cf?.region, request_id: c.get("requestId"), + tags: [], }), ); diff --git a/apps/api/src/routes/v1_keys_verifyKey.ts b/apps/api/src/routes/v1_keys_verifyKey.ts index 83a4c87f6d..dbf301c163 100644 --- a/apps/api/src/routes/v1_keys_verifyKey.ts +++ b/apps/api/src/routes/v1_keys_verifyKey.ts @@ -30,6 +30,22 @@ The key will be verified against the api's configuration. If the key does not be description: "The key to verify", example: "sk_1234", }), + + tags: z + .array(z.string().min(1).max(128)) + .max(10) + .optional() + .openapi({ + description: `Tags do not influence the outcome of a verification. + They can be added to filter or aggregate historical verification data for your analytics needs. + + To unkey, a tag is simply a string, we don't enforce any schema but leave that up to you. + The only exception is that each tag must be between 1 and 128 characters long. + + A typical setup would be to add key-value pairs of resources or locations, that you need later when querying. + `, + example: ["path=/v1/users/123", "region=us-east-1"], + }), authorization: z .object({ permissions: z.any(permissionQuerySchema).openapi("PermissionQuery", { @@ -362,6 +378,7 @@ export const registerV1KeysVerifyKey = (app: App) => region: c.req.raw.cf.colo ?? "", outcome: val.code ?? "VALID", identity_id: val.identity?.id, + tags: req.tags ?? [], }), ); diff --git a/apps/docs/apis/features/analytics.mdx b/apps/docs/apis/features/analytics.mdx index 81accac7c7..c3ace49d8f 100644 --- a/apps/docs/apis/features/analytics.mdx +++ b/apps/docs/apis/features/analytics.mdx @@ -21,3 +21,61 @@ Our per key analytics give you a deep dive into each individual key, giving usag Per key analytics + + +## Tags + +You can add tags to verification requests to aggregate or filter data when querying. + +For example you might want to add the path of your API as a tag: `path=/v1/my-path` and then later retrieve a breakdown of api key usage per unique path. + +Unkey does not parse tags in any special way. +The only limitations are: +- Tags are strings. +- You can specify up to 10 tags per request. +- Each tag must be between (including) 1 and 128 characters. + +That being said, having some structure for your tags could be benefitial for you. +A common theme is treating them as key-value pairs and specifying them with either a colon or equal-sign as delimiter. +``` +key:value +key=value +``` + +Since Unkey does not know what API routes your user has called or which resources they interact with, we encourage you to record these in the tags. +Here's an example tags for a fictional blog API: + + +```json +[ + "path=/v1/posts.createPost", + "postId=post_1asofijqknslkfqWF", + "region=us-east-1", + "apiVersion=f8ad21bd", // a git sha of your deployment or semver +] +``` + +### Using tags + +Tags can be added in the request body. + +```bash Providing Tags {7-10} +curl --request POST \ + --url https://api.unkey.dev/v1/keys.verifyKey \ + --header 'Content-Type: application/json' \ + --data '{ + "apiId": "api_1234", + "key": "sk_1234", + "tags": [ + "tag1", + "path=/v1/my-resource/123" + ] +}' +``` + + +### Querying tags + +We have only rolled out tag ingestion so far to allow you to start recording data as early as possible. + +We're working on new query capabilities including filtering and aggregating by tags. diff --git a/apps/docs/mint.json b/apps/docs/mint.json index 4c5cd14bce..25317ee705 100644 --- a/apps/docs/mint.json +++ b/apps/docs/mint.json @@ -413,6 +413,9 @@ "api": { "baseUrl": "https://api.unkey.dev" }, + "codeBlock": { + "mode": "auto" + }, "redirects": [ { "source": "/onboarding", diff --git a/apps/docs/package.json b/apps/docs/package.json index 95719f792b..a524da0041 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -8,7 +8,7 @@ "keywords": [], "author": "Andreas Thomas & James Perkins", "devDependencies": { - "mintlify": "^4.0.182" + "mintlify": "^4.0.289" }, "dependencies": { "sharp": "^0.33.4" diff --git a/internal/clickhouse/schema/027_add_tags_to_verifications.raw_key_verifications_v1.sql b/internal/clickhouse/schema/027_add_tags_to_verifications.raw_key_verifications_v1.sql new file mode 100644 index 0000000000..06b384707b --- /dev/null +++ b/internal/clickhouse/schema/027_add_tags_to_verifications.raw_key_verifications_v1.sql @@ -0,0 +1,11 @@ +-- +goose up +ALTER TABLE verifications.raw_key_verifications_v1 +ADD COLUMN IF NOT EXISTS tags Array(String) DEFAULT []; + + +-- +goose down + + + +ALTER TABLE verifications.raw_key_verifications_v1 +DROP COLUMN IF EXISTS tags; diff --git a/internal/clickhouse/schema/028_create_verifications.key_verifications_per_hour_v2.sql b/internal/clickhouse/schema/028_create_verifications.key_verifications_per_hour_v2.sql new file mode 100644 index 0000000000..fa83cd0cef --- /dev/null +++ b/internal/clickhouse/schema/028_create_verifications.key_verifications_per_hour_v2.sql @@ -0,0 +1,19 @@ +-- +goose up +CREATE TABLE verifications.key_verifications_per_hour_v2 +( + time DateTime, + workspace_id String, + key_space_id String, + identity_id String, + key_id String, + outcome LowCardinality(String), + tags Array(String), + count Int64 +) +ENGINE = SummingMergeTree() +ORDER BY (workspace_id, key_space_id, identity_id, key_id, time, tags) +; + + +-- +goose down +DROP TABLE verifications.key_verifications_per_hour_v2; diff --git a/internal/clickhouse/schema/029_create_verifications.key_verifications_per_hour_mv_v2.sql b/internal/clickhouse/schema/029_create_verifications.key_verifications_per_hour_mv_v2.sql new file mode 100644 index 0000000000..23bd8f56d2 --- /dev/null +++ b/internal/clickhouse/schema/029_create_verifications.key_verifications_per_hour_mv_v2.sql @@ -0,0 +1,27 @@ +-- +goose up +CREATE MATERIALIZED VIEW verifications.key_verifications_per_hour_mv_v2 +TO verifications.key_verifications_per_hour_v2 +AS +SELECT + workspace_id, + key_space_id, + identity_id, + key_id, + outcome, + count(*) as count, + toStartOfHour(fromUnixTimestamp64Milli(time)) AS time, + tags +FROM verifications.raw_key_verifications_v1 +GROUP BY + workspace_id, + key_space_id, + identity_id, + key_id, + outcome, + time, + tags +; + + +-- +goose down +DROP VIEW verifications.key_verifications_per_hour_mv_v2; diff --git a/internal/clickhouse/schema/030_create_verifications.key_verifications_per_day_v2.sql b/internal/clickhouse/schema/030_create_verifications.key_verifications_per_day_v2.sql new file mode 100644 index 0000000000..48018969b7 --- /dev/null +++ b/internal/clickhouse/schema/030_create_verifications.key_verifications_per_day_v2.sql @@ -0,0 +1,19 @@ +-- +goose up +CREATE TABLE verifications.key_verifications_per_day_v2 +( + time DateTime, + workspace_id String, + key_space_id String, + identity_id String, + key_id String, + outcome LowCardinality(String), + tags Array(String), + count Int64 +) +ENGINE = SummingMergeTree() +ORDER BY (workspace_id, key_space_id, identity_id, key_id, time, tags) +; + + +-- +goose down +DROP TABLE verifications.key_verifications_per_day_v2; diff --git a/internal/clickhouse/schema/031_create_verifications.key_verifications_per_day_mv_v2.sql b/internal/clickhouse/schema/031_create_verifications.key_verifications_per_day_mv_v2.sql new file mode 100644 index 0000000000..dbb8568e08 --- /dev/null +++ b/internal/clickhouse/schema/031_create_verifications.key_verifications_per_day_mv_v2.sql @@ -0,0 +1,27 @@ +-- +goose up +CREATE MATERIALIZED VIEW verifications.key_verifications_per_day_mv_v2 +TO verifications.key_verifications_per_day_v2 +AS +SELECT + workspace_id, + key_space_id, + identity_id, + key_id, + outcome, + count(*) as count, + toStartOfDay(fromUnixTimestamp64Milli(time)) AS time, + tags +FROM verifications.raw_key_verifications_v1 +GROUP BY + workspace_id, + key_space_id, + identity_id, + key_id, + outcome, + time, + tags +; + + +-- +goose down +DROP VIEW verifications.key_verifications_per_day_mv_v2; diff --git a/internal/clickhouse/schema/032_create_verifications.key_verifications_per_month_v2.sql b/internal/clickhouse/schema/032_create_verifications.key_verifications_per_month_v2.sql new file mode 100644 index 0000000000..a037c26018 --- /dev/null +++ b/internal/clickhouse/schema/032_create_verifications.key_verifications_per_month_v2.sql @@ -0,0 +1,19 @@ +-- +goose up +CREATE TABLE verifications.key_verifications_per_month_v2 +( + time DateTime, + workspace_id String, + key_space_id String, + identity_id String, + key_id String, + outcome LowCardinality(String), + tags Array(String), + count Int64 +) +ENGINE = SummingMergeTree() +ORDER BY (workspace_id, key_space_id, identity_id, key_id, time, tags) +; + + +-- +goose down +DROP TABLE verifications.key_verifications_per_month_v2; diff --git a/internal/clickhouse/schema/033_create_verifications.key_verifications_per_month_mv_v2.sql b/internal/clickhouse/schema/033_create_verifications.key_verifications_per_month_mv_v2.sql new file mode 100644 index 0000000000..a045769a07 --- /dev/null +++ b/internal/clickhouse/schema/033_create_verifications.key_verifications_per_month_mv_v2.sql @@ -0,0 +1,27 @@ +-- +goose up +CREATE MATERIALIZED VIEW verifications.key_verifications_per_month_mv_v2 +TO verifications.key_verifications_per_month_v2 +AS +SELECT + workspace_id, + key_space_id, + identity_id, + key_id, + outcome, + count(*) as count, + toStartOfMonth(fromUnixTimestamp64Milli(time)) AS time, + tags +FROM verifications.raw_key_verifications_v1 +GROUP BY + workspace_id, + key_space_id, + identity_id, + key_id, + outcome, + time, + tags +; + + +-- +goose down +DROP VIEW verifications.key_verifications_per_month_mv_v2; diff --git a/internal/clickhouse/schema/034_billing_read_from_verifications.key_verifications_per_month_v2.sql b/internal/clickhouse/schema/034_billing_read_from_verifications.key_verifications_per_month_v2.sql new file mode 100644 index 0000000000..cd5d6fbd3a --- /dev/null +++ b/internal/clickhouse/schema/034_billing_read_from_verifications.key_verifications_per_month_v2.sql @@ -0,0 +1,33 @@ +-- +goose up +ALTER TABLE billing.billable_verifications_per_month_mv_v1 +MODIFY QUERY +SELECT + workspace_id, + count(*) AS count, + toYear(time) AS year, + toMonth(time) AS month +FROM verifications.key_verifications_per_month_v2 +WHERE outcome = 'VALID' +GROUP BY + workspace_id, + year, + month +; + + +-- +goose down + +ALTER TABLE billing.billable_verifications_per_month_mv_v1 +MODIFY QUERY +SELECT + workspace_id, + count(*) AS count, + toYear(time) AS year, + toMonth(time) AS month +FROM verifications.key_verifications_per_month_v1 +WHERE outcome = 'VALID' +GROUP BY + workspace_id, + year, + month +; diff --git a/internal/clickhouse/schema/035_business_update_active_workspaces_keys_per_month_mv_v1_read_from_verifications.key_verifications_per_month_v2.sql b/internal/clickhouse/schema/035_business_update_active_workspaces_keys_per_month_mv_v1_read_from_verifications.key_verifications_per_month_v2.sql new file mode 100644 index 0000000000..1a22f97904 --- /dev/null +++ b/internal/clickhouse/schema/035_business_update_active_workspaces_keys_per_month_mv_v1_read_from_verifications.key_verifications_per_month_v2.sql @@ -0,0 +1,16 @@ +-- +goose up +ALTER TABLE business.active_workspaces_keys_per_month_mv_v1 +MODIFY QUERY +SELECT + workspace_id, toDate(time) as time +FROM verifications.key_verifications_per_month_v2 +; + +-- +goose down + +ALTER TABLE business.active_workspaces_keys_per_month_mv_v1 +MODIFY QUERY +SELECT + workspace_id, toDate(time) as time +FROM verifications.key_verifications_per_month_v1 +; diff --git a/internal/clickhouse/src/client/client.ts b/internal/clickhouse/src/client/client.ts index 934dd96816..d6306ada36 100644 --- a/internal/clickhouse/src/client/client.ts +++ b/internal/clickhouse/src/client/client.ts @@ -40,17 +40,19 @@ export class Client implements Querier, Inserter { if (validParams?.error) { return Err(new QueryError(`Bad params: ${validParams.error.message}`, { query: "" })); } - const res = await this.client - .query({ + let unparsedRows: Array = []; + try { + const res = await this.client.query({ query: req.query, query_params: validParams?.data, format: "JSONEachRow", - }) - .catch((err) => { - throw new Error(`${err.message} ${req.query}, params: ${JSON.stringify(params)}`); }); - const rows = await res.json(); - const parsed = z.array(req.schema).safeParse(rows); + unparsedRows = await res.json(); + } catch (err) { + const message = err instanceof Error ? err.message : JSON.stringify(err); + return Err(new QueryError(`Unable to query clickhouse: ${message}`, { query: req.query })); + } + const parsed = z.array(req.schema).safeParse(unparsedRows); if (parsed.error) { return Err(new QueryError(`Malformed data: ${parsed.error.message}`, { query: req.query })); } diff --git a/internal/clickhouse/src/insert_verifications.test.ts b/internal/clickhouse/src/insert_verifications.test.ts index 520619474f..a72b6dcc3a 100644 --- a/internal/clickhouse/src/insert_verifications.test.ts +++ b/internal/clickhouse/src/insert_verifications.test.ts @@ -19,11 +19,13 @@ test( workspace_id: "workspace_id", key_space_id: "key_space_id", key_id: "key_id", - outcome: "VALID", + outcome: "VALID" as const, region: "test", - } as const; + tags: ["tag"], + }; - await ch.verifications.insert(verification); + const { err: insertErr } = await ch.verifications.insert(verification); + expect(insertErr).toBeUndefined(); const latestVerifications = await ch.verifications.logs({ workspaceId: verification.workspace_id, diff --git a/internal/clickhouse/src/latest_verifications.ts b/internal/clickhouse/src/latest_verifications.ts index 18733dd9a8..2bc63078e6 100644 --- a/internal/clickhouse/src/latest_verifications.ts +++ b/internal/clickhouse/src/latest_verifications.ts @@ -14,6 +14,7 @@ export function getLatestVerifications(ch: Querier) { time, outcome, region, + tags FROM verifications.raw_key_verifications_v1 WHERE workspace_id = {workspaceId: String} AND key_space_id = {keySpaceId: String} @@ -25,6 +26,7 @@ export function getLatestVerifications(ch: Querier) { time: z.number(), outcome: z.string(), region: z.string(), + tags: z.array(z.string()), }), }); diff --git a/internal/clickhouse/src/testutil.ts b/internal/clickhouse/src/testutil.ts index 1013f99df1..47cd5c50d0 100644 --- a/internal/clickhouse/src/testutil.ts +++ b/internal/clickhouse/src/testutil.ts @@ -30,7 +30,10 @@ export class ClickHouseContainer { await this.container.stop(); } - static async start(t: TaskContext): Promise { + static async start( + t: TaskContext, + opts?: { keepContainer?: boolean }, + ): Promise { const network = await new Network().start(); const container = await new GenericContainer("bitnami/clickhouse:latest") @@ -41,9 +44,12 @@ export class ClickHouseContainer { .withNetworkMode(network.getName()) .withExposedPorts(8123, 9000) .start(); - t.onTestFinished(async () => { - await container.stop(); - }); + if (!opts?.keepContainer) { + t.onTestFinished(async () => { + await container.stop(); + }); + } + const dsn = `tcp://${ClickHouseContainer.username}:${ClickHouseContainer.password}@${container .getName() .replace(/^\//, "")}:9000`; diff --git a/internal/clickhouse/src/verification_tags.test.ts b/internal/clickhouse/src/verification_tags.test.ts new file mode 100644 index 0000000000..4d64a8679c --- /dev/null +++ b/internal/clickhouse/src/verification_tags.test.ts @@ -0,0 +1,132 @@ +import { describe, expect, test } from "vitest"; +import { ClickHouse } from "./index"; + +import { ClickHouseContainer } from "./testutil"; + +test( + "tags are inserted correctly", + { + timeout: 300_000, + }, + async (t) => { + const container = await ClickHouseContainer.start(t, { keepContainer: true }); + + const ch = new ClickHouse({ url: container.url() }); + + const tagsCases: Array> = [ + ["key1:val1"], + ["key1:val1", "key2:val2"], + Array.from({ length: 100 }) + .map((_, i) => `tag_${i}`) + .sort(), + ]; + + for (const tags of tagsCases) { + const verification = { + request_id: "1", + time: Date.now(), + workspace_id: crypto.randomUUID(), + key_space_id: crypto.randomUUID(), + key_id: crypto.randomUUID(), + outcome: "VALID", + region: "test", + tags: tags, + } as const; + + const { err: insertErr } = await ch.verifications.insert(verification); + expect(insertErr).toBeUndefined(); + + const latestVerifications = await ch.verifications.logs({ + workspaceId: verification.workspace_id, + keySpaceId: verification.key_space_id, + keyId: verification.key_id, + }); + + expect(latestVerifications.err).toBeUndefined(); + expect(latestVerifications.val!.length).toBe(1); + expect(latestVerifications.val![0].tags).toEqual(verification.tags); + } + }, +); + +describe("materialized views", () => { + for (const mv of ["per_hour", "per_day", "per_month"]) { + describe(mv, () => { + const verificationsWithTags: Array> = [ + [], + ["A"], + ["B"], + ["C"], + ["A", "B"], + ["A", "B", "D"], + ["B", "A", "C"], + ]; + + test( + `returns ${verificationsWithTags.length} verifications in total`, + { + timeout: 300_000, + }, + async (t) => { + const container = await ClickHouseContainer.start(t); + + const ch = new ClickHouse({ url: container.url() }); + + const workspaceId = crypto.randomUUID(); + const keySpaceId = crypto.randomUUID(); + const keyId = crypto.randomUUID(); + + const { err: insertErr } = await ch.verifications.insert( + verificationsWithTags.map((tags, i) => ({ + request_id: i.toString(), + time: Date.now(), + workspace_id: workspaceId, + key_space_id: keySpaceId, + key_id: keyId, + outcome: "VALID", + region: "test", + tags: tags, + })), + ); + expect(insertErr).toBeUndefined(); + const allVerifications = await ch.verifications.logs({ + workspaceId, + keySpaceId, + keyId, + }); + + /** + * Assert all of the rows have been written to clickhouse + */ + expect(allVerifications.err).toBeUndefined(); + expect(allVerifications.val!.length).toBe(verificationsWithTags.length); + + /** + * Wait for materialized views to be updated + */ + await new Promise((r) => setTimeout(r, 5000)); + + const q = { + per_hour: ch.verifications.perHour, + per_day: ch.verifications.perDay, + per_month: ch.verifications.perMonth, + }[mv]!; + const mvRes = await q({ + workspaceId, + keySpaceId, + keyId, + start: Date.now() - 60 * 24 * 60 * 60 * 1000, + end: Date.now(), + }); + + expect(mvRes.err).toBeUndefined(); + + const total = mvRes.val!.reduce((sum, v) => { + return sum + v.count; + }, 0); + expect(total).toBe(verificationsWithTags.length); + }, + ); + }); + } +}); diff --git a/internal/clickhouse/src/verifications.ts b/internal/clickhouse/src/verifications.ts index d97a6d76fc..70ace1277f 100644 --- a/internal/clickhouse/src/verifications.ts +++ b/internal/clickhouse/src/verifications.ts @@ -24,6 +24,7 @@ const schema = z.object({ time: dateTimeToUnix, outcome, count: z.number().int(), + tags: z.array(z.string()), }); export function insertVerification(ch: Inserter) { @@ -36,6 +37,7 @@ export function insertVerification(ch: Inserter) { key_space_id: z.string(), key_id: z.string(), region: z.string(), + tags: z.array(z.string()).transform((arr) => arr.sort()), outcome: z.enum([ "VALID", "RATE_LIMITED", @@ -56,15 +58,16 @@ export function getVerificationsPerHour(ch: Querier) { SELECT time, outcome, - sum(count) as count - FROM verifications.key_verifications_per_hour_v1 + sum(count) as count, + tags + FROM verifications.key_verifications_per_hour_v2 WHERE workspace_id = {workspaceId: String} AND key_space_id = {keySpaceId: String} AND time >= fromUnixTimestamp64Milli({start: Int64}) - AND time < fromUnixTimestamp64Milli({end: Int64}) + AND time <= fromUnixTimestamp64Milli({end: Int64}) ${args.keyId ? "AND key_id = {keyId: String}" : ""} - GROUP BY time, outcome + GROUP BY time, outcome, tags ORDER BY time ASC WITH FILL FROM toStartOfHour(fromUnixTimestamp64Milli({start: Int64})) @@ -86,15 +89,16 @@ export function getVerificationsPerDay(ch: Querier) { SELECT time, outcome, - sum(count) as count - FROM verifications.key_verifications_per_day_v1 + sum(count) as count, + tags + FROM verifications.key_verifications_per_day_v2 WHERE workspace_id = {workspaceId: String} AND key_space_id = {keySpaceId: String} AND time >= fromUnixTimestamp64Milli({start: Int64}) - AND time < fromUnixTimestamp64Milli({end: Int64}) + AND time <= fromUnixTimestamp64Milli({end: Int64}) ${args.keyId ? "AND key_id = {keyId: String}" : ""} - GROUP BY time, outcome + GROUP BY time, outcome, tags ORDER BY time ASC WITH FILL FROM toStartOfDay(fromUnixTimestamp64Milli({start: Int64})) @@ -112,26 +116,23 @@ export function getVerificationsPerMonth(ch: Querier) { SELECT time, outcome, - sum(count) as count - FROM verifications.key_verifications_per_month_v1 + sum(count) as count, + tags + FROM verifications.key_verifications_per_month_v2 WHERE workspace_id = {workspaceId: String} AND key_space_id = {keySpaceId: String} AND time >= fromUnixTimestamp64Milli({start: Int64}) - AND time < fromUnixTimestamp64Milli({end: Int64}) + AND time <= fromUnixTimestamp64Milli({end: Int64}) ${args.keyId ? "AND key_id = {keyId: String}" : ""} - GROUP BY time, outcome + GROUP BY time, outcome, tags ORDER BY time ASC WITH FILL - FROM toStartOfMonth(fromUnixTimestamp64Milli({start: Int64})) - TO toStartOfMonth(fromUnixTimestamp64Milli({end: Int64})) + FROM toStartOfDay(fromUnixTimestamp64Milli({start: Int64})) + TO toStartOfDay(fromUnixTimestamp64Milli({end: Int64})) STEP INTERVAL 1 MONTH ;`; - return ch.query({ - query, - params, - schema, - })(args); + return ch.query({ query, params, schema })(args); }; } diff --git a/internal/clickhouse/src/verifications_billing.test.ts b/internal/clickhouse/src/verifications_billing.test.ts index 5c3c6eea63..5b0d9fb8fa 100644 --- a/internal/clickhouse/src/verifications_billing.test.ts +++ b/internal/clickhouse/src/verifications_billing.test.ts @@ -39,10 +39,12 @@ test( time: Math.floor(startTime + Math.random() * (endTime - startTime)), region: "test", request_id: randomUUID(), + tags: Array.from({ length: Math.floor(Math.random() * 10) }).map((i) => `tag_${i}`), }; }); - await ch.verifications.insert(verifications); + const { err } = await ch.verifications.insert(verifications); + expect(err).toBeUndefined(); } // give clickhouse time to process all writes and update the materialized views await new Promise((r) => setTimeout(r, 10_000)); diff --git a/internal/clickhouse/vitest.config.ts b/internal/clickhouse/vitest.config.ts new file mode 100644 index 0000000000..b3e0bea390 --- /dev/null +++ b/internal/clickhouse/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vitest/config"; +export default defineConfig({ + test: { + exclude: [], + pool: "threads", + poolOptions: { + threads: { + singleThread: true, + }, + }, + }, +}); diff --git a/packages/error/src/errors/base.ts b/packages/error/src/errors/base.ts index f49f6f058e..32d38c118d 100644 --- a/packages/error/src/errors/base.ts +++ b/packages/error/src/errors/base.ts @@ -4,6 +4,7 @@ export abstract class BaseError ex public abstract readonly retry: boolean; public readonly cause: BaseError | undefined; public readonly context: TContext | undefined; + public readonly message: string; public abstract readonly name: string; constructor(opts: { @@ -12,6 +13,7 @@ export abstract class BaseError ex context?: TContext; }) { super(opts.message); + this.message = opts.message; this.cause = opts.cause; this.context = opts.context; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f6ccc0fb6..781ff133f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -205,7 +205,7 @@ importers: version: link:../../internal/schema ai: specifier: ^3.4.7 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.5.3)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.4.0)(vue@3.5.13)(zod@3.23.8) drizzle-orm: specifier: ^0.33.0 version: 0.33.0(@opentelemetry/api@1.4.1)(@planetscale/database@1.19.0)(@types/react@18.3.11)(react@18.3.1) @@ -527,7 +527,7 @@ importers: version: 1.2.0 rehype-pretty-code: specifier: ^0.13.2 - version: 0.13.2(shiki@1.24.0) + version: 0.13.2(shiki@1.12.0) rehype-raw: specifier: ^7.0.0 version: 7.0.0 @@ -606,8 +606,8 @@ importers: version: 0.33.4 devDependencies: mintlify: - specifier: ^4.0.182 - version: 4.0.182(openapi-types@12.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + specifier: ^4.0.289 + version: 4.0.289(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) apps/engineering: dependencies: @@ -905,7 +905,7 @@ importers: version: link:../../internal/worker-logging ai: specifier: ^3.0.23 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.5.3)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.4.0)(vue@3.5.13)(zod@3.23.8) drizzle-orm: specifier: generated version: 0.32.0-aaf764c(@cloudflare/workers-types@4.20240603.0)(@planetscale/database@1.19.0)(react@18.3.1) @@ -1169,7 +1169,7 @@ importers: version: link:../../packages/error ai: specifier: ^3.0.23 - version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.5.3)(vue@3.5.13)(zod@3.23.8) + version: 3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.4.0)(vue@3.5.13)(zod@3.23.8) zod: specifier: ^3.23.5 version: 3.23.8 @@ -1872,13 +1872,13 @@ packages: delay: 6.0.0 hash-object: 5.0.1 is-relative-url: 4.0.0 - jsonrepair: 3.11.1 + jsonrepair: 3.11.0 ky: 1.7.2 normalize-url: 8.0.1 p-map: 7.0.2 p-throttle: 6.2.0 quick-lru: 7.0.0 - type-fest: 4.30.0 + type-fest: 4.29.1 zod: 3.23.8 zod-to-json-schema: 3.23.5(zod@3.23.8) zod-validation-error: 3.4.0(zod@3.23.8) @@ -1965,7 +1965,7 @@ packages: - zod dev: false - /@ai-sdk/svelte@0.0.51(svelte@5.5.3)(zod@3.23.8): + /@ai-sdk/svelte@0.0.51(svelte@5.4.0)(zod@3.23.8): resolution: {integrity: sha512-aIZJaIds+KpCt19yUDCRDWebzF/17GCY7gN9KkcA2QM6IKRO5UmMcqEYja0ZmwFQPm1kBZkF2njhr8VXis2mAw==} engines: {node: '>=18'} peerDependencies: @@ -1976,8 +1976,8 @@ packages: dependencies: '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8) - sswr: 2.1.0(svelte@5.5.3) - svelte: 5.5.3 + sswr: 2.1.0(svelte@5.4.0) + svelte: 5.4.0 transitivePeerDependencies: - zod dev: false @@ -2455,38 +2455,6 @@ packages: js-yaml: 4.1.0 dev: false - /@apidevtools/json-schema-ref-parser@9.0.6: - resolution: {integrity: sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==} - dependencies: - '@jsdevtools/ono': 7.1.3 - call-me-maybe: 1.0.2 - js-yaml: 3.14.1 - dev: true - - /@apidevtools/openapi-schemas@2.1.0: - resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} - engines: {node: '>=10'} - dev: true - - /@apidevtools/swagger-methods@3.0.2: - resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} - dev: true - - /@apidevtools/swagger-parser@10.1.0(openapi-types@12.1.3): - resolution: {integrity: sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==} - peerDependencies: - openapi-types: '>=7' - dependencies: - '@apidevtools/json-schema-ref-parser': 9.0.6 - '@apidevtools/openapi-schemas': 2.1.0 - '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - call-me-maybe: 1.0.2 - openapi-types: 12.1.3 - dev: true - /@asteasolutions/zod-to-openapi@7.2.0(zod@3.23.8): resolution: {integrity: sha512-Va+Fq1QzKkSgmiYINSp3cASFhMsbdRH/kmCk2feijhC+yNjGoC056CRqihrVFhR8MY8HOZHdlYm2Ns2lmszCiw==} peerDependencies: @@ -3360,7 +3328,7 @@ packages: resolution: {integrity: sha512-vPQRo70WzNQU12PGX2dI1yqxPXM0miYnsdu+Jn5UdAJMB1WpyY8pjMe489Bjgg/G5OVmekaeMDGsJYtlSYvbXg==} engines: {node: '>=18'} dependencies: - '@grpc/grpc-js': 1.12.3 + '@grpc/grpc-js': 1.12.2 '@lifeomic/axios-fetch': 3.1.0 '@opentelemetry/api': 1.4.1 '@opentelemetry/exporter-trace-otlp-http': 0.53.0(@opentelemetry/api@1.4.1) @@ -5258,7 +5226,7 @@ packages: dependencies: '@apidevtools/json-schema-ref-parser': 11.7.2 js-yaml: 4.1.0 - prettier: 3.4.2 + prettier: 3.4.1 dev: false /@google-cloud/precise-date@4.0.0: @@ -5273,8 +5241,8 @@ packages: dependencies: graphql: 16.9.0 - /@grpc/grpc-js@1.12.3: - resolution: {integrity: sha512-iaxAZnANdCwMNpJlyhkI1W1jQZIDZKFNtU2OpQDdgd+pBcU3t7G+PT7svobkW4WSZTdis+CVV6y8KIwu83HDYQ==} + /@grpc/grpc-js@1.12.2: + resolution: {integrity: sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==} engines: {node: '>=12.10.0'} dependencies: '@grpc/proto-loader': 0.7.13 @@ -5811,6 +5779,7 @@ packages: /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + dev: false /@jsonhero/path@1.0.21: resolution: {integrity: sha512-gVUDj/92acpVoJwsVJ/RuWOaHyG4oFzn898WNGQItLCTQ+hOaVlEaImhwE1WqOTf+l3dGOUkbSiVKlb3q1hd1Q==} @@ -6039,13 +6008,13 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.11 + '@types/react': 18.3.13 react: 18.3.1 /@mendable/firecrawl-js@1.5.2(ws@8.18.0): resolution: {integrity: sha512-NksUAw2wtFO4ppUbhLiCnKrOsrxpocuwSZmonZaOhuL8ajwsu3uEBTJGuDuA1mp3De0we3BMs9+UoMs+Z5MBog==} dependencies: - axios: 1.7.9 + axios: 1.7.8 isows: 1.0.6(ws@8.18.0) typescript-event-target: 1.1.1 zod: 3.23.8 @@ -6086,21 +6055,22 @@ packages: - supports-color dev: true - /@mintlify/cli@4.0.182(openapi-types@12.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): - resolution: {integrity: sha512-mHYbReR/lte5Eenr2bs4HZsuJ63y89fGZvjreCYRTHsu3rIb6pZolTEAh2euVsbZiXN4jVi80shV6kDRtH4B1A==} + /@mintlify/cli@4.0.289(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): + resolution: {integrity: sha512-eI6qO67A9RVJ93UAYq5hUdorJMRJO6GLc/wyXRyggxBavpzXGrb/oayxPYn4GIB2fbqYcqBgwE0ux/H0jrdG9Q==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) - '@mintlify/link-rot': 3.0.188(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) - '@mintlify/models': 0.0.104 - '@mintlify/prebuild': 1.0.188(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) - '@mintlify/previewing': 4.0.179(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) - '@mintlify/validation': 0.1.166 + '@mintlify/common': 1.0.191(react-dom@18.3.1)(react@18.3.1) + '@mintlify/link-rot': 3.0.281(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/models': 0.0.150 + '@mintlify/prebuild': 1.0.280(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/previewing': 4.0.283(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/validation': 0.1.222 chalk: 5.3.0 detect-port: 1.6.1 fs-extra: 11.2.0 gray-matter: 4.0.3 + js-yaml: 4.1.0 ora: 6.3.1 unist-util-visit: 4.1.2 yargs: 17.7.2 @@ -6108,7 +6078,6 @@ packages: - bufferutil - debug - encoding - - openapi-types - react - react-dom - supports-color @@ -6116,13 +6085,13 @@ packages: - utf-8-validate dev: true - /@mintlify/common@1.0.118(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-3LlH6G6yVI1/taGBvR/IYc/9N9oMeNreV3yxuT52vOtNvRYipS1f75wFOFvSHiqsx8qf2c4Fwl4bRGmLT6rx+w==} + /@mintlify/common@1.0.191(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-aGRVy0QGiFzqbJE52nwRKFqqE4P8fLi9MUi3vnAxnY5lI7NwRT+VTEgB35vQ/6XQ2DWYvhEqnl1rl0bfRyCzCw==} dependencies: - '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) - '@mintlify/mdx': 0.0.46(react-dom@18.3.1)(react@18.3.1) - '@mintlify/models': 0.0.104 - '@mintlify/validation': 0.1.166 + '@mintlify/mdx': 0.0.49(react-dom@18.3.1)(react@18.3.1) + '@mintlify/models': 0.0.150 + '@mintlify/openapi-parser': 0.0.7 + '@mintlify/validation': 0.1.222 '@sindresorhus/slugify': 2.2.1 acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) @@ -6135,6 +6104,7 @@ packages: hast-util-to-html: 8.0.4 hast-util-to-text: 4.0.2 is-absolute-url: 4.0.1 + js-yaml: 4.1.0 lodash: 4.17.21 mdast: 3.0.0 mdast-util-from-markdown: 1.3.1 @@ -6165,13 +6135,12 @@ packages: - supports-color dev: true - /@mintlify/link-rot@3.0.188(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): - resolution: {integrity: sha512-MClTVR9WwiTn3WmcDaFOoUib5DbPe/vzP1d3EJUO8oq+WsDj/1Z9ZdGcKEHToBqVDpGc40JG6s/OfQnkUECK7g==} + /@mintlify/link-rot@3.0.281(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): + resolution: {integrity: sha512-fjTbeNSR5u72nv9FdRl1g17f1fTASZ00ChUDDqb5Sjl/SmImgTd1Ha2q53LnEupOdALtkT6Qm2xVd7GO6/XAZA==} engines: {node: '>=18.0.0'} dependencies: - '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) - '@mintlify/common': 1.0.118(react-dom@18.3.1)(react@18.3.1) - '@mintlify/prebuild': 1.0.188(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/common': 1.0.191(react-dom@18.3.1)(react@18.3.1) + '@mintlify/prebuild': 1.0.280(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) chalk: 5.3.0 fs-extra: 11.2.0 gray-matter: 4.0.3 @@ -6181,7 +6150,6 @@ packages: transitivePeerDependencies: - bufferutil - debug - - encoding - react - react-dom - supports-color @@ -6189,25 +6157,33 @@ packages: - utf-8-validate dev: true - /@mintlify/mdx@0.0.46(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-8BZsTvFhek4Z6//+kWKvlgnKy+dOjbtHqPnhiYaNlvZvGFU5BkLjOtFFP2jG+7vluvfI2yWOS8g3mtPwntWrVg==} + /@mintlify/mdx@0.0.49(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ZjmJTfS4NGdrFRAu7okADaCCBOz6xs1XFFg1eGwbyuGFTLPuXj71FUV9VQ2OWsnXpAGp1hH1eoVUgqAaEolp+g==} + peerDependencies: + react: ^18.3.1 + react-dom: ^18.3.1 dependencies: + '@mdx-js/mdx': 2.3.0 + '@mdx-js/react': 2.3.0(react@18.3.1) + '@types/hast': 3.0.4 + '@types/unist': 2.0.11 hast-util-to-string: 2.0.0 next-mdx-remote: 4.4.1(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) refractor: 4.8.1 rehype-katex: 6.0.3 remark-gfm: 3.0.1 remark-math: 5.1.1 remark-smartypants: 2.1.0 + unified: 10.1.2 unist-util-visit: 4.1.2 transitivePeerDependencies: - - react - - react-dom - supports-color dev: true - /@mintlify/models@0.0.104: - resolution: {integrity: sha512-qYJF8dyLIOLVfS9qhZctfBulgqgxabP5Xlp/5gAd7mFX5op8ghEFGQMvvfcGSU3/uBzSM88qBVUOHOq4zz5YPw==} + /@mintlify/models@0.0.150: + resolution: {integrity: sha512-wRlT71Nwy72/vWXBJeV79NsXmMmY2GTZOiqeiG8DeISM3DNXaVg3BhmAmtqvE950XwIUSQJos0BiaT+cPQJj+A==} engines: {node: '>=18.0.0'} dependencies: axios: 1.7.9 @@ -6216,13 +6192,26 @@ packages: - debug dev: true - /@mintlify/prebuild@1.0.188(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): - resolution: {integrity: sha512-KlAIWxvb+pQj9+9Wo+DNfz4cE120/vnSF/uq7DDEcLwa0U4z6Wz+W/Kh/MSKJwCRjsiCxrCRmQju+zvod9Oo8A==} + /@mintlify/openapi-parser@0.0.7: + resolution: {integrity: sha512-3ecbkzPbsnkKVZJypVL0H5pCTR7a4iLv4cP7zbffzAwy+vpH70JmPxNVpPPP62yLrdZlfNcMxu5xKeT7fllgMg==} + engines: {node: '>=18'} dependencies: - '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) - '@mintlify/common': 1.0.118(react-dom@18.3.1)(react@18.3.1) - '@mintlify/scraping': 3.0.134(openapi-types@12.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) - '@mintlify/validation': 0.1.166 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-formats: 3.0.1(ajv@8.17.1) + jsonpointer: 5.0.1 + leven: 4.0.0 + yaml: 2.6.1 + dev: true + + /@mintlify/prebuild@1.0.280(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): + resolution: {integrity: sha512-MjCWAnv/HYgHMFFIWahNcpzr+0Bcdfi8ZxeJLG245vULEtxTsWEkA5B5Bu288gi0+tBlvYwdASenkpf/XTZltQ==} + dependencies: + '@mintlify/common': 1.0.191(react-dom@18.3.1)(react@18.3.1) + '@mintlify/openapi-parser': 0.0.7 + '@mintlify/scraping': 4.0.33(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/validation': 0.1.222 + axios: 1.7.9 chalk: 5.3.0 favicons: 7.2.0 fs-extra: 11.2.0 @@ -6234,7 +6223,6 @@ packages: transitivePeerDependencies: - bufferutil - debug - - encoding - react - react-dom - supports-color @@ -6242,15 +6230,15 @@ packages: - utf-8-validate dev: true - /@mintlify/previewing@4.0.179(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): - resolution: {integrity: sha512-KTLJjY10q0WLhhy/q/2+Ei9qPHI9252ClmD5SBHxuRM+NsJNqWsl/LGi8hXgxefd42h+K/o7nNEBDlbOgW87Fg==} + /@mintlify/previewing@4.0.283(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): + resolution: {integrity: sha512-iwbxwp6s1lKJ/UAAk6fvFqp1DnQb8n+im+Tz7UV6+EYqFl4kAlNG8dHoe0vvIRXoD6PQ84ymtOE2aTM4oMS3hw==} engines: {node: '>=18.0.0'} dependencies: - '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) - '@mintlify/common': 1.0.118(react-dom@18.3.1)(react@18.3.1) - '@mintlify/prebuild': 1.0.188(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) - '@mintlify/validation': 0.1.166 + '@mintlify/common': 1.0.191(react-dom@18.3.1)(react@18.3.1) + '@mintlify/prebuild': 1.0.280(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/validation': 0.1.222 '@octokit/rest': 19.0.13 + better-opn: 3.0.2 chalk: 5.3.0 chokidar: 3.6.0 express: 4.21.1 @@ -6259,7 +6247,7 @@ packages: gray-matter: 4.0.3 is-absolute-url: 4.0.1 is-online: 10.0.0 - open: 8.4.2 + js-yaml: 4.1.0 openapi-types: 12.1.3 ora: 6.3.1 socket.io: 4.8.1 @@ -6277,25 +6265,33 @@ packages: - utf-8-validate dev: true - /@mintlify/scraping@3.0.134(openapi-types@12.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): - resolution: {integrity: sha512-gKO1WVmy9ywxF2vUiT6jAvFe4LxhNBafcKmJqtDc3NAWEbaJqH6/tLeAXrFWXIZ6LnYlPoAKdITGm3XeVUI0wQ==} + /@mintlify/scraping@4.0.33(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): + resolution: {integrity: sha512-TKSQTGAkup+onFpiKMVVvqYJIPeztdTFaJolVyR2L2h8bIZ7r+3ZZJp4jVs8KDNc4PzNxZ1gB9lQEt8+ZUU63g==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@apidevtools/swagger-parser': 10.1.0(openapi-types@12.1.3) - '@mintlify/common': 1.0.118(react-dom@18.3.1)(react@18.3.1) - axios: 1.7.9 - cheerio: 0.22.0 + '@mintlify/common': 1.0.191(react-dom@18.3.1)(react@18.3.1) + '@mintlify/openapi-parser': 0.0.7 fs-extra: 11.2.0 - node-html-markdown: 1.3.0 - ora: 6.3.1 - puppeteer: 19.11.1(typescript@5.5.3) + hast: 1.0.0 + hast-util-to-mdast: 10.1.1 + js-yaml: 4.1.0 + mdast: 3.0.0 + mdast-util-mdx-jsx: 3.1.3 + puppeteer: 22.15.0(typescript@5.5.3) + rehype-parse: 9.0.1 + remark-gfm: 4.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + traverse: 0.6.10 + unified: 11.0.5 + unist-util-visit: 5.0.0 yargs: 17.7.2 + zod: 3.23.8 transitivePeerDependencies: - bufferutil - debug - - encoding - - openapi-types - react - react-dom - supports-color @@ -6303,10 +6299,11 @@ packages: - utf-8-validate dev: true - /@mintlify/validation@0.1.166: - resolution: {integrity: sha512-Xot8996tJoqeTfmdoQ3x6HrjfobozqcEF9cYqpJ0z1KUg0u4yGcbJit2++DCBV9qmUzc8M2UM9lNBcYPAxe1nw==} + /@mintlify/validation@0.1.222: + resolution: {integrity: sha512-NHZVwCqGwL/7oaFZQtxWUCjsu9r6AAxyKwNrEPOBvxBoD4FZewrak32ApjiGomIY8XMgJALjhBLqQ0mDYV3POg==} dependencies: - '@mintlify/models': 0.0.104 + '@mintlify/models': 0.0.150 + is-absolute-url: 4.0.1 lcm: 0.0.3 lodash: 4.17.21 openapi-types: 12.1.3 @@ -6706,8 +6703,8 @@ packages: - typescript dev: true - /@oclif/core@4.0.34: - resolution: {integrity: sha512-jHww7lIqyifamynDSjDNNjNOwFTQdKYeOSYaxUaoWhqXnRwacZ+pfUN4Y0L9lqSN4MQtlWM9mwnBD7FvlT9kPw==} + /@oclif/core@4.0.33: + resolution: {integrity: sha512-NoTDwJ2L/ywpsSjcN7jAAHf3m70Px4Yim2SJrm16r70XpnfbNOdlj1x0HEJ0t95gfD+p/y5uy+qPT/VXTh/1gw==} engines: {node: '>=18.0.0'} dependencies: ansi-escapes: 4.3.2 @@ -6720,7 +6717,7 @@ packages: globby: 11.1.0 indent-string: 4.0.0 is-wsl: 2.2.0 - lilconfig: 3.1.3 + lilconfig: 3.1.2 minimatch: 9.0.5 semver: 7.6.3 string-width: 4.2.3 @@ -6760,7 +6757,7 @@ packages: resolution: {integrity: sha512-p30fo3JPtbOqTJOX9A/8qKV/14XWt8xFgG/goVfIkuKBAO+cdY78ag8pYatlpzsYzJhO27X1MFn0WkkPWo36Ww==} engines: {node: '>=18.0.0'} dependencies: - '@oclif/core': 4.0.34 + '@oclif/core': 4.0.33 ansis: 3.3.2 debug: 4.3.7(supports-color@8.1.1) npm: 10.9.1 @@ -7248,7 +7245,7 @@ packages: resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': 1.4.1 + '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/semantic-conventions': 1.13.0 @@ -7273,7 +7270,7 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.12.3 + '@grpc/grpc-js': 1.12.2 '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) '@opentelemetry/otlp-grpc-exporter-base': 0.39.1(@opentelemetry/api@1.4.1) @@ -7385,7 +7382,7 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: - '@grpc/grpc-js': 1.12.3 + '@grpc/grpc-js': 1.12.2 '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) '@opentelemetry/otlp-exporter-base': 0.39.1(@opentelemetry/api@1.4.1) @@ -7754,7 +7751,7 @@ packages: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} engines: {node: '>=8.0.0'} dependencies: - tslib: 2.4.1 + tslib: 2.8.1 dev: false /@peculiar/webcrypto@1.4.1: @@ -7764,7 +7761,7 @@ packages: '@peculiar/asn1-schema': 2.3.13 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.6 - tslib: 2.4.1 + tslib: 2.8.1 webcrypto-core: 1.8.1 dev: false @@ -7833,25 +7830,19 @@ packages: /@protobufjs/utf8@1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - /@puppeteer/browsers@0.5.0(typescript@5.5.3): - resolution: {integrity: sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==} - engines: {node: '>=14.1.0'} + /@puppeteer/browsers@2.3.0: + resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} + engines: {node: '>=18'} hasBin: true - peerDependencies: - typescript: '>= 4.7.4' - peerDependenciesMeta: - typescript: - optional: true dependencies: - debug: 4.3.4 + debug: 4.3.7(supports-color@8.1.1) extract-zip: 2.0.1 - https-proxy-agent: 5.0.1 progress: 2.0.3 - proxy-from-env: 1.1.0 - tar-fs: 2.1.1 - typescript: 5.5.3 + proxy-agent: 6.4.0 + semver: 7.6.3 + tar-fs: 3.0.6 unbzip2-stream: 1.4.3 - yargs: 17.7.1 + yargs: 17.7.2 transitivePeerDependencies: - supports-color dev: true @@ -10951,6 +10942,10 @@ packages: zod: 3.23.8 dev: false + /@tootallnate/quickjs-emscripten@0.23.0: + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true + /@trigger.dev/core@3.3.1: resolution: {integrity: sha512-F3jgGtjPDRwvycI9yNR+iLAsMMxranaF/0FOUsUu9r7HER2odBPAmRmh0j8F6Yhsta9aVfwyFm9Hg1xDgX9C5A==} engines: {node: '>=18.20.0'} @@ -11261,7 +11256,7 @@ packages: /@types/d3-interpolate@3.0.1: resolution: {integrity: sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==} dependencies: - '@types/d3-color': 3.1.0 + '@types/d3-color': 3.1.3 dev: false /@types/d3-interpolate@3.0.4: @@ -11297,7 +11292,7 @@ packages: /@types/d3-scale@4.0.2: resolution: {integrity: sha512-Yk4htunhPAwN0XGlIwArRomOjdoBFXC3+kCxK2Ubg7I9shQlVSJy/pG/Ht5ASN+gdMIalpk8TJ5xV74jFsetLA==} dependencies: - '@types/d3-time': 3.0.0 + '@types/d3-time': 3.0.4 dev: false /@types/d3-scale@4.0.8: @@ -11480,7 +11475,7 @@ packages: /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: - '@types/unist': 3.0.3 + '@types/unist': 2.0.11 /@types/http-cache-semantics@4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} @@ -11649,6 +11644,12 @@ packages: '@types/prop-types': 15.7.13 csstype: 3.1.3 + /@types/react@18.3.13: + resolution: {integrity: sha512-ii/gswMmOievxAJed4PAHT949bpYjPKXvXo1v6cRB/kqc2ZR4n+SgyCyvyc5Fec5ez8VnUumI1Vk7j6fRyRogg==} + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + /@types/readable-stream@4.0.18: resolution: {integrity: sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==} dependencies: @@ -11728,7 +11729,7 @@ packages: dependencies: '@types/node': 20.14.9 tapable: 2.2.1 - webpack: 5.97.0(@swc/core@1.3.101)(esbuild@0.19.11) + webpack: 5.96.1(@swc/core@1.3.101)(esbuild@0.19.11) transitivePeerDependencies: - '@swc/core' - esbuild @@ -12374,9 +12375,9 @@ packages: engines: {node: '>=12.0'} dev: true - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} dependencies: debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: @@ -12406,7 +12407,7 @@ packages: indent-string: 5.0.0 dev: true - /ai@3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.5.3)(vue@3.5.13)(zod@3.23.8): + /ai@3.4.7(openai@4.52.1)(react@18.3.1)(svelte@5.4.0)(vue@3.5.13)(zod@3.23.8): resolution: {integrity: sha512-SutkVjFE86+xNql7fJERJkSEwpILEuiQvCoogJef6ZX/PGHvu3yepwHwVwedgABXe9SudOIKN48EQESrXX/xCw==} engines: {node: '>=18'} peerDependencies: @@ -12431,7 +12432,7 @@ packages: '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) '@ai-sdk/react': 0.0.62(react@18.3.1)(zod@3.23.8) '@ai-sdk/solid': 0.0.49(zod@3.23.8) - '@ai-sdk/svelte': 0.0.51(svelte@5.5.3)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.51(svelte@5.4.0)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.46(zod@3.23.8) '@ai-sdk/vue': 0.0.53(vue@3.5.13)(zod@3.23.8) '@opentelemetry/api': 1.4.1 @@ -12442,7 +12443,7 @@ packages: openai: 4.52.1 react: 18.3.1 secure-json-parse: 2.7.0 - svelte: 5.5.3 + svelte: 5.4.0 zod: 3.23.8 zod-to-json-schema: 3.23.2(zod@3.23.8) transitivePeerDependencies: @@ -12472,6 +12473,17 @@ packages: ajv: 8.17.1 dev: true + /ajv-formats@3.0.1(ajv@8.17.1): + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.17.1 + dev: true + /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -12746,6 +12758,13 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + dependencies: + tslib: 2.8.1 + dev: true + /ast-types@0.16.1: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} @@ -12786,7 +12805,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001685 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -12802,7 +12821,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001685 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -12817,7 +12836,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001685 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -12845,6 +12864,16 @@ packages: - debug dev: true + /axios@1.7.8: + resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} dependencies: @@ -12935,6 +12964,11 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + /basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + dev: true + /bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: @@ -12948,6 +12982,13 @@ packages: resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} dev: false + /better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + dependencies: + open: 8.4.2 + dev: true + /better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -13011,10 +13052,6 @@ packages: - supports-color dev: true - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true - /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -13043,8 +13080,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001686 - electron-to-chromium: 1.5.68 + caniuse-lite: 1.0.30001685 + electron-to-chromium: 1.5.67 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -13153,10 +13190,6 @@ packages: get-intrinsic: 1.2.4 set-function-length: 1.2.2 - /call-me-maybe@1.0.2: - resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} - dev: true - /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -13191,8 +13224,8 @@ packages: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false - /caniuse-lite@1.0.30001686: - resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==} + /caniuse-lite@1.0.30001685: + resolution: {integrity: sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA==} /capnp-ts@0.7.0: resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} @@ -13345,28 +13378,6 @@ packages: - utf-8-validate dev: true - /cheerio@0.22.0: - resolution: {integrity: sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==} - engines: {node: '>= 0.6'} - dependencies: - css-select: 1.2.0 - dom-serializer: 0.1.1 - entities: 1.1.2 - htmlparser2: 3.10.1 - lodash.assignin: 4.2.0 - lodash.bind: 4.2.1 - lodash.defaults: 4.2.0 - lodash.filter: 4.6.0 - lodash.flatten: 4.4.0 - lodash.foreach: 4.5.0 - lodash.map: 4.6.0 - lodash.merge: 4.6.2 - lodash.pick: 4.4.0 - lodash.reduce: 4.6.0 - lodash.reject: 4.6.0 - lodash.some: 4.6.0 - dev: true - /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -13422,13 +13433,15 @@ packages: engines: {node: '>=6.0'} dev: false - /chromium-bidi@0.4.7(devtools-protocol@0.0.1107588): - resolution: {integrity: sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==} + /chromium-bidi@0.6.3(devtools-protocol@0.0.1312386): + resolution: {integrity: sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1107588 - mitt: 3.0.0 + devtools-protocol: 0.0.1312386 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.23.8 dev: true /ci-info@3.8.0: @@ -13893,16 +13906,6 @@ packages: dev: true optional: true - /cosmiconfig@8.1.3: - resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} - engines: {node: '>=14'} - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - dev: true - /cosmiconfig@9.0.0(typescript@5.5.3): resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -13918,7 +13921,6 @@ packages: parse-json: 5.2.0 typescript: 5.5.3 dev: true - optional: true /cpu-features@0.0.10: resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} @@ -13952,14 +13954,6 @@ packages: hasBin: true dev: false - /cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} - dependencies: - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - dev: true - /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: @@ -13992,25 +13986,6 @@ packages: engines: {node: '>=4'} dev: false - /css-select@1.2.0: - resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==} - dependencies: - boolbase: 1.0.0 - css-what: 2.1.3 - domutils: 1.5.1 - nth-check: 1.0.2 - dev: true - - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.1.0 - nth-check: 2.1.1 - dev: true - /css-to-react-native@3.2.0: resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} dependencies: @@ -14019,15 +13994,6 @@ packages: postcss-value-parser: 4.2.0 dev: false - /css-what@2.1.3: - resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==} - dev: true - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true - /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -14284,6 +14250,11 @@ packages: engines: {node: '>= 12'} dev: true + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + dev: true + /data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -14465,7 +14436,7 @@ packages: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 - gopd: 1.1.0 + gopd: 1.2.0 /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -14487,6 +14458,15 @@ packages: /defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + dev: true + /delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} dependencies: @@ -14575,8 +14555,8 @@ packages: dependencies: dequal: 2.0.3 - /devtools-protocol@0.0.1107588: - resolution: {integrity: sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==} + /devtools-protocol@0.0.1312386: + resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} dev: true /didyoumean@1.2.2: @@ -14660,52 +14640,24 @@ packages: csstype: 3.1.3 dev: false - /dom-serializer@0.1.1: - resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==} - dependencies: - domelementtype: 1.3.1 - entities: 1.1.2 - dev: true - /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - - /domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: true + dev: false /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - /domhandler@2.4.2: - resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} - dependencies: - domelementtype: 1.3.1 - dev: true + dev: false /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 - - /domutils@1.5.1: - resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} - dependencies: - dom-serializer: 0.1.1 - domelementtype: 1.3.1 - dev: true - - /domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.1.1 - domelementtype: 1.3.1 - dev: true + dev: false /domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} @@ -14713,12 +14665,13 @@ packages: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 + dev: false /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.8.1 dev: false /dot-prop@6.0.1: @@ -14733,7 +14686,7 @@ packages: hasBin: true dependencies: cross-spawn: 7.0.6 - dotenv: 16.4.7 + dotenv: 16.4.5 dotenv-expand: 10.0.0 minimist: 1.2.8 dev: true @@ -14758,11 +14711,6 @@ packages: engines: {node: '>=12'} dev: true - /dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dev: true - /dotignore@0.1.2: resolution: {integrity: sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==} hasBin: true @@ -15212,8 +15160,8 @@ packages: jake: 10.9.2 dev: true - /electron-to-chromium@1.5.68: - resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} + /electron-to-chromium@1.5.67: + resolution: {integrity: sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==} /emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -15318,10 +15266,6 @@ packages: strip-ansi: 6.0.1 dev: true - /entities@1.1.2: - resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - dev: true - /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -15367,7 +15311,7 @@ packages: get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 globalthis: 1.0.4 - gopd: 1.1.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 has-proto: 1.1.0 has-symbols: 1.1.0 @@ -15737,6 +15681,18 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true + /eslint-config-prettier@9.0.0(eslint@9.16.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true @@ -15884,7 +15840,6 @@ packages: /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: false /estree-util-attach-comments@2.1.1: resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} @@ -15969,7 +15924,6 @@ packages: /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: false /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} @@ -16161,7 +16115,7 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true dependencies: - debug: 4.3.4 + debug: 4.3.7(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -17070,6 +17024,17 @@ packages: resolve-pkg-maps: 1.0.0 dev: true + /get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.7(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + /git-repo-info@2.1.1: resolution: {integrity: sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==} engines: {node: '>= 4.0'} @@ -17190,7 +17155,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - gopd: 1.1.0 + gopd: 1.2.0 /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -17204,11 +17169,9 @@ packages: slash: 3.0.0 dev: true - /gopd@1.1.0: - resolution: {integrity: sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==} + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} @@ -17362,7 +17325,7 @@ packages: decircular: 0.1.1 is-obj: 3.0.0 sort-keys: 5.1.0 - type-fest: 4.30.0 + type-fest: 4.29.1 dev: false /hasown@2.0.2: @@ -17371,6 +17334,13 @@ packages: dependencies: function-bind: 1.1.2 + /hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element: 3.0.0 + dev: true + /hast-util-from-dom@4.2.0: resolution: {integrity: sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==} dependencies: @@ -17448,12 +17418,24 @@ packages: vfile-location: 5.0.3 web-namespaces: 2.0.1 + /hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + dependencies: + '@types/hast': 3.0.4 + dev: true + /hast-util-heading-rank@3.0.0: resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==} dependencies: '@types/hast': 3.0.4 dev: false + /hast-util-is-body-ok-link@3.0.1: + resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + dependencies: + '@types/hast': 3.0.4 + dev: true + /hast-util-is-element@2.1.3: resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} dependencies: @@ -17466,6 +17448,16 @@ packages: dependencies: '@types/hast': 3.0.4 + /hast-util-minify-whitespace@1.0.1: + resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.0 + dev: true + /hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} dev: false @@ -17481,6 +17473,16 @@ packages: dependencies: '@types/hast': 3.0.4 + /hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + dev: true + /hast-util-raw@7.2.3: resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} dependencies: @@ -17588,7 +17590,6 @@ packages: space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 - dev: false /hast-util-to-jsx-runtime@2.3.2: resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} @@ -17611,6 +17612,25 @@ packages: transitivePeerDependencies: - supports-color + /hast-util-to-mdast@10.1.1: + resolution: {integrity: sha512-ObMDBFkVPHa0/47FUPO6UuupETRXNTY9y2dGBQQzEUrFq6LjUVwZEoUjjj/agvQ6oS+fAIyNzgNEa6h3lhaoKA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + hast-util-phrasing: 3.0.1 + hast-util-to-html: 9.0.3 + hast-util-to-text: 4.0.2 + hast-util-whitespace: 3.0.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-hast: 13.2.0 + mdast-util-to-string: 4.0.0 + rehype-minify-whitespace: 6.0.2 + trim-trailing-lines: 2.1.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + dev: true + /hast-util-to-parse5@7.1.0: resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} dependencies: @@ -17675,7 +17695,6 @@ packages: /hast@1.0.0: resolution: {integrity: sha512-vFUqlRV5C+xqP76Wwq2SrM0kipnmpxJm7OfvVXpB35Fp+Fn4MV+ozr+JZr5qFvyR1q/U+Foim2x+3P+x9S1PLA==} deprecated: Renamed to rehype - dev: false /hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} @@ -17706,11 +17725,6 @@ packages: property-information: 6.5.0 space-separated-tokens: 2.0.2 - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true - /headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} dev: true @@ -17775,18 +17789,6 @@ packages: /html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - dev: false - - /htmlparser2@3.10.1: - resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} - dependencies: - domelementtype: 1.3.1 - domhandler: 2.4.2 - domutils: 1.7.0 - entities: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} @@ -17826,6 +17828,16 @@ packages: toidentifier: 1.0.1 dev: true + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.7(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -17834,11 +17846,11 @@ packages: resolve-alpn: 1.2.1 dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} dependencies: - agent-base: 6.0.2 + agent-base: 7.1.1 debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -18040,6 +18052,14 @@ packages: resolution: {integrity: sha512-j8grHGDzv1v+8T1sAQ+3boTCntFPfvxLCkNcxB1J8qA0lUN+fAlSyYd+RXKvaPRL4AGyPxViutBEJHNXOyUdFQ==} dev: false + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true + /ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} @@ -18337,7 +18357,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - gopd: 1.1.0 + gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -18603,6 +18623,10 @@ packages: dependencies: argparse: 2.0.1 + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true + /jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -18689,8 +18713,13 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonrepair@3.11.1: - resolution: {integrity: sha512-9jej0NdRnXXv/n6oYxKbNhrKyPXM6SOrWEmNEpl5S+JpqzrmkxcX7gJCA+GMkgJiWd8KtH6G60+0gIlhZ4dMKQ==} + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + + /jsonrepair@3.11.0: + resolution: {integrity: sha512-9lDyqN9l16HezbNpK5+J4reACtdm5OOcnQZkUTGfSa8BaD6qkctV8xQHYUSYugdCVSYP2q+eORq3o8MBaLpIsA==} hasBin: true dev: false @@ -18791,6 +18820,11 @@ packages: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} dev: false + /leven@4.0.0: + resolution: {integrity: sha512-puehA3YKku3osqPlNuzGDUHq8WpwXupUg1V6NXdV38G+gr+gkBwFC8g1b/+YcIvp8gnqVIus+eJCH/eGsRmJNw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -18825,8 +18859,8 @@ packages: engines: {node: '>=14'} dev: true - /lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + /lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} /linebreak@1.1.0: @@ -18926,14 +18960,6 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false - /lodash.assignin@4.2.0: - resolution: {integrity: sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==} - dev: true - - /lodash.bind@4.2.1: - resolution: {integrity: sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==} - dev: true - /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -18948,22 +18974,6 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: false - /lodash.defaults@4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - dev: true - - /lodash.filter@4.6.0: - resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==} - dev: true - - /lodash.flatten@4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - dev: true - - /lodash.foreach@4.5.0: - resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} - dev: true - /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} @@ -18979,22 +18989,6 @@ packages: dev: true optional: true - /lodash.pick@4.4.0: - resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} - dev: true - - /lodash.reduce@4.6.0: - resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==} - dev: true - - /lodash.reject@4.6.0: - resolution: {integrity: sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==} - dev: true - - /lodash.some@4.6.0: - resolution: {integrity: sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==} - dev: true - /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} dev: true @@ -19068,7 +19062,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.4.1 + tslib: 2.8.1 dev: false /lowercase-keys@3.0.0: @@ -19221,7 +19215,6 @@ packages: escape-string-regexp: 5.0.0 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - dev: false /mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} @@ -19296,7 +19289,6 @@ packages: devlop: 1.1.0 mdast-util-find-and-replace: 3.0.1 micromark-util-character: 2.1.1 - dev: false /mdast-util-gfm-footnote@1.0.2: resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} @@ -19315,7 +19307,6 @@ packages: micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - dev: false /mdast-util-gfm-strikethrough@1.0.3: resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} @@ -19331,7 +19322,6 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false /mdast-util-gfm-table@1.0.7: resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} @@ -19353,7 +19343,6 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false /mdast-util-gfm-task-list-item@1.0.2: resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} @@ -19370,7 +19359,6 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false /mdast-util-gfm@2.0.2: resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} @@ -19397,7 +19385,6 @@ packages: mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - dev: false /mdast-util-math@2.0.2: resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} @@ -19724,7 +19711,6 @@ packages: micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 - dev: false /micromark-extension-gfm-footnote@1.1.2: resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} @@ -19749,7 +19735,6 @@ packages: micromark-util-sanitize-uri: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 - dev: false /micromark-extension-gfm-strikethrough@1.0.7: resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} @@ -19770,7 +19755,6 @@ packages: micromark-util-resolve-all: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 - dev: false /micromark-extension-gfm-table@1.0.7: resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} @@ -19789,7 +19773,6 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 - dev: false /micromark-extension-gfm-tagfilter@1.0.2: resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} @@ -19800,7 +19783,6 @@ packages: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} dependencies: micromark-util-types: 2.0.1 - dev: false /micromark-extension-gfm-task-list-item@1.0.5: resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} @@ -19819,7 +19801,6 @@ packages: micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 - dev: false /micromark-extension-gfm@2.0.3: resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} @@ -19844,7 +19825,6 @@ packages: micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.1 micromark-util-types: 2.0.1 - dev: false /micromark-extension-math@2.1.2: resolution: {integrity: sha512-es0CcOV89VNS9wFmyn+wyFTKweXGW4CEvdaAca6SWRWPyYCbBisnjaHLjWO4Nszuiud84jCpkHsqAJoa768Pvg==} @@ -20482,6 +20462,7 @@ packages: /minipass@6.0.2: resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} engines: {node: '>=16 || 14 >=14.17'} + dev: true /minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -20503,17 +20484,16 @@ packages: rimraf: 5.0.10 dev: true - /mintlify@4.0.182(openapi-types@12.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): - resolution: {integrity: sha512-WHNbjdd+te3NEQqnqF1ERv9pNtc13E0C9XByxMOTd+09Fpr3/2ZAFnBgX2EcxnDbmvGXaMbC47octWbuvml8iw==} + /mintlify@4.0.289(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3): + resolution: {integrity: sha512-33oHWs2uWi3FCJ+HC95I9TQkXWnEY14YKafkmireroODrCjRw6WNm73kSFhOG+0AgXFKb0BABOOY2pqlzshvzA==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@mintlify/cli': 4.0.182(openapi-types@12.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) + '@mintlify/cli': 4.0.289(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.3) transitivePeerDependencies: - bufferutil - debug - encoding - - openapi-types - react - react-dom - supports-color @@ -20521,13 +20501,8 @@ packages: - utf-8-validate dev: true - /mitt@3.0.0: - resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==} - dev: true - /mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - dev: false /mixme@0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} @@ -20598,7 +20573,7 @@ packages: dependencies: define-data-property: 1.1.4 functions-have-names: 1.2.3 - gopd: 1.1.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 hasown: 2.0.2 isarray: 2.0.5 @@ -20689,7 +20664,7 @@ packages: outvariant: 1.4.3 path-to-regexp: 6.3.0 strict-event-emitter: 0.5.1 - type-fest: 4.30.0 + type-fest: 4.29.1 typescript: 5.5.3 yargs: 17.7.2 dev: true @@ -20778,6 +20753,11 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: false + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: true + /next-mdx-remote@4.4.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==} engines: {node: '>=14', npm: '>=7'} @@ -20832,7 +20812,7 @@ packages: '@next/env': 14.1.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001685 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -20875,7 +20855,7 @@ packages: '@opentelemetry/api': 1.4.1 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001685 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -20920,7 +20900,7 @@ packages: '@swc/counter': 0.1.3 '@swc/helpers': 0.5.13 busboy: 1.6.0 - caniuse-lite: 1.0.30001686 + caniuse-lite: 1.0.30001685 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -20950,7 +20930,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.4.1 + tslib: 2.8.1 dev: false /node-addon-api@7.1.1: @@ -20969,18 +20949,6 @@ packages: resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==} dev: false - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: true - /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -21006,20 +20974,6 @@ packages: engines: {node: '>= 6.13.0'} dev: true - /node-html-markdown@1.3.0: - resolution: {integrity: sha512-OeFi3QwC/cPjvVKZ114tzzu+YoR+v9UXW5RwSXGUqGb0qCl0DvP406tzdL7SFn8pZrMyzXoisfG2zcuF9+zw4g==} - engines: {node: '>=10.0.0'} - dependencies: - node-html-parser: 6.1.13 - dev: true - - /node-html-parser@6.1.13: - resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - dependencies: - css-select: 5.1.0 - he: 1.2.0 - dev: true - /node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -21158,18 +21112,6 @@ packages: - which - write-file-atomic - /nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - dependencies: - boolbase: 1.0.0 - dev: true - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: true - /number-allocator@1.0.14: resolution: {integrity: sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==} dependencies: @@ -21541,6 +21483,30 @@ packages: engines: {node: '>=6'} dev: true + /pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.1 + debug: 4.3.7(supports-color@8.1.1) + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + dev: true + /package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -21684,7 +21650,7 @@ packages: engines: {node: '>=16 || 14 >=14.18'} dependencies: lru-cache: 10.4.3 - minipass: 6.0.2 + minipass: 7.1.2 /path-to-regexp@0.1.10: resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} @@ -21849,7 +21815,7 @@ packages: ts-node: optional: true dependencies: - lilconfig: 3.1.3 + lilconfig: 3.1.2 postcss: 8.4.49 ts-node: 10.9.2(@types/node@20.14.9)(typescript@5.5.3) yaml: 2.6.1 @@ -21953,7 +21919,7 @@ packages: resolution: {integrity: sha512-hgyCYMyzMvuF3qWMw6JvS8gT55v7Mtp5wKWcnDrw+nu39D0Tk9BXD7I0LOBp0lGlHEPaXCEVYUtviNKrhMALGA==} engines: {node: '>=15.0.0'} dependencies: - axios: 1.7.9 + axios: 1.7.8 rusha: 0.8.14 transitivePeerDependencies: - debug @@ -21984,8 +21950,8 @@ packages: hasBin: true dev: true - /prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + /prettier@3.4.1: + resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} engines: {node: '>=14'} hasBin: true dev: false @@ -22147,6 +22113,22 @@ packages: ipaddr.js: 1.9.1 dev: true + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.7(supports-color@8.1.1) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + lru-cache: 7.18.3 + pac-proxy-agent: 7.0.2 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -22174,48 +22156,33 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /puppeteer-core@19.11.1(typescript@5.5.3): - resolution: {integrity: sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==} - engines: {node: '>=14.14.0'} - peerDependencies: - typescript: '>= 4.7.4' - peerDependenciesMeta: - typescript: - optional: true + /puppeteer-core@22.15.0: + resolution: {integrity: sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==} + engines: {node: '>=18'} dependencies: - '@puppeteer/browsers': 0.5.0(typescript@5.5.3) - chromium-bidi: 0.4.7(devtools-protocol@0.0.1107588) - cross-fetch: 3.1.5 - debug: 4.3.4 - devtools-protocol: 0.0.1107588 - extract-zip: 2.0.1 - https-proxy-agent: 5.0.1 - proxy-from-env: 1.1.0 - tar-fs: 2.1.1 - typescript: 5.5.3 - unbzip2-stream: 1.4.3 - ws: 8.13.0 + '@puppeteer/browsers': 2.3.0 + chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) + debug: 4.3.7(supports-color@8.1.1) + devtools-protocol: 0.0.1312386 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate dev: true - /puppeteer@19.11.1(typescript@5.5.3): - resolution: {integrity: sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==} - deprecated: < 22.8.2 is no longer supported + /puppeteer@22.15.0(typescript@5.5.3): + resolution: {integrity: sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==} + engines: {node: '>=18'} + hasBin: true requiresBuild: true dependencies: - '@puppeteer/browsers': 0.5.0(typescript@5.5.3) - cosmiconfig: 8.1.3 - https-proxy-agent: 5.0.1 - progress: 2.0.3 - proxy-from-env: 1.1.0 - puppeteer-core: 19.11.1(typescript@5.5.3) + '@puppeteer/browsers': 2.3.0 + cosmiconfig: 9.0.0(typescript@5.5.3) + devtools-protocol: 0.0.1312386 + puppeteer-core: 22.15.0 transitivePeerDependencies: - bufferutil - - encoding - supports-color - typescript - utf-8-validate @@ -22962,7 +22929,7 @@ packages: es-abstract: 1.23.5 es-errors: 1.3.0 get-intrinsic: 1.2.4 - gopd: 1.1.0 + gopd: 1.2.0 which-builtin-type: 1.2.0 /refractor@3.6.0: @@ -23045,15 +23012,21 @@ packages: unist-util-visit: 4.1.2 dev: true + /rehype-minify-whitespace@6.0.2: + resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==} + dependencies: + '@types/hast': 3.0.4 + hast-util-minify-whitespace: 1.0.1 + dev: true + /rehype-parse@9.0.1: resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} dependencies: '@types/hast': 3.0.4 hast-util-from-html: 2.0.3 unified: 11.0.5 - dev: false - /rehype-pretty-code@0.13.2(shiki@1.24.0): + /rehype-pretty-code@0.13.2(shiki@1.12.0): resolution: {integrity: sha512-F+PaFMscfJOcSHcR2b//+hk/0jT56hmGDqXcVD6VC9j0CUSGiqv8YxaWUyhR7qEIRRSbzAVxx+0uxzk+akXs+w==} engines: {node: '>=18'} peerDependencies: @@ -23063,7 +23036,7 @@ packages: hast-util-to-string: 3.0.1 parse-numeric-range: 1.3.0 rehype-parse: 9.0.1 - shiki: 1.24.0 + shiki: 1.12.0 unified: 11.0.5 unist-util-visit: 5.0.0 dev: false @@ -23140,7 +23113,6 @@ packages: unified: 11.0.5 transitivePeerDependencies: - supports-color - dev: false /remark-math@5.1.1: resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} @@ -23237,7 +23209,6 @@ packages: '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - dev: false /remark@14.0.3: resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} @@ -23335,8 +23306,8 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true @@ -23712,7 +23683,7 @@ packages: es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 - gopd: 1.1.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 /set-function-name@2.0.2: @@ -23935,6 +23906,11 @@ packages: resolution: {integrity: sha512-x6vLHCMasg4DR2LPiyFGI0gJJhywY6DTiGhCrOMzb3SOk/0JVLIaL4UhyFSHu04SD3uAavrKY/K3zZ3i6iRcgA==} dev: false + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true + /smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} @@ -23957,7 +23933,7 @@ packages: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: dot-case: 3.0.4 - tslib: 2.4.1 + tslib: 2.8.1 dev: false /snakecase-keys@3.2.1: @@ -24058,6 +24034,25 @@ packages: - utf-8-validate dev: true + /socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.7(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + dev: true + + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: true + /sonner@1.3.1(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-+rOAO56b2eI3q5BtgljERSn2umRk63KFIvgb2ohbZ5X+Eb5u+a/7/0ZgswYqgBMg8dyl7n6OXd9KasA8QF9ToA==} peerDependencies: @@ -24121,6 +24116,7 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + requiresBuild: true /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -24193,6 +24189,10 @@ packages: /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + /sqlstring@2.3.3: resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} engines: {node: '>= 0.6'} @@ -24216,12 +24216,12 @@ packages: nan: 2.22.0 dev: true - /sswr@2.1.0(svelte@5.5.3): + /sswr@2.1.0(svelte@5.4.0): resolution: {integrity: sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 dependencies: - svelte: 5.5.3 + svelte: 5.4.0 swrev: 4.0.0 dev: false @@ -24580,8 +24580,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte@5.5.3: - resolution: {integrity: sha512-0j7XTSg5iXcLNCFcEsIZPtHO7SQeE0KgMcyF1K4K7HkjdKVPumz7dnxeXq5lGJRHfVAMZKqpEJ46rPKPKRJ57Q==} + /svelte@5.4.0: + resolution: {integrity: sha512-2I/mjD8cXDpKfdfUK+T6yo/OzugMXIm8lhyJUFM5F/gICMYnkl3C/+4cOSpia8TqpDsi6Qfm5+fdmBNMNmaf2g==} engines: {node: '>=18'} dependencies: '@ampproject/remapping': 2.3.0 @@ -24779,15 +24779,6 @@ packages: tar-stream: 2.2.0 dev: true - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 - dev: true - /tar-fs@3.0.6: resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} dependencies: @@ -24854,7 +24845,7 @@ packages: supports-hyperlinks: 2.3.0 dev: false - /terser-webpack-plugin@5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.97.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.96.1): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -24877,7 +24868,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.97.0(@swc/core@1.3.101)(esbuild@0.19.11) + webpack: 5.96.1(@swc/core@1.3.101)(esbuild@0.19.11) dev: false /terser@5.36.0: @@ -25025,6 +25016,15 @@ packages: punycode: 2.3.1 dev: true + /traverse@0.6.10: + resolution: {integrity: sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==} + engines: {node: '>= 0.4'} + dependencies: + gopd: 1.2.0 + typedarray.prototype.slice: 1.0.3 + which-typed-array: 1.1.16 + dev: true + /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -25038,6 +25038,10 @@ packages: engines: {node: '>=8'} dev: true + /trim-trailing-lines@2.1.0: + resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==} + dev: true + /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -25382,8 +25386,8 @@ packages: engines: {node: '>=12.20'} dev: false - /type-fest@4.30.0: - resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} + /type-fest@4.29.1: + resolution: {integrity: sha512-Y1zUveI92UYM/vo1EFlQSsNf74+hfKH+7saZJslF0Fw92FRaiTAnHPIvo9d7SLxXt/gAYqA4RXyDTioMQCCp0A==} engines: {node: '>=16'} /type-is@1.6.18: @@ -25408,7 +25412,7 @@ packages: dependencies: call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.1.0 + gopd: 1.2.0 has-proto: 1.1.0 is-typed-array: 1.1.13 @@ -25419,7 +25423,7 @@ packages: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.1.0 + gopd: 1.2.0 has-proto: 1.1.0 is-typed-array: 1.1.13 reflect.getprototypeof: 1.0.7 @@ -25430,11 +25434,23 @@ packages: dependencies: call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.1.0 + gopd: 1.2.0 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.7 + /typedarray.prototype.slice@1.0.3: + resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + typed-array-buffer: 1.0.2 + typed-array-byte-offset: 1.0.3 + dev: true + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true @@ -25762,6 +25778,10 @@ packages: requires-port: 1.0.0 dev: false + /urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + dev: true + /use-callback-ref@1.3.2(@types/react@18.3.11)(react@18.3.1): resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} @@ -26253,8 +26273,8 @@ packages: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.97.0(@swc/core@1.3.101)(esbuild@0.19.11): - resolution: {integrity: sha512-CWT8v7ShSfj7tGs4TLRtaOLmOCPWhoKEvp+eA7FVx8Xrjb3XfT0aXdxDItnRZmE8sHcH+a8ayDrJCOjXKxVFfQ==} + /webpack@5.96.1(@swc/core@1.3.101)(esbuild@0.19.11): + resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -26283,7 +26303,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.97.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.101)(esbuild@0.19.11)(webpack@5.96.1) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -26365,7 +26385,7 @@ packages: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.1.0 + gopd: 1.2.0 has-tostringtag: 1.0.2 /which@1.3.1: @@ -26496,7 +26516,7 @@ packages: nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 - resolve.exports: 2.0.3 + resolve.exports: 2.0.2 selfsigned: 2.4.1 source-map: 0.6.1 xxhash-wasm: 1.1.0 @@ -26532,7 +26552,7 @@ packages: nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 - resolve.exports: 2.0.3 + resolve.exports: 2.0.2 selfsigned: 2.4.1 source-map: 0.6.1 unenv: /unenv-nightly@2.0.0-20241018-011344-e666fcf @@ -26570,7 +26590,7 @@ packages: nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.8 - resolve.exports: 2.0.3 + resolve.exports: 2.0.2 selfsigned: 2.4.1 source-map: 0.6.1 unenv: /unenv-nightly@2.0.0-20241018-011344-e666fcf @@ -26634,19 +26654,6 @@ packages: optional: true dev: false - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -26782,19 +26789,6 @@ packages: yargs-parser: 18.1.3 dev: true - /yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} - engines: {node: '>=12'} - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - dev: true - /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'}